From 2dfd719653086298aad9dba6699f8e3e175c2071 Mon Sep 17 00:00:00 2001
From: SassNinja <kai.falkowski@gmail.com>
Date: Tue, 8 Aug 2017 01:01:33 +0200
Subject: [PATCH] Restore original position & alignment if no more overlap and
 set appropriate CSS classes

---
 js/foundation.dropdown.js     | 2 ++
 js/foundation.positionable.js | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/js/foundation.dropdown.js b/js/foundation.dropdown.js
index 47e52ac0b0..ed054feece 100644
--- a/js/foundation.dropdown.js
+++ b/js/foundation.dropdown.js
@@ -105,7 +105,9 @@ class Dropdown extends Positionable {
    * @private
    */
   _setPosition() {
+    this.$element.removeClass(`has-position-${this.position} has-alignment-${this.alignment}`);
     super._setPosition(this.$currentAnchor, this.$element, this.$parent);
+    this.$element.addClass(`has-position-${this.position} has-alignment-${this.alignment}`);
   }
 
   /**
diff --git a/js/foundation.positionable.js b/js/foundation.positionable.js
index 04f7ee3671..e410e5c146 100644
--- a/js/foundation.positionable.js
+++ b/js/foundation.positionable.js
@@ -40,6 +40,8 @@ class Positionable extends Plugin {
     this.triedPositions = {};
     this.position  = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position;
     this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment;
+    this.originalPosition = this.position;
+    this.originalAlignment = this.alignment;
   }
 
   _getDefaultPosition () {
@@ -122,6 +124,12 @@ class Positionable extends Plugin {
         $anchorDims = Box.GetDimensions($anchor);
 
 
+    if (!this.options.allowOverlap) {
+      // restore original position & alignment before checking overlap
+      this.position = this.originalPosition;
+      this.alignment = this.originalAlignment;
+    }
+
     $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));
 
     if(!this.options.allowOverlap) {