From e9a648cd39dc6b5e0f126b7272adeac816ece758 Mon Sep 17 00:00:00 2001
From: Erlend Halvorsen <erlendfh@gmail.com>
Date: Thu, 27 Sep 2012 10:31:40 +0200
Subject: [PATCH] Fixed bug in dropdown toggle where menu would only clear on
 the first drop down

---
 docs/assets/js/bootstrap-dropdown.js |  7 +++--
 docs/assets/js/bootstrap.js          |  7 +++--
 js/bootstrap-dropdown.js             |  7 +++--
 js/tests/unit/bootstrap-dropdown.js  | 42 +++++++++++++++++++++++++++-
 4 files changed, 53 insertions(+), 10 deletions(-)

diff --git a/docs/assets/js/bootstrap-dropdown.js b/docs/assets/js/bootstrap-dropdown.js
index 0ef9b0f9d2..503fb7b3ac 100644
--- a/docs/assets/js/bootstrap-dropdown.js
+++ b/docs/assets/js/bootstrap-dropdown.js
@@ -99,9 +99,10 @@
 
   }
 
-  function clearMenus() {
-    getParent($(toggle))
-      .removeClass('open')
+  function clearMenus() { 
+    $(toggle).each(function () { 
+      getParent($(this)).removeClass("open")
+    })
   }
 
   function getParent($this) {
diff --git a/docs/assets/js/bootstrap.js b/docs/assets/js/bootstrap.js
index d1672330ca..b539cd499d 100644
--- a/docs/assets/js/bootstrap.js
+++ b/docs/assets/js/bootstrap.js
@@ -674,9 +674,10 @@
 
   }
 
-  function clearMenus() {
-    getParent($(toggle))
-      .removeClass('open')
+  function clearMenus() { 
+    $(toggle).each(function () { 
+      getParent($(this)).removeClass("open")
+    })
   }
 
   function getParent($this) {
diff --git a/js/bootstrap-dropdown.js b/js/bootstrap-dropdown.js
index 0ef9b0f9d2..503fb7b3ac 100644
--- a/js/bootstrap-dropdown.js
+++ b/js/bootstrap-dropdown.js
@@ -99,9 +99,10 @@
 
   }
 
-  function clearMenus() {
-    getParent($(toggle))
-      .removeClass('open')
+  function clearMenus() { 
+    $(toggle).each(function () { 
+      getParent($(this)).removeClass("open")
+    })
   }
 
   function getParent($this) {
diff --git a/js/tests/unit/bootstrap-dropdown.js b/js/tests/unit/bootstrap-dropdown.js
index 3a617692b3..3788209ecc 100644
--- a/js/tests/unit/bootstrap-dropdown.js
+++ b/js/tests/unit/bootstrap-dropdown.js
@@ -7,7 +7,8 @@ $(function () {
       })
 
       test("should return element", function () {
-        ok($(document.body).dropdown()[0] == document.body, 'document.body returned')
+        var el = $("<div />")
+        ok(el.dropdown()[0] === el[0], 'same element returned')
       })
 
       test("should not open dropdown if target is disabled", function () {
@@ -102,4 +103,43 @@ $(function () {
         dropdown.remove()
       })
 
+      test("should remove open class if body clicked, with multiple drop downs", function () {
+          var dropdownHTML = 
+            '<ul class="nav">'
+            + '    <li><a href="#menu1">Menu 1</a></li>'
+            + '    <li class="dropdown" id="testmenu">'
+            + '      <a class="dropdown-toggle" data-toggle="dropdown" href="#testmenu">Test menu <b class="caret"></b></a>'
+            + '      <ul class="dropdown-menu" role="menu">'
+            + '        <li><a href="#sub1">Submenu 1</a></li>'
+            + '      </ul>'
+            + '    </li>'
+            + '</ul>'
+            + '<div class="btn-group">'
+            + '    <button class="btn">Actions</button>'
+            + '    <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>'
+            + '    <ul class="dropdown-menu">'
+            + '        <li><a href="#">Action 1</a></li>'
+            + '    </ul>'
+            + '</div>'
+          , dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]')
+          , first = dropdowns.first()
+          , last = dropdowns.last()
+
+        ok(dropdowns.length == 2, "Should be two dropdowns")
+          
+        first.click()
+        ok(first.parents('.open').length == 1, 'open class added on click')
+        ok($('#qunit-fixture .open').length == 1, 'only one object is open')
+        $('body').click()
+        ok($("#qunit-fixture .open").length === 0, 'open class removed')
+
+        last.click()
+        ok(last.parent('.open').length == 1, 'open class added on click')
+        ok($('#qunit-fixture .open').length == 1, 'only one object is open')
+        $('body').click()
+        ok($("#qunit-fixture .open").length === 0, 'open class removed')
+
+        $("#qunit-fixture").html("")
+      })
+
 })
\ No newline at end of file
-- 
GitLab