Skip to content

Instantly share code, notes, and snippets.

@hoatle
Created February 21, 2012 04:58
Show Gist options
  • Save hoatle/1873848 to your computer and use it in GitHub Desktop.
Save hoatle/1873848 to your computer and use it in GitHub Desktop.
eXo.social.DOMUtil
/**
* DOMUtil.js provides any missing function from eXo.core.DOMUtil that is required by Social.
* @author <a href="http://hoatle.net">hoatle (hoatlevan at gmail dot com)</a>
* @since Social 1.2.8
*/
(function() {
var window_ = this,
Util = eXo.social.Util;
var DOMUtil = {
/**
* Cross browser add event listener method. For 'evt' pass a string value with the leading "on" omitted
* e.g. Util.addEventListener(window,'load',myFunctionNameWithoutParenthesis,false);
*
* @param obj object to attach event
* @param evt event name or array of event names: click, mouseover, focus, blur...
* @param fnc function
* @param useCapture true or false; if false => use bubbling
* @see http://phrogz.net/JS/AttachEvent_js.txt
*/
addEventListener: function(obj, evts, fnc, useCapture) {
_addEventListener(obj, evts, fnc, useCapture)
},
/**
* Removes the registered event listener.
*
* @param obj element
* @param evt event name, 'click', 'blur'. 'focus'...
* @fnc function name to be removed if found
* //TODO make sure method cross-browser-ed
*/
removeEventListener: function(obj, evts, fnc, useCapture) {
_removeEventListener(obj, evts, fnc, useCapture);
},
/**
* Shows element by its id.
*
* @param elementId
* @display can be "inline" or "block" with default = "block"
*/
showElement: function(elementId, display) {
_showElement(elementId, display);
},
/**
* Hides element by its id.
*
* @param elementId the element id
* @param display the display mode: 'hidden' or 'none'. By default, display = 'none'.
*/
hideElement: function() {
_hideElement(elementId, display);
},
/**
* Inserts an element after an element.
*
* @param newNode the node/ element to be inserted
* @param refNode the reference node/ element
*/
insertAfter: function(newNode, refNode) {
_insertAfter(newNode, refNode);
}
};
function _addEventListener(obj, evts, fnc, useCapture) {
if (obj === null || evt === null || fnc === null || useCapture === null) {
if (console) {
console.warn('all params are required from Util.addEventListener!');
}
return;
}
if (!Util.isArray(evts)) {
evts = [evts];
}
for (var i = 0, len = evts.length; i < len; i++) {
var evt = evts[i];
if (!useCapture) {
useCapture = false;
}
if (obj.addEventListener) {
obj.addEventListener(evt, fnc, useCapture);
} else if (obj.attachEvent) {
obj.attachEvent('on' + evt, function(evt) {
fnc.call(obj, evt);
});
} else {
myAttachEvent(obj, evt, fnc);
obj['on' + evt] = function() {
myFireEvent(obj, evt)
};
}
//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
var myAttachEvent = function(obj, evt, fnc) {
if (!obj.myEvents) {
obj.myEvents = {};
}
if (!obj.myEvents[evt]) {
obj.myEvents[evt] = [];
}
var evts = obj.myEvents[evt];
evts[evts.length] = fnc;
}
var myFireEvent = function(obj, evt) {
if (!obj || !obj.myEvents || !obj.myEvents[evt]) {
return;
}
var evts = obj.myEvents[evt];
for (var i = 0, len = evts.length; i < len; i++) {
evts[i]();
}
}
}
}
function _removeEventListener(obj, evt, fnc, useCapture) {
if (!useCapture) {
useCapture = false;
}
if (obj.removeEventListener) {
obj.removeEventListener(evt, fnc, useCapture);
} else if (obj.detachEvent) {//IE
obj.detachEvent('on' + evt, fnc)
}
}
function _showElement(elementId, display) {
var element = document.getElementById(elementId);
if (element == null) {
return;
}
if (display !== 'inline') {
display = 'block';
}
element.style.display = display;
}
function _hideElement(elementId, display) {
var element = document.getElementById(elementId);
if (element === null) {
return;
}
if (display === 'hidden') {
element.style.visibility = 'hidden';
} else {
element.style.display = 'none';
}
}
function _insertAfter(newNode, refNode) {
if (!newNode || !refNode) {
return;
}
if (refNode.nextSibling()) {
refNode.parentNode.insertBefore(newNode, refNode.nextSibling);
}
}
//expose
window_.eXo = window_.eXo || {};
window_.eXo.social = window_.eXo.social || {};
window_.eXo.social.DOMUtil = DOMUtil;
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment