(function(lib){ lib.Freeform = function(portlet) { lib.Freeform.init(portlet); }; lib.Freeform.extendNativeFunctionObject({ _current: null, init: function(options) { var instance = this; // Set private variables instance._columns = options.columnSelector; instance._portlets = options.boxSelector; jQuery(instance._columns).find(instance._portlets).each(function() { instance.add(this); }); }, add: function(portlet) { var instance = this; portlet = jQuery.getOne(portlet); var handle = jQuery(".portlet-header-bar, .portlet-title-default, .portlet-topper", portlet).get(0); handle.style.cursor = "move"; portlet.style.position = "absolute"; jQuery(portlet).lDrag({ handle: handle, portlet: portlet, onStart: function(settings) { settings.wasClicked = true; settings.container.style.zIndex = 99; }, onMove: function(settings) { settings.wasClicked = false; }, onComplete: function(settings) { var portlet = settings.portlet; if (!settings.wasClicked) { var left = parseInt(portlet.style.left); var top = parseInt(portlet.style.top); left = Math.round(left/10) * 10; top = Math.round(top/10) * 10; portlet.style.left = left + "px"; portlet.style.top = top + "px"; instance.moveToTop(portlet); instance.savePosition(portlet); } portlet.style.zIndex = ""; } }); jQuery(portlet).click(function() { if (instance._current != this) { instance.moveToTop(this); instance.savePosition(this, true); instance._current = this; } }); var resizeBox = jQuery(".portlet-content-container, .portlet-borderless-container", portlet); var resizeHandle = jQuery(".portlet-resize-handle", portlet); if (!resizeHandle.length) { resizeBox.append("
"); resizeHandle = jQuery(".portlet-resize-handle", portlet); } if (resizeBox.length && resizeHandle.length) { jQuery(portlet).lResize({ handle: resizeHandle[0], direction: "horizontal", mode: "add", portlet: portlet, onStart: function(settings) { instance.moveToTop(settings.container.resizeSettings.portlet); }, onComplete: function(settings) { var portlet = settings.container.resizeSettings.portlet; var resizeBox = jQuery(portlet).getOne(".portlet-content-container, .portlet-borderless-container"); var height = parseInt(resizeBox.style.height); var width = parseInt(portlet.style.width); height = Math.round(height/10) * 10; width = Math.round(width/10) * 10; resizeBox.style.height = height + "px"; portlet.style.width = width + "px"; instance.savePosition(portlet); } }); resizeBox.lResize({ handle: resizeHandle[0], direction: "vertical", mode: "add" }); } if ((parseInt(portlet.style.top) + parseInt(portlet.style.left)) == 0) { portlet.style.top = (20 * portlet.columnPos) + "px"; portlet.style.left = (20 * portlet.columnPos) + "px"; } }, findPosition: function(portlet) { var position = -1; jQuery(".portlet-boundary", portlet.parentNode).each(function(i) { if (this == portlet) { position = i; } }); return position; }, moveToTop: function(portlet) { var container = portlet.parentNode; portlet.oldPosition = this.findPosition(portlet); container.removeChild(portlet); container.appendChild(portlet); }, savePosition : function(portlet, wasClicked) { var instance = this; var resizeBox = jQuery(portlet).find(".portlet-content-container, .portlet-borderless-container")[0]; var newPosition = Liferay.Portlet.findIndex(portlet); var cmd; if (newPosition != portlet.oldPosition) { Liferay.Portlet.savePosition(portlet); } if (resizeBox && !wasClicked) { AjaxUtil.request(themeDisplay.getPathMain() + "/portal/update_layout" + "?p_l_id=" + themeDisplay.getPlid() + "&height=" + resizeBox.style.height + "&width=" + portlet.style.width + "&top=" + portlet.style.top + "&left=" + portlet.style.left + "&p_p_id=" + portlet.portletId + "&doAsUserId=" + themeDisplay.getDoAsUserIdEncoded() + "&cmd=drag"); } } }); })(Liferay);