]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Use Popper.js to manage arrow position
authorJohann-S <johann.servoire@gmail.com>
Tue, 23 May 2017 12:17:07 +0000 (14:17 +0200)
committerJohann-S <johann.servoire@gmail.com>
Tue, 23 May 2017 13:19:54 +0000 (15:19 +0200)
js/src/popover.js
js/src/tooltip.js
scss/_popover.scss
scss/_tooltip.scss
scss/_variables.scss

index f89d3d5c8b41f182d42704b3e9ebac31c0e08a8b..6c9d7866470f53848a8ac99f8d693ef1a57149aa 100644 (file)
@@ -30,7 +30,7 @@ const Popover = (($) => {
     trigger   : 'click',
     content   : '',
     template  : '<div class="popover" role="tooltip">'
-              + '<div class="arrow"></div>'
+              + '<div class="arrow" x-arrow></div>'
               + '<h3 class="popover-title"></h3>'
               + '<div class="popover-content"></div></div>'
   })
index f447ed4cedf2cca589a305e0938012fcb9785799..ceb9bc04cca7cc08d26e1b236325c28a48ce153f 100644 (file)
@@ -60,7 +60,7 @@ const Tooltip = (($) => {
   const Default = {
     animation           : true,
     template            : '<div class="tooltip" role="tooltip">'
-                        + '<div class="arrow"></div>'
+                        + '<div class="arrow" x-arrow></div>'
                         + '<div class="tooltip-inner"></div></div>',
     trigger             : 'hover focus',
     title               : '',
index 8af1c1fab8f26595900552df7477b1067f559213..53b5593332f0c1e964841b9967e5ca743b055c50 100644 (file)
 
   // Arrows
   //
-  // .popover-arrow is outer, .popover-arrow::after is inner
+  // .arrow is outer, .arrow::after is inner
+
+  .arrow {
+    position: absolute;
+    display: block;
+    width: $popover-arrow-width;
+    height: $popover-arrow-height;
+  }
 
   .arrow::before,
   .arrow::after {
     position: absolute;
     display: block;
-    width: 0;
-    height: 0;
     border-color: transparent;
     border-style: solid;
   }
@@ -38,7 +43,7 @@
   }
   .arrow::after {
     content: "";
-    border-width: $popover-arrow-width;
+    border-width: $popover-arrow-outer-width;
   }
 
   // Popover directions
   &.bs-popover-top {
     margin-bottom: $popover-arrow-width;
 
+    .arrow {
+      bottom: 0;
+    }
+
     .arrow::before,
     .arrow::after {
-      left: 50%;
       border-bottom-width: 0;
     }
 
     .arrow::before {
       bottom: -$popover-arrow-outer-width;
-      margin-left: -$popover-arrow-outer-width;
+      margin-left: -($popover-arrow-outer-width - 5);
       border-top-color: $popover-arrow-outer-color;
     }
 
     .arrow::after {
       bottom: -($popover-arrow-outer-width - 1);
-      margin-left: -$popover-arrow-width;
+      margin-left: -($popover-arrow-outer-width - 5);
       border-top-color: $popover-arrow-color;
     }
   }
   &.bs-popover-right {
     margin-left: $popover-arrow-width;
 
+    .arrow {
+      left: 0;
+    }
+
     .arrow::before,
     .arrow::after {
-      top: 50%;
+      margin-top: -($popover-arrow-outer-width - 3);
       border-left-width: 0;
     }
 
     .arrow::before {
       left: -$popover-arrow-outer-width;
-      margin-top: -$popover-arrow-outer-width;
       border-right-color: $popover-arrow-outer-color;
     }
 
     .arrow::after {
       left: -($popover-arrow-outer-width - 1);
-      margin-top: -($popover-arrow-outer-width - 1);
       border-right-color: $popover-arrow-color;
     }
   }
   &.bs-popover-bottom {
     margin-top: $popover-arrow-width;
 
+    .arrow {
+      top: 0;
+    }
+
     .arrow::before,
     .arrow::after {
-      left: 50%;
+      margin-left: -($popover-arrow-width - 3);
       border-top-width: 0;
     }
 
     .arrow::before {
       top: -$popover-arrow-outer-width;
-      margin-left: -$popover-arrow-outer-width;
       border-bottom-color: $popover-arrow-outer-color;
     }
 
     .arrow::after {
       top: -($popover-arrow-outer-width - 1);
-      margin-left: -$popover-arrow-width;
       border-bottom-color: $popover-arrow-color;
     }
 
   &.bs-popover-left {
     margin-right: $popover-arrow-width;
 
+    .arrow {
+      right: 0;
+    }
+
     .arrow::before,
     .arrow::after {
-      top: 50%;
+      margin-top: -($popover-arrow-outer-width - 3);
       border-right-width: 0;
     }
 
     .arrow::before {
       right: -$popover-arrow-outer-width;
-      margin-top: -$popover-arrow-outer-width;
       border-left-color: $popover-arrow-outer-color;
     }
 
     .arrow::after {
       right: -($popover-arrow-outer-width - 1);
-      margin-top: -($popover-arrow-outer-width - 1);
       border-left-color: $popover-arrow-color;
     }
   }
index 4eaaa1c58f9026cbb7f3c49388c5e0606977ddb1..c62ce9779fe6242744d61100d16d5bf6d10a3b15 100644 (file)
 
   &.show { opacity: $tooltip-opacity; }
 
+  .arrow {
+    position: absolute;
+    display: block;
+    width: $tooltip-arrow-width;
+    height: $tooltip-arrow-height;
+  }
+
   &.bs-tooltip-top {
     padding: $tooltip-arrow-width 0;
+    .arrow {
+      bottom: 0;
+    }
 
     .arrow::before {
-      bottom: 0;
-      left: 50%;
-      margin-left: -$tooltip-arrow-width;
+      margin-left: -($tooltip-arrow-width - 2);
       content: "";
       border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
       border-top-color: $tooltip-arrow-color;
   }
   &.bs-tooltip-right {
     padding: 0 $tooltip-arrow-width;
+    .arrow {
+      left: 0;
+    }
 
     .arrow::before {
-      top: 50%;
-      left: 0;
-      margin-top: -$tooltip-arrow-width;
+      margin-top: -($tooltip-arrow-width - 2);
       content: "";
       border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;
       border-right-color: $tooltip-arrow-color;
   }
   &.bs-tooltip-bottom {
     padding: $tooltip-arrow-width 0;
+    .arrow {
+      top: 0;
+    }
 
     .arrow::before {
-      top: 0;
-      left: 50%;
-      margin-left: -$tooltip-arrow-width;
+      margin-left: -($tooltip-arrow-width - 2);
       content: "";
       border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
       border-bottom-color: $tooltip-arrow-color;
   }
   &.bs-tooltip-left {
     padding: 0 $tooltip-arrow-width;
+    .arrow {
+      right: 0;
+    }
 
     .arrow::before {
-      top: 50%;
       right: 0;
-      margin-top: -$tooltip-arrow-width;
+      margin-top: -($tooltip-arrow-width - 2);
       content: "";
       border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;
       border-left-color: $tooltip-arrow-color;
@@ -65,8 +77,6 @@
 
   .arrow::before {
     position: absolute;
-    width: 0;
-    height: 0;
     border-color: transparent;
     border-style: solid;
   }
index 1bcabdc472fc3486da74f7306f7aaae8869b3f95..d62990fb8134773bf884ec1e7511e2a730214072 100644 (file)
@@ -698,7 +698,9 @@ $tooltip-padding-y:           3px !default;
 $tooltip-padding-x:           8px !default;
 $tooltip-margin:              0 !default;
 
+
 $tooltip-arrow-width:         5px !default;
+$tooltip-arrow-height:        5px !default;
 $tooltip-arrow-color:         $tooltip-bg !default;
 
 
@@ -721,6 +723,7 @@ $popover-content-padding-y:           9px !default;
 $popover-content-padding-x:           14px !default;
 
 $popover-arrow-width:                 10px !default;
+$popover-arrow-height:                5px !default;
 $popover-arrow-color:                 $popover-bg !default;
 
 $popover-arrow-outer-width:           ($popover-arrow-width + 1px) !default;