aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-03-04 17:12:03 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-03-04 17:12:03 +0000
commite3bfd08cbcbffddf53de4f0f6030a794402cf532 (patch)
treeb11b3e823f0ea11fd820f7fe07470b4671a92a53
parent964b67dd0eb2b43cc8097492c52ce777c534cd11 (diff)
downloadrails-e3bfd08cbcbffddf53de4f0f6030a794402cf532.tar.gz
rails-e3bfd08cbcbffddf53de4f0f6030a794402cf532.tar.bz2
rails-e3bfd08cbcbffddf53de4f0f6030a794402cf532.zip
Fixed Effect.Appear in effects.js to work with floats in Safari (closes #3524, #3813, #3044) [Thomas Fuchs]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3757 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--actionpack/CHANGELOG2
-rwxr-xr-xactionpack/Rakefile6
-rw-r--r--actionpack/lib/action_view/helpers/javascripts/effects.js10
-rw-r--r--railties/Rakefile2
-rw-r--r--railties/html/javascripts/effects.js10
-rw-r--r--railties/html/javascripts/prototype.js41
6 files changed, 49 insertions, 22 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 07f97bca6e..49fd59c72e 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Fixed Effect.Appear in effects.js to work with floats in Safari #3524, #3813, #3044 [Thomas Fuchs]
+
* Fixed that default image extension was not appended when using a full URL with AssetTagHelper#image_tag #4032, #3728 [rubyonrails@beautifulpixel.com]
* Added that page caching will only happen if the response code is less than 400 #4033 [g.bucher@teti.ch]
diff --git a/actionpack/Rakefile b/actionpack/Rakefile
index 79c6a0da0b..211c52f46d 100755
--- a/actionpack/Rakefile
+++ b/actionpack/Rakefile
@@ -115,11 +115,13 @@ end
# Publishing ------------------------------------------------------
task :update_scriptaculous do
- system("svn export --force http://dev.rubyonrails.org/svn/rails/spinoffs/scriptaculous/src/ #{File.dirname(__FILE__)}/lib/action_view/helpers/javascripts/")
+ for js in %w( controls dragdrop effects )
+ system("svn export --force http://dev.rubyonrails.org/svn/rails/spinoffs/scriptaculous/src/#{js} #{File.dirname(__FILE__)}/lib/action_view/helpers/javascripts/")
+ end
end
desc "Updates actionpack to the latest version of the javascript spinoffs"
-task :update_js => [:update_scriptaculous]
+task :update_js => [ :update_scriptaculous ]
# Publishing ------------------------------------------------------
diff --git a/actionpack/lib/action_view/helpers/javascripts/effects.js b/actionpack/lib/action_view/helpers/javascripts/effects.js
index 91d5348a03..c5183092fd 100644
--- a/actionpack/lib/action_view/helpers/javascripts/effects.js
+++ b/actionpack/lib/action_view/helpers/javascripts/effects.js
@@ -85,6 +85,12 @@ Element.childrenWithClassName = function(element, className) {
function(c) { return Element.hasClassName(c, className) });
}
+Element.forceRerendering = function(element) {
+ var n = document.createTextNode(' ');
+ $(element).appendChild(n);
+ Element.remove(n);
+}
+
Array.prototype.call = function() {
var args = arguments;
this.each(function(f){ f.apply(this, args) });
@@ -545,6 +551,10 @@ Effect.Appear = function(element) {
var options = Object.extend({
from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),
to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ Element.forceRerendering(effect.element);
+ },
beforeSetup: function(effect) { with(Element) {
setOpacity(effect.element, effect.options.from);
show(effect.element); }}
diff --git a/railties/Rakefile b/railties/Rakefile
index a0ad9fb639..823837585a 100644
--- a/railties/Rakefile
+++ b/railties/Rakefile
@@ -75,7 +75,7 @@ end
desc "Updates railties to the latest version of the javascript spinoffs"
task :update_js do
- for js in %w( prototype controls dragdrop effects slider )
+ for js in %w( prototype controls dragdrop effects )
rm "html/javascripts/#{js}.js"
cp "./../actionpack/lib/action_view/helpers/javascripts/#{js}.js", "html/javascripts"
end
diff --git a/railties/html/javascripts/effects.js b/railties/html/javascripts/effects.js
index 91d5348a03..c5183092fd 100644
--- a/railties/html/javascripts/effects.js
+++ b/railties/html/javascripts/effects.js
@@ -85,6 +85,12 @@ Element.childrenWithClassName = function(element, className) {
function(c) { return Element.hasClassName(c, className) });
}
+Element.forceRerendering = function(element) {
+ var n = document.createTextNode(' ');
+ $(element).appendChild(n);
+ Element.remove(n);
+}
+
Array.prototype.call = function() {
var args = arguments;
this.each(function(f){ f.apply(this, args) });
@@ -545,6 +551,10 @@ Effect.Appear = function(element) {
var options = Object.extend({
from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),
to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ Element.forceRerendering(effect.element);
+ },
beforeSetup: function(effect) { with(Element) {
setOpacity(effect.element, effect.options.from);
show(effect.element); }}
diff --git a/railties/html/javascripts/prototype.js b/railties/html/javascripts/prototype.js
index f37149127f..2c201fd64c 100644
--- a/railties/html/javascripts/prototype.js
+++ b/railties/html/javascripts/prototype.js
@@ -942,17 +942,17 @@ Object.extend(Element, {
setTimeout(function() {html.evalScripts()}, 10);
},
- replace: function(element, html) {
- element = $(element);
- if (element.outerHTML) {
- element.outerHTML = html.stripScripts();
- } else {
- var range = element.ownerDocument.createRange();
- range.selectNodeContents(element);
- element.parentNode.replaceChild(
- range.createContextualFragment(html.stripScripts()), element);
- }
- setTimeout(function() {html.evalScripts()}, 10);
+ replace: function(element, html) {
+ element = $(element);
+ if (element.outerHTML) {
+ element.outerHTML = html.stripScripts();
+ } else {
+ var range = element.ownerDocument.createRange();
+ range.selectNodeContents(element);
+ element.parentNode.replaceChild(
+ range.createContextualFragment(html.stripScripts()), element);
+ }
+ setTimeout(function() {html.evalScripts()}, 10);
},
getHeight: function(element) {
@@ -1317,7 +1317,7 @@ var Field = {
$(arguments[i]).value = '';
},
- focus: function(element) {
+ focus: function(element) {
$(element).focus();
},
@@ -1551,15 +1551,16 @@ Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
Abstract.EventObserver = function() {}
Abstract.EventObserver.prototype = {
- initialize: function(element, callback) {
- this.element = $(element);
- this.callback = callback;
+ initialize: function() {
+ this.element = $(arguments[0]);
+ this.callback = arguments[1];
+ this.trigger = arguments[2];
this.lastValue = this.getValue();
if (this.element.tagName.toLowerCase() == 'form')
this.registerFormCallbacks();
else
- this.registerCallback(this.element);
+ this.registerCallback(this.element, this.trigger);
},
onElementEvent: function() {
@@ -1573,11 +1574,13 @@ Abstract.EventObserver.prototype = {
registerFormCallbacks: function() {
var elements = Form.getElements(this.element);
for (var i = 0; i < elements.length; i++)
- this.registerCallback(elements[i]);
+ this.registerCallback(elements[i], this.trigger);
},
- registerCallback: function(element) {
- if (element.type) {
+ registerCallback: function(element, trigger) {
+ if (trigger && element.type) {
+ Event.observe(element, trigger, this.onElementEvent.bind(this));
+ } else if (element.type) {
switch (element.type.toLowerCase()) {
case 'checkbox':
case 'radio':