diff options
Diffstat (limited to 'src/nsPopover.js')
| -rw-r--r-- | src/nsPopover.js | 36 | 
1 files changed, 28 insertions, 8 deletions
| diff --git a/src/nsPopover.js b/src/nsPopover.js index 505fbba..96a1652 100644 --- a/src/nsPopover.js +++ b/src/nsPopover.js @@ -5,6 +5,8 @@    var $el = angular.element;
    var isDef = angular.isDefined;
    var forEach = angular.forEach;
 +  var $popovers = [];
 +  var globalId = 0;
    module.directive('nsPopover', function($timeout, $templateCache, $q, $http, $compile, $document) {
      return {
 @@ -17,7 +19,8 @@            trigger: attrs.nsPopoverTrigger || 'click',
            container: attrs.nsPopoverContainer,
            placement: attrs.nsPopoverPlacement || 'bottom|left',
 -          timeout: attrs.nsPopoverTimeout || 1.5
 +          timeout: attrs.nsPopoverTimeout || 1.5,
 +          hideOnClick: attrs.nsPopoverHideOnClick === 'true' || attrs.nsPopoverHideOnClick === undefined
          };
          var hider_ = {
 @@ -54,11 +57,15 @@            $container = $document.find('body');
          }
 -        var $popover = $el('<div></div>');
          var $triangle;
          var placement_;
          var align_;
 +        globalId += 1;
 +
 +        var $popover = $el('<div id="nspopover-' + globalId +'"></div>');
 +        $popovers.push($popover);
 +
          var match = options.placement
            .match(/^(top|bottom|left|right)$|((top|bottom)\|(center|left|right)+)|((left|right)\|(center|top|bottom)+)/);
 @@ -134,10 +141,12 @@            // |elm|.
            move($popover, placement_, align_, getBoundingClientRect(elm[0]), $triangle);
 -          // Hide the popover without delay on click events.
 -          $popover.on('click', function() {
 -            hider_.hide($popover, 0);
 -          });
 +          if (options.hideOnClick) {
 +            // Hide the popover without delay on click events.
 +            $popover.on('click', function () {
 +              hider_.hide($popover, 0);
 +            });
 +          }
          });
          elm
 @@ -222,8 +231,19 @@            var x = (isDef(w.pageXOffset)) ? w.pageXOffset : doc.scrollLeft;
            var y = (isDef(w.pageYOffset)) ? w.pageYOffset : doc.scrollTop;
            var rect = elm.getBoundingClientRect();
 -          rect.top += y;
 -          rect.left += x;
 +
 +          // ClientRect class is immutable, so we need to return a modified copy
 +          // of it when the window has been scrolled.
 +          if (x || y) {
 +            return {
 +              bottom:rect.bottom+y,
 +              left:rect.left + x,
 +              right:rect.right + x,
 +              top:rect.top + y,
 +              height:rect.height,
 +              width:rect.width
 +            };
 +          }
            return rect;
          }
 | 
