Liferay.Portlet = {
list: [],
staticList: {},
add: function(options) {
var instance = this;
var plid = options.plid || themeDisplay.getPlid();
var portletId = options.portletId;
var doAsUserId = options.doAsUserId || themeDisplay.getDoAsUserIdEncoded();
var placeHolder = jQuery(options.placeHolder || '
');
var positionOptions = options.positionOptions;
var beforePortletLoaded = options.beforePortletLoaded;
var onComplete = options.onComplete;
var container = jQuery('.lfr-portlet-column:first');
if (!container.length) {
return;
}
var portletPosition = 0;
var currentColumnId = 'column-1';
if (options.placeHolder) {
var column = placeHolder.parent();
placeHolder.addClass('portlet-boundary');
portletPosition = column.find('.portlet-boundary[isStatic!=start]').index(placeHolder[0]);
currentColumnId = Liferay.Util.getColumnId(column[0].id);
}
var url = themeDisplay.getPathMain() + '/portal/update_layout';
var data = {
p_l_id: plid,
p_p_id: portletId,
p_p_col_id: currentColumnId,
p_p_col_pos: portletPosition,
doAsUserId: doAsUserId,
dataType: 'json',
cmd: 'add'
};
var firstPortlet = container.find('.portlet-boundary:first');
var hasStaticPortlet = (firstPortlet.length && firstPortlet[0].isStatic);
if (!options.placeHolder && !options.plid) {
if (!hasStaticPortlet) {
container.prepend(placeHolder);
}
else {
firstPortlet.after(placeHolder);
}
}
if (themeDisplay.isFreeformLayout()) {
container.prepend(placeHolder);
}
data.currentURL = Liferay.currentURL;
return instance.addHTML(
{
beforePortletLoaded: beforePortletLoaded,
data: data,
url: url,
placeHolder: placeHolder[0],
onComplete: onComplete
}
);
},
addHTML: function(options) {
var instance = this;
var portletBoundary = null;
var url = options.url;
var data = options.data;
var dataType = 'html';
var placeHolder = options.placeHolder;
var beforePortletLoaded = options.beforePortletLoaded;
var onComplete = options.onComplete;
if (data && data.dataType) {
dataType = data.dataType;
}
var addPortletReturn = function(html) {
var container = placeHolder.parentNode;
var portletBound = jQuery('' + html + '
');
portletBound = portletBound.find('> div')[0];
var portletId = Liferay.Util.getPortletId(portletBound.id);
portletBound.portletId = portletId;
jQuery(placeHolder).hide().after(portletBound).remove();
instance.refreshLayout(portletBound);
Liferay.Util.addInputType(portletBound.id);
if (window.location.hash) {
window.location.hash = "p_" + portletId;
}
portletBoundary = portletBound;
if (onComplete) {
onComplete(portletBoundary, portletId);
}
var jContainer = jQuery(container);
if (jContainer.is('.empty')) {
jContainer.removeClass('empty');
}
return portletId;
};
if (beforePortletLoaded) {
beforePortletLoaded(placeHolder);
}
jQuery.ajax(
{
url: url,
data: data,
dataType: dataType,
success: function(message) {
if (dataType == 'html') {
addPortletReturn(message);
}
else {
if (message.refresh) {
location.reload();
}
else {
addPortletReturn(message.portletHTML);
}
}
}
}
);
},
close: function(portlet, skipConfirm, options) {
var instance = this;
if (skipConfirm || confirm('\u0042\u0069\u007a\u0074\u006f\u0073\u0061\u006e\u0020\u0074\u00f6\u0072\u00f6\u006c\u006e\u0069\u0020\u0061\u006b\u0061\u0072\u006a\u0061\u0020\u0065\u007a\u0074\u0020\u0061\u0020\u006b\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0073\u0074\u003f')) {
options = options || {};
var plid = options.plid || themeDisplay.getPlid();
var doAsUserId = options.doAsUserId || themeDisplay.getDoAsUserIdEncoded();
var portletId = portlet.portletId;
var currentPortlet = jQuery(portlet);
var column = currentPortlet.parents('.lfr-portlet-column:first');
currentPortlet.remove();
jQuery('#' + portletId).remove();
var url = themeDisplay.getPathMain() + '/portal/update_layout';
jQuery.ajax(
{
url: url,
data: {
p_l_id: plid,
p_p_id: portletId,
doAsUserId: doAsUserId,
cmd: 'delete'
}
}
);
var portletsLeft = column.find('.portlet-boundary').length;
if (!portletsLeft) {
column.addClass('empty');
}
Liferay.trigger('closePortlet', {plid: plid, portletId: portletId});
}
else {
self.focus();
}
},
minimize: function(portlet, el, options) {
var instance = this;
options = options || {};
var plid = options.plid || themeDisplay.getPlid();
var doAsUserId = options.doAsUserId || themeDisplay.getDoAsUserIdEncoded();
var content = jQuery('.portlet-content-container', portlet);
var restore = content.is(':hidden');
content.slideToggle(
'fast',
function() {
var action = (restore) ? 'removeClass' : 'addClass';
jQuery(portlet)[action]('portlet-minimized');
if (el) {
var title = (restore) ? '\u004d\u0069\u006e\u0069\u006d\u0061\u006c\u0069\u007a\u00e1\u006c\u00e1\u0073' : '\u0048\u0065\u006c\u0079\u0072\u0065\u00e1\u006c\u006c\u00ed\u0074\u00e1\u0073';
var link = jQuery(el);
var img = link.find('img');
var imgSrc = img.attr('src');
if (restore) {
imgSrc = imgSrc.replace(/restore.png$/, 'minimize.png');
}
else {
imgSrc = imgSrc.replace(/minimize.png$/, 'restore.png');
}
img.attr('alt', title);
img.attr('title', title);
link.attr('title', title);
img.attr('src', imgSrc);
if (restore && Liferay.Browser.isIe()) {
content.css('display', '');
}
}
}
);
jQuery.ajax(
{
url: themeDisplay.getPathMain() + '/portal/update_layout',
data: {
p_l_id: plid,
p_p_id: portlet.portletId,
p_p_restore: restore,
doAsUserId: doAsUserId,
cmd: 'minimize'
}
}
);
},
onLoad: function(options) {
var instance = this;
var canEditTitle = options.canEditTitle;
var columnPos = options.columnPos;
var isStatic = (options.isStatic == 'no') ? null : options.isStatic;
var namespacedId = options.namespacedId;
var portletId = options.portletId;
var refreshURL = options.refreshURL;
instance.staticList[namespacedId] = isStatic;
jQuery(
function () {
var jPortlet = jQuery('#' + namespacedId);
var portlet = jPortlet[0];
if (!portlet.portletProcessed) {
portlet.portletProcessed = true;
portlet.portletId = portletId;
portlet.columnPos = columnPos;
portlet.isStatic = isStatic;
portlet.refreshURL = refreshURL;
// Functions to run on portlet load
if (canEditTitle) {
Liferay.Util.portletTitleEdit(
{
obj: jPortlet,
plid: themeDisplay.getPlid(),
doAsUserId: themeDisplay.getDoAsUserIdEncoded(),
portletId: portletId
}
);
}
if (!themeDisplay.layoutMaximized) {
jPortlet.find('.portlet-configuration:first a').click(
function(event) {
location.href = this.href + '&previewWidth=' + portlet.offsetHeight;
return false;
}
);
jPortlet.find('.portlet-minimize:first a').click(
function(event) {
instance.minimize(portlet, this);
return false;
}
);
jPortlet.find('.portlet-maximize:first a').click(
function(event) {
submitForm(document.hrefFm, this.href);
return false;
}
);
jPortlet.find('.portlet-close:first a').click(
function(event) {
instance.close(portlet);
return false;
}
);
jPortlet.find('.portlet-refresh:first a').click(
function(event) {
instance.refresh(portlet);
}
);
jPortlet.find('.portlet-print:first a').click(
function(event) {
location.href = this.href;
return false;
}
);
jPortlet.find('.portlet-css:first a').click(
function(event) {
Liferay.PortletCSS.init(portlet.portletId);
}
);
}
Liferay.trigger('portletReady', {portletId: portletId, portlet: jPortlet});
var list = instance.list;
var index = list.indexOf(portletId);
if (index > -1) {
list.splice(index, 1);
}
if (!list.length) {
Liferay.trigger('allPortletsReady', {portletId: portletId});
}
}
}
);
},
refresh: function(portlet) {
var instance = this;
if (portlet.refreshURL) {
var url = portlet.refreshURL;
var id = portlet.id;
portlet = jQuery(portlet);
var placeHolder = jQuery('');
portlet.before(placeHolder);
portlet.remove();
instance.addHTML(
{
url: url,
placeHolder: placeHolder[0],
onComplete: function(portlet, portletId) {
portlet.refreshURL = url;
}
}
);
}
},
refreshLayout: function(portletBound) {
}
};
jQuery.fn.last = function(fn) {
Liferay.bind(
'allPortletsReady',
function(event) {
fn();
}
)
};
// Backwards compatability
Liferay.Portlet.ready = function(fn) {
Liferay.bind(
'portletReady',
function(event, data) {
fn(data.portletId, data.portlet);
}
);
};