Liferay.Dock = {
init: function() {
var instance = this;
var dock = jQuery('.lfr-dock');
if (!dock.is('.interactive-mode')) {
return;
}
dock.addClass('lfr-component');
var dockList = dock.find('.lfr-dock-list');
if (dockList.length > 0) {
var myPlaces = jQuery('.my-places', dock);
Liferay.Util.createFlyouts(
{
container: dockList[0],
mouseOver: function(event) {
if (this.className.indexOf('my-places') > -1) {
jQuery('.current-community > ul', this).show();
}
else if (this.parentNode.className.indexOf('taglib-my-places') > -1) {
jQuery('ul', this.parentNode).hide();
jQuery('> ul', this).show();
}
}
}
);
dockList.find('li:first-child, a:first-child').addClass('first');
dockList.find('li:last-child, a:last-child').addClass('last');
instance._dock = dock;
instance._dockList = dockList;
instance._myPlaces = myPlaces;
dockList.hide();
dockList.wrap('<div class="lfr-dock-list-container"></div>');
var dockDefaults = {
cursor: 'pointer',
position: 'absolute',
zIndex: Liferay.zIndex.DOCK
};
instance._setPosition(dock, dockDefaults);
var dockOver = function(event) {
instance._setCloser();
instance._toggle('show');
};
var dockOut = function(event) {
instance._toggle('hide');
};
dock.hoverIntent(
{
interval: 0,
out: dockOut,
over: dockOver,
timeout: 500
}
);
if (Liferay.Browser.isIe() && Liferay.Browser.getMajorVersion() <= 6) {
myPlaces.find('> ul').css('zoom', 1);
}
var dockParent = dock.parent();
var dockParentDefaults = {
position: 'relative',
zIndex: Liferay.zIndex.DOCK_PARENT
};
instance._setPosition(dockParent, dockParentDefaults);
instance._handleDebug();
}
},
_setPosition: function(obj, defaults) {
var instance = this;
var settings = defaults;
if (!obj.is('.ignore-position')) {
var position = obj.css('position');
var zIndex = obj.css('z-index');
var isStatic = !/absolute|relative|fixed/.test(position);
if (zIndex == 'auto' || zIndex == 0) {
zIndex = defaults.zIndex;
}
// The position is static, but use top/left positioning as a trigger
if (isStatic) {
position = defaults.position;
var top = parseInt(obj.css('top'));
if (Liferay.Browser.isSafari() && isNaN(top)) {
top = -1;
}
if (!isNaN(top) && top != 0) {
position = '';
zIndex = '';
}
}
settings = jQuery.extend(
defaults,
{
position: position,
zIndex: zIndex
}
);
}
obj.css(settings);
return settings;
},
_handleDebug: function() {
var instance = this;
var dock = instance._dock;
var dockList = instance._dockList;
var myPlacesList = instance._myPlaces.find('> ul');
if (dock.is('.debug')) {
dock.show();
dockList.show();
dockList.addClass('expanded');
}
},
_setCloser: function() {
var instance = this;
if (!instance._hovered) {
jQuery(document).one(
'click',
function(event) {
var currentEl = jQuery(event.target);
var dockParent = currentEl.parents('.lfr-dock');
if ((dockParent.length == 0) && !currentEl.is('.lfr-dock')) {
instance._toggle('hide');
instance._hovered = false;
}
}
);
instance._hovered = true;
}
},
_toggle: function(state) {
var instance = this;
var dock = instance._dock;
var dockList = instance._dockList;
if (state == 'hide') {
dockList.hide();
dock.removeClass('expanded');
}
else if (state == 'show') {
dockList.show();
dock.addClass('expanded');
}
else {
dockList.toggle();
dock.toggleClass('expanded');
}
}
};