You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2009/11/20 04:19:45 UTC
svn commit: r882397 - in /portals/jetspeed-2:
applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/
applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/toolbox/
portal/trunk/applications/jetspeed/src/main/webapp/jetui/eng...
Author: taylor
Date: Fri Nov 20 03:19:45 2009
New Revision: 882397
URL: http://svn.apache.org/viewvc?rev=882397&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-1057
- contribution from Gonzalo Aguilar Delgado
- toolbox retrieve portlets over ajax api
Reviewed. I've modified and fixed a few things...
- fixed the display names to display
- rewrote the row population script to use YUI Node api replacing direct DOM manipulation
- dont' use a onclick handler, simply call the first load of portlets directly inline
im actually not sure what should be populated first, perhaps a "Whats New" category
- added some TODOs for you, see source code for details
Im also thinking that it might be better to create the nodes directly from javascript, and not pass in the hidden table (I added a display:none attribute on it) although the hidden table is definitely easier. Optionally you may want to consider loading from a string, something like:
var clone = Y.Node.create("<table><tr>....etc....");
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/toolbox/toolbox.jsp
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java
Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java?rev=882397&r1=882396&r2=882397&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java Fri Nov 20 03:19:45 2009
@@ -157,8 +157,8 @@
//TODO: The following two lines need to be move somewhere like 'serveResource()'
// because portlets info should be retrieved from ajax calls.
- List<PortletInfo> portlets = retrievePortlets(request, null);
- request.setAttribute("portlets", portlets);
+ //List<PortletInfo> portlets = retrievePortlets(request, null);
+ //request.setAttribute("portlets", portlets);
request.setAttribute("categories", retrieveCategories(request));
request.setAttribute("layouts", LayoutBean.retrieveLayouts(request, decorationFactory));
Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/toolbox/toolbox.jsp
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/toolbox/toolbox.jsp?rev=882397&r1=882396&r2=882397&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/toolbox/toolbox.jsp (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/toolbox/toolbox.jsp Fri Nov 20 03:19:45 2009
@@ -64,6 +64,7 @@
div.style.display = (div.style.display == "none" ? "" : "none");
}
}
+
</script>
<form id='jsPortletSearch' method="POST" action='<portlet:actionURL/>'>
@@ -88,7 +89,7 @@
<tr>
<td class="portlet-section-subheader" colspan='10'>
<input type="text" name="filter" size="15" value="" >
- <input type="submit" value="search" />
+ <input type="submit" value="search" onClick="loadPortlets(null); alert('test');"/>
</td>
</tr>
@@ -106,29 +107,16 @@
<tr>
<td>
<div style="height: 400px; overflow: auto;">
- <table style="border-collapse: collapse; width: 100%; margin-top: 0px; margin-bottom: 0px; float: left;">
+ <table class="portlet-panel-portlets" style="border-collapse: collapse; width: 100%; margin-top: 0px; margin-bottom: 0px; float: left;">
+ <!--
<c:forEach var="portletInfo" items="${portlets}">
<tr>
<td class="portlet-section-body" style='background: #fff'>
- <table style="border-collapse: collapse; width: 100%; margin-top: 0px; margin-bottom: 0px; float: left;">
- <tr>
- <td rowspan="2" width="20%" class="portlet-section-body">
- <img src='<c:url context="${portalContextPath}" value="${portletInfo.image}"/>'/>
- </td>
- <td width="80%" class="portlet-section-body">${portletInfo.displayName}</td>
- </tr>
- <tr>
- <td class="portlet-section-body">
- <a href="<portlet:actionURL><portlet:param name='portletPreview' value='${portletInfo.name}'/></portlet:actionURL>">Preview</a>
- <c:if test="${editAccess}">
- <a href="<portlet:actionURL><portlet:param name='portletAdd' value='${portletInfo.name}'/></portlet:actionURL>">Add</a>
- </c:if>
- </td>
- </tr>
- </table>
+
</td>
</tr>
</c:forEach>
+ -->
</table>
</div>
</td>
@@ -139,6 +127,21 @@
</tr>
</table>
+<table id="portlet-body-html" style="display: none; border-collapse: collapse; width: 100%; margin-top: 0px; margin-bottom: 0px; float: left;">
+ <tr>
+ <td rowspan="2" width="20%" class="portlet-section-body">
+ <img src='${portalContextPath}' />
+ </td>
+ <td id="name" width="80%" class="portlet-section-body">#</td>
+ </tr>
+ <tr>
+ <td class="portlet-section-body">
+ <a href="#">Preview</a>
+ <a href="#">Add</a>
+ </td>
+ </tr>
+</table>
+
<table id="<portlet:namespace/>layoutsTab" style="display: none; border-collapse: collapse; width: 100%; margin-top: 0px; margin-bottom: 0px; float: left;">
<tr>
<th class="portlet-section-header" colspan="2">Layouts</th>
@@ -191,4 +194,4 @@
</tr>
</table>
-</form>
+</form>
\ No newline at end of file
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js?rev=882397&r1=882396&r2=882397&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js Fri Nov 20 03:19:45 2009
@@ -1,5 +1,5 @@
//Use loader to grab the modules needed
-YUI(yuiConfig).use('console', 'dd', 'anim', 'io', 'datatype-xml', 'dataschema-xml', 'node-base', 'node-menunav', function(Y) {
+YUI(yuiConfig).use('console', 'dd', 'anim', 'io', 'datatype-xml', 'dataschema-xml', 'dataschema-json', 'node-base', 'node-menunav', function(Y) {
// Retrieve the Node instance representing the root menu
// (<div id="environments-menu">) and call the "plug" method
@@ -234,14 +234,11 @@
var cleanseForSelector = function(s) {
return s.replace(/(\.|\#)/g, "\\$1");
}
-
- Y.log(" *** replacing " + cleanseForSelector("widget.name#address.cool#3"));
var onRemoveComplete = function(id, o, args) {
var id = id; // Transaction ID.
var data = o.responseText; // Response data.
var widgetId = args[0];
- // widgetId = widgetId.replace("\.", "\\.");
widgetId = cleanseForSelector(widgetId);
var widget = Y.one("#" + widgetId);
if (widget)
@@ -439,6 +436,9 @@
persistMove(drag.get('node'));
});
+
+
+
var persistMove = function(drag) {
if (drag.data.get("toolbar") == false) {
var uri = document.location.href;
@@ -459,6 +459,77 @@
var request = Y.io(uri);
}
};
+
+ var onLoadPortletComplete = function(id, o, args) {
+ var id = id; // Transaction ID.
+ var data = o.responseText; // Response data.
+ var node = args[0];
+ var schemaPortletList = {
+ metaFields: {status:"status", action:"action"},
+ resultListLocator: "portlets",
+ resultFields: [{key:"name"}, {key:"displayName"}, {key:"description"}, {key:"image"}]
+ };
+ try {
+ var dataOut = Y.DataSchema.JSON.apply(schemaPortletList, data);
+ } catch (err)
+ {
+ Y.log("Error: " + err.message);
+ return;
+ }
+ if(dataOut!=null)
+ {
+ // TODO: error handling
+ if(dataOut.error)
+ {
+ alert("Error: " + dataOut.error);
+ }
+ else
+ {
+ var templatePanel = Y.Node.one("#portlet-body-html");
+ for(var i=0; i<dataOut.results.length; i++)
+ {
+ var clone = templatePanel.cloneNode(true);
+ clone.setStyle('display', '');
+ var imgNode = clone.one('img');
+ if(imgNode!=null)
+ {
+ var url = imgNode.getAttribute('src');
+ var imgURL = url + "/" + dataOut.results[i].image;
+ imgNode.setAttribute('src', imgURL);
+ var nameNode = clone.one('#name');
+ nameNode.setContent(dataOut.results[i].displayName);
+ // TODO: add handlers for add and preview
+ // TODO: limit # of portlets to n...
+ // TODO: support paging...
+ node.appendChild(clone);
+ }
+ }
+ }
+ }
+
+
+ };
+ ///////////////////////////////////////////////////
+ //
+ var loadPortlets = function(panel) {
+ var uri = document.location.href;
+ uri = uri.replace("/ui", "/ajaxapi");
+
+ var uri = uri + "?action=getportlets&format=json"; //"id=" + windowId + "&col=" + drag.data.get('column') + "&row=" + drag.data.get('row');
+
+ //var uri = "http://localhost:8080/jetspeed/test.json";
+
+ Y.on('io:complete', onLoadPortletComplete, this, [panel]);
+ var request = Y.io(uri);
+
+ };
+
+ var portletPanel = Y.Node.all('.portlet-panel-portlets');
+ portletPanel.each(function(v, k) {
+ //v.on('click', loadPortlets(v));
+ loadPortlets(v);
+ });
+
var reallocateColumn = function(column) {
var columns = Y.Node.all('.portal-layout-column');
columns.each(function(v, k) {
@@ -612,4 +683,4 @@
// });
-});
+});
\ No newline at end of file
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm?rev=882397&r1=882396&r2=882397&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm Fri Nov 20 03:19:45 2009
@@ -13,7 +13,27 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+
+---------------------------------------------------------------------------------
+
+ Be carefull about white spaces and carriage returns because JSON YUI3 library
+ will complain about json parse error. The library is very picky and don't catch
+ comments at all...
+
+---------------------------------------------------------------------------------
*#
+#if ($format == "json"){
+ "status": "$status",
+ "action": "$action",
+ "portlets": [#foreach($portlet in $portlets)
+ #if($velocityCount > 1),#end{
+ "name": "$!portlet.Name",
+ "displayName": "$!portlet.DisplayName",
+ "description": "$!portlet.Description",
+ "image": "$portlet.Image"
+ }#end]
+}
+#else
<js>
<status>$status</status>
<action>$action</action>
@@ -25,3 +45,4 @@
</portlets>
</js>
+#end
\ No newline at end of file
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java?rev=882397&r1=882396&r2=882397&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java Fri Nov 20 03:19:45 2009
@@ -27,6 +27,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.commons.lang.StringEscapeUtils;
import org.apache.jetspeed.JetspeedActions;
import org.apache.jetspeed.ajax.AjaxAction;
import org.apache.jetspeed.ajax.AjaxBuilder;
@@ -98,8 +99,14 @@
// }
// status = "refresh";
}
+ String type = getActionParameter(requestContext, TYPE );
+ String format = getActionParameter(requestContext, FORMAT );
+
String filter = getActionParameter(requestContext, FILTER);
- List portlets = retrievePortlets(requestContext, filter);
+ List<PortletInfo> portlets = retrievePortlets(requestContext, filter);
+
+ resultMap.put(TYPE, type );
+ resultMap.put(FORMAT, format );
resultMap.put(STATUS, status);
resultMap.put(PORTLETS, portlets);
}
@@ -158,8 +165,14 @@
else
{
image = "images/portlets/applications-internet.png";
- }
- list.add(new PortletInfo(uniqueName, portlet.getDisplayNameText(locale), portlet.getDescriptionText(locale), image));
+ }
+
+
+ PortletInfo portInfo=new PortletInfo(uniqueName,
+ StringEscapeUtils.escapeXml(portlet.getDisplayNameText(locale)),
+ StringEscapeUtils.escapeXml(portlet.getDescriptionText(locale)), image);
+
+ list.add(portInfo);
}
}
Collections.sort(list, this);
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org