bug #13636 [WebProfilerBundle] Fixes event listener attaching error in IE (aik099)

This PR was merged into the 2.6 branch.

Discussion
----------

[WebProfilerBundle] Fixes event listener attaching error in IE

I haven't tested the change, because I don't any working Symfony installation at hand. By the looks of changes it should work.

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | not sure (do we have JS tests?)
| Fixed tickets | #13447
| License       | MIT
| Doc PR        |

Commits
-------

21693e4 [WebProfilerBundle] Fixes event listener attaching error in IE
This commit is contained in:
Fabien Potencier 2015-02-11 11:38:49 +01:00
commit 7356876c33
2 changed files with 38 additions and 19 deletions

View File

@ -281,14 +281,7 @@
}
// attach listener for expanding/collapsing the target
buttons[i].addEventListener('click', function (e) {
toggle(this);
e.preventDefault();
e.stopPropagation();
return false;
});
clickHandler(buttons[i], toggle);
if (states.hasOwnProperty(targetId)) {
// open or collapse based on stored data
@ -380,14 +373,7 @@
throw "Tab target " + targetId + " does not exist";
}
tabs[i].addEventListener('click', function (e) {
select(this);
e.preventDefault();
e.stopPropagation();
return false;
});
clickHandler(buttons[i], select);
Sfjs.addClass(target, 'hidden');
}
@ -405,7 +391,26 @@
}
var tabTarget = new TabView(),
toggler = new Toggler(new JsonStorage(sessionStorage));
toggler = new Toggler(new JsonStorage(sessionStorage)),
clickHandler = function (element, callback) {
Sfjs.addEventListener(element, 'click', function (e) {
if (!e) {
e = window.event;
}
callback(e.target || e.srcElement);
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
e.stopPropagation();
return false;
});
};
tabTarget.initTabs(document.querySelectorAll('.tree .tree-inner'));
toggler.initButtons(document.querySelectorAll('a.toggle-button'));

View File

@ -171,6 +171,18 @@
requestCounter[0].className = className;
};
var addEventListener;
if (document.addEventListener) {
addEventListener = function (element, eventName, callback) {
element.attachEvent('on' + eventName, callback);
};
} else {
addEventListener = function (element, eventName, callback) {
element.addEventListener(eventName, callback, false);
};
}
{% if excluded_ajax_paths is defined %}
var proxied = XMLHttpRequest.prototype.open;
@ -189,7 +201,7 @@
requestStack.push(stackElement);
this.addEventListener("readystatechange", function() {
addEventListener(this, 'readystatechange', function() {
if (self.readyState == 4) {
stackElement.duration = new Date() - stackElement.start;
stackElement.loading = false;
@ -199,7 +211,7 @@
Sfjs.renderAjaxRequests();
}
}, false);
});
Sfjs.renderAjaxRequests();
}
@ -219,6 +231,8 @@
setPreference: setPreference,
addEventListener: addEventListener,
request: request,
renderAjaxRequests: renderAjaxRequests,