Sha256: de29c456a1b8dfc879cfb88dd40d3d345ce6ec4040990489ca2fbafc1c908eb7

Contents?: true

Size: 1.95 KB

Versions: 2

Compression:

Stored size: 1.95 KB

Contents

/*
 * Artefact Web Extensions
 *
 * Copyright 2012, Artefact Group LLC
 * Licensed under MIT.
 */
(function(Awe, global, document, undefined) {

  // Stack of saved document.onclick handlers
  var _savedDocumentOnClickCallbacks = [];
  
  /* 
   * purpose: Helper function to ensure that we have an element. Allows called 
   * of ui* functions to pass in either an HTML element object or an id string, 
   * in which case we will look it up by id.
   */
  var ensureElement = function(element) {
    if(typeof(element) == "string") {
      return document.getElementById(element);
    } else {
      return element;
    }
  }
  
  /* 
   * method: Awe.uiPopup
   *
   * purpose: Attach show/hide popup behavior to an element.
   *
   */
  Awe.uiPopup = function(element) {
  
    if ( !(this instanceof Awe.uiPopup) ) return new Awe.uiPopup(element);
      
    var _i = this;
    
    element = ensureElement(element);
    
    if(!element) throw "cannot find element with given id";
    
    _i.show = function(dismissedCallback) {
      if(element.style.visibility != "visible") {
        element.style.visibility = "visible";
        _savedDocumentOnClickCallbacks.push(document.onclick);
        document.onclick = (function(e) {
          e = e || window.event;
          if (!xHasPoint(element, e.x, e.y)) { // TODO Handle x dependency
            _i.hide(true);
            if(dismissedCallback) dismissedCallback();
          }
          return;
        });
        // if call context is a click handler
        if(window.event && window.event.type == "click") Awe.cancelEvent(window.event); 
      }
    }
    
    _i.hide = function(bubbleCurrentEvent) {
      if(element.style.visibility != "hidden") {
        element.style.visibility = "hidden";
        document.onclick = _savedDocumentOnClickCallbacks.pop();
      }
      if(!bubbleCurrentEvent && window.event && window.event.type == "click") Awe.cancelEvent(window.event);
      return;
    }    
  }
    
})(Awe, this, document)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
awe-rails-0.5.1 vendor/assets/javascripts/awe-ui.js
awe-rails-0.5.0 vendor/assets/javascripts/awe-ui.js