Created
February 21, 2012 04:58
-
-
Save hoatle/1873848 to your computer and use it in GitHub Desktop.
eXo.social.DOMUtil
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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