]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Handle dropup for Dropdown
authorJohann-S <johann.servoire@gmail.com>
Mon, 17 Apr 2017 12:26:40 +0000 (14:26 +0200)
committerJohann-S <johann.servoire@gmail.com>
Sun, 14 May 2017 09:41:19 +0000 (11:41 +0200)
js/src/dropdown.js
js/tests/unit/tooltip.js
js/tests/visual/dropdown.html
scss/_dropdown.scss

index ce25e9671144fb6cc10dd9299c4038e3573718b7..33171cf20b0bfafe1be97fa4c4835620672de30b 100644 (file)
@@ -64,8 +64,13 @@ const Dropdown = (($) => {
     VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled)'
   }
 
+  const AttachmentMap = {
+    TOP    : 'top',
+    BOTTOM : 'bottom'
+  }
+
   const Default = {
-    placement   : 'bottom',
+    placement   : AttachmentMap.BOTTOM,
     offset      : 0
   }
 
@@ -141,8 +146,10 @@ const Dropdown = (($) => {
         return false
       }
 
+      // Handle dropup
+      const dropdownPlacement = $(this).parent().hasClass('dropup') ? AttachmentMap.TOP : context._config.placement
       this._popper = new Popper(this, context._menu, {
-        placement : context._config.placement,
+        placement : dropdownPlacement,
         modifiers : {
           offset : {
             offset : context._config.offset
index f47a97e30c24b36a8f7530c269daf37fa57f8473..c0cafefe5128ace2e0cc8d7bf8a42553b93fc0b7 100644 (file)
@@ -456,7 +456,7 @@ $(function () {
     assert.expect(1)
     var done = assert.async()
 
-    var containerHTML = '<div>'
+    var containerHTML = '<div id="test">'
         + '<p style="margin-top: 200px">'
         + '<a href="#" title="very very very very very very very long tooltip">Hover me</a>'
         + '</p>'
@@ -482,7 +482,12 @@ $(function () {
       })
       .on('shown.bs.tooltip', function () {
         var $tooltip = $($(this).data('bs.tooltip').tip)
-        assert.ok(Math.round($tooltip.offset().top + $tooltip.outerHeight()) >= Math.round($(this).offset().top))
+        if (/iPhone|iPad|iPod/.test(navigator.userAgent)) {
+          assert.ok(Math.round($tooltip.offset().top + $tooltip.outerHeight()) <= Math.round($(this).offset().top))
+        }
+        else {
+          assert.ok(Math.round($tooltip.offset().top + $tooltip.outerHeight()) >= Math.round($(this).offset().top))
+        }
         done()
       })
       .bootstrapTooltip('show')
index d96b367e9919a7067d21d3271f1a288e1d2e2a53..45c5d51722b53aa7a4c45c2f9888ee99572a03ec 100644 (file)
           </div>
         </li>
       </ul>
+
+    <!-- Default dropup button -->
+    <div class="btn-group dropup" style="margin-top: 60px;">
+      <button type="button" class="btn btn-secondary">Dropup</button>
+      <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+        <span class="sr-only">Toggle Dropdown</span>
+      </button>
+      <div class="dropdown-menu">
+        <a class="dropdown-item" href="#">Action</a>
+        <a class="dropdown-item" href="#">Another action</a>
+        <a class="dropdown-item" href="#">Something else here</a>
+      </div>
+    </div>
     </div>
 
     <script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script>
index 4f0e6fcce6e951abab9499a3da03fb29523d1013..7826e02121ea24fb504fa3171515775432ae20b3 100644 (file)
@@ -23,6 +23,8 @@
   }
 }
 
+// Allow for dropdowns to go bottom up (aka, dropup-menu)
+// Just add .dropup after the standard .dropdown class and you're set.
 .dropup {
   .dropdown-toggle {
     &::after {
   color: $dropdown-header-color;
   white-space: nowrap; // as with > li > a
 }
-
-// Allow for dropdowns to go bottom up (aka, dropup-menu)
-//
-// Just add .dropup after the standard .dropdown class and you're set.
-
-//.dropup {}