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); };