From 21693e457186f65977bc1143cabdc802dd32016d Mon Sep 17 00:00:00 2001 From: Alexander Obuhovich Date: Tue, 10 Feb 2015 11:59:31 +0200 Subject: [PATCH] [WebProfilerBundle] Fixes event listener attaching error in IE --- .../Resources/views/Collector/form.html.twig | 39 +++++++++++-------- .../views/Profiler/base_js.html.twig | 18 ++++++++- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/form.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/form.html.twig index fda6d599e9b9..ce2d194af8f5 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/form.html.twig +++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/form.html.twig @@ -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')); diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig index 42941eb50521..0db84ed771dc 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig +++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig @@ -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,