Liferay.Portlet = {
fn: {},
fnAll: [],
fnLast: [],
ajaxList: {},
list: {},
isAjax: function(id) {
return (this.ajaxList[id] == 1);
},
flagAjax: function(id) {
this.ajaxList[id] = 1;
},
process: function(id) {
var status = this.list[id];
var count = 0;
this.list[id] = 0;
if (status == 1) {
this.processPortlet(id);
this.processAll(id);
}
else if (status == 0) {
// Already processed. Do nothing.
}
else {
// New portlet. Process and mark.
this.processPortlet(id);
}
for (var i in this.list) {
count += this.list[i];
}
if (count == 0) {
this.processLast(id);
}
},
processAll: function(id) {
for (var i = 0; i < this.fnAll.length; i++) {
this.fnAll[i](id, jQuery("#p_p_id_" + id + "_"));
}
},
processPortlet: function(id) {
if (this.fn[id]) {
for (var i = 0; i < this.fn[id].length; i++) {
this.fn[id][i](id, jQuery("#p_p_id_" + id + "_"));
}
this.fn[id] = [];
}
},
processLast: function(id) {
for (var i = 0; i < this.fnLast.length; i++) {
this.fnLast[i](id);
}
this.fnLast = [];
},
ready: function(arg1, arg2) {
if (typeof arg1 == "function") {
this.fnAll.push(arg1);
}
else if (typeof arg1 == "string" && typeof arg2 == "function") {
if (!this.fn[arg1]) {
this.fn[arg1] = [];
}
this.fn[arg1].push(arg2);
}
},
remove: function(id) {
this.ajaxList[id] = 0;
this.list[id] = 1;
this.fn[id] = [];
},
last: function(arg1) {
this.fnLast.push(arg1);
},
/*
 * Helper methods for portlets
 */
findIndex: function(portlet) {
var index = -1;
jQuery("> .portlet-boundary", portlet.parentNode).each(
function(i) {
if (this == portlet) {
index = i;
}
}
);
return index;
},
move: function(data) {
var portlet = data.portlet;
var neighbor = data.neighbor;
var quadrant = data.quadrant;
var container = data.container;
if (neighbor && quadrant) {
if (quadrant == 1 || quadrant == 2) {
jQuery(neighbor).before(portlet);
}
else {
jQuery(neighbor).after(portlet);
}
if (portlet && portlet.originalColumn) {
var oColumn = jQuery(portlet.originalColumn);
var portlets = oColumn.find('.portlet-boundary:first');
if (portlets.length == 0) {
oColumn.addClass('empty');
}
oColumn = portlet.originalColumn = null;
}
}
else if (container) {
jQuery(container).append(portlet).removeClass('empty');
}
this.savePosition(portlet);
},
savePosition: function(portlet) {
var currentColumnId = portlet.parentNode.id.replace(/^layout-column_/, '');
var index = this.findIndex(portlet);
var portletId = portlet.id.replace(/^(p_p_id_)/, '');
portletId = portletId.substring(0, portletId.length - 1);
AjaxUtil.request(themeDisplay.getPathMain() + "/portal/update_layout" +
"?p_l_id=" + themeDisplay.getPlid() +
"&p_p_id=" + portletId +
"&p_p_col_id=" + currentColumnId +
"&p_p_col_pos=" + index +
"&doAsUserId=" + themeDisplay.getDoAsUserIdEncoded() +
"&cmd=move");
}
};
jQuery.fn.last = function(fn) {
Liferay.Portlet.last(fn);
};