jford 2004/03/17 11:15:13
Modified: webapp/WEB-INF/templates/jsp/controllers/html
x-multicolumn-customize.jsp
Log:
Added Apache License 2.0
Revision Changes Path
1.3 +517 -502
jakarta-jetspeed/webapp/WEB-INF/templates/jsp/controllers/html/x-multicolumn-customize.jsp
Index: x-multicolumn-customize.jsp
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed/webapp/WEB-INF/templates/jsp/controllers/html/x-multicolumn-customize.jsp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- x-multicolumn-customize.jsp 3 Nov 2003 18:21:40 -0000 1.2
+++ x-multicolumn-customize.jsp 17 Mar 2004 19:15:13 -0000 1.3
@@ -1,502 +1,517 @@
-<%@ page import = "java.util.*" %>
-<%@ page import = "org.apache.turbine.util.*" %>
-<%@ page import = "org.apache.velocity.context.Context" %>
-<%@ page import = "org.apache.jetspeed.util.Config" %>
-<%@ page import = "org.apache.jetspeed.portal.*" %>
-<%@ page import = "org.apache.jetspeed.om.profile.psml.PsmlEntry" %>
-<%@ page import = "org.apache.jetspeed.om.SecurityReference" %>
-<%@ page import = "org.apache.jetspeed.util.template.*" %>
-<%@ page import = "org.apache.jetspeed.util.StringUtils" %>
-<%@ page import =
"org.apache.jetspeed.services.customlocalization.CustomLocalizationTool" %>
-
-<%
-Context context = (Context) request.getAttribute("jspContext");
-Object[] columns = (Object[]) context.get("portlets");
-PortletController controller = (PortletController) context.get("controller");
-Config myConfig = controller.getConfig();
-String[] sizes = StringUtils.stringToArray(myConfig.getInitParameter("sizes"), ",");
-JetspeedLink jslink = (JetspeedLink) context.get("jslink");
-String action = (String) context.get("action");
-CustomLocalizationTool l10n = (CustomLocalizationTool) context.get("l10n");
-Map portletTitleMap = (Map) context.get("titles");
-RunData runData = (RunData) context.get("data");
-JetspeedTool jetspeed = (JetspeedTool) context.get("jetspeed");
-%>
-
-<style>
-.drag-block {
- position: relative;
- border: solid gray;
- cursor: pointer;
- height: 120px;
-}
-.drag-sink {
- position: relative;
- border: solid #EEEEEE;
-}
-</style>
-
-<script type="text/javascript" src="javascript/util.js"></script>
-<script type="text/javascript">
-
-// global variables
-
-dragBlockTemplate = '<div class="drag-block" name="{col:${col},row:${row}}"><form
name="decoration-${portletId}" action="${jslinkTemplate}" method="post"
onSubmit="javascript:submitFormWithModelChanges(this)"><table border="0"
width="100%"><tr><td align="center" colspan="2"><b>${portletTitle}</b></td><td
align="right"><input type="image" src="${closeImageSrc}" border="0"
name="eventSubmit_doDelete" title="remove"></td></tr><tr><td valign="top"
width="45%">Skin : ${portletSkinName}</td><td valign="top">Security ID :
${portletSecurityId}</td><td></td></tr><tr><td colspan="2">Decoration :
${portletDecoration}</td><td></td></tr></table><input type="hidden" name="js_peid"
value="${portletId}"><input type="hidden" name="col" value="${originalCol}"><input
type="hidden" name="row" value="${originalRow}"><input type="hidden"
name="eventSubmit_doControl" value="doControl"><input type="hidden" name="<%=
jslink.getActionKey() %>" value="<%= action %>" ><input type="hidden"
name="modelChangeList"></form></div>';
-
-dragSinkTemplate = '<div class="drag-sink" name="{col:${col},row:${row}}"></div>';
-
-layoutPlaygroundTableColumnTemplate = '<td valign="top"
width="${width}">${columnContent}</td>';
-
-var modelRoot = [
-<%
-for (int i = 0; i < columns.length; i++)
-{
-%>
- <%= i > 0 ? "," : "" %>[
-<%
- List portletList = (List) columns[i];
- for (int j = 0; j < portletList.size(); j++)
- {
-%>
- <%= j > 0 ? "," : "" %>
-<%
- PsmlEntry entry = (PsmlEntry) portletList.get(j);
- String portletId = entry.getId();
- String portletTitle = (String) portletTitleMap.get(entry.getId());
- String portletSkinName = entry.getSkin() == null ? "-- Default --" :
entry.getSkin().getName();
-
- // security reference
- SecurityReference securityReference =
jetspeed.getSecurityReference(entry);
- String portletSecurityRef;
- if (securityReference != null)
- {
- portletSecurityRef = securityReference.getParent();
- if (jetspeed.getSecuritySource(entry) == 1)
- {
- portletSecurityRef = portletSecurityRef + "<span
style=\"color:red\"><br/>" + l10n.get("SECURITY_IS_REGISTRY_LEVEL") + ".</span>";
- }
- else if (jetspeed.getSecuritySource(entry) == 2)
- {
- portletSecurityRef = portletSecurityRef + "<span
style=\"color:red\"><br/>" + l10n.get("SECURITY_IS_SYSTEM_DEFAULT") + ".</span>";
- }
- }
- else
- {
- portletSecurityRef = "-- Default --";
- }
-
- // decoration
- String controlListBox =
- (entry.getControl() != null && entry.getControl().getName() !=
null) ?
- JetspeedTool.getPortletParameter(runData, (Portlet)
runData.getUser().getTemp("customizer"), "control", entry.getControl().getName()) :
- JetspeedTool.getPortletParameter(runData, (Portlet)
runData.getUser().getTemp("customizer"), "control");
- controlListBox = controlListBox.substring(12);
- controlListBox = controlListBox.replace('\n', ' ');
- controlListBox = controlListBox.replace('\r', ' ');
-%>
- {id:'<%= portletId %>', parent:'<%= entry.getParent() %>',title:'<%=
portletTitle %>',description:'<%= entry.getDescription() %>',skinName:'<%=
portletSkinName %>',securityId:'<%= portletSecurityRef %>',controlListBox:'<%=
controlListBox %>'}
-<%
- }
-%>
- ]
-<%
-}
-%>
-];
-var sizes = [
-<%
-for (int i = 0; i < sizes.length; i++)
-{
-%>
- <%= i > 0 ? "," : "" %>'<%= sizes[i] %>'
-<%
-}
-%>
-];
-
-var dragBlockList;
-var dragSinkList;
-
-function renderLayoutPlayground(columns)
-{
- var content = '<table border="0" width="100%" id="layoutPlaygroundTable"><tr>';
-
- for (var i = 0; i < columns.length; i++)
- {
- var columnContent = fillTemplate(
- dragSinkTemplate,
- 'col', i,
- 'row', 0
- );
- var portletList = columns[i];
- for (var j = 0; j < portletList.length; j++)
- {
- var psmlEntry = portletList[j];
- var controlListBox =
psmlEntry.controlListBox.replace(/this.form.submit\(\)/gi,
'submitFormWithModelChanges(this.form)');
- columnContent += fillTemplate(
- dragBlockTemplate,
- 'portletId', psmlEntry.id,
- 'portletTitle', psmlEntry.title,
- 'portletSkinName', psmlEntry.skinName,
- 'portletSecurityId', psmlEntry.securityId,
- 'portletDecoration', controlListBox,
- 'closeImageSrc', 'images/close.gif',
- 'jslinkTemplate', '<%= jslink.getTemplate() %>',
- 'col', i,
- 'row', j,
- 'originalCol', i,
- 'originalRow', j
- );
- columnContent += fillTemplate(
- dragSinkTemplate,
- 'col', i,
- 'row', j + 1
- );
- }
- content += fillTemplate(
- layoutPlaygroundTableColumnTemplate,
- 'width', sizes[i],
- 'columnContent', columnContent
- );
- }
-
- content += '</tr></table>';
- var layoutPlaygroundDiv = document.getElementById('layoutPlayground');
- layoutPlaygroundDiv.innerHTML = content;
-
- buildDragBlockList();
- buildDragSinkList();
-}
-
-var target = null;
-var highlightedDragSink = null;
-var previousX = 0;
-var previousY = 0;
-
-function elementGetTop(elem)
-{
- var top = parseInt(elem.style.top);
- if (isNaN(top))
- return 0;
- else
- return top;
-}
-
-function elementGetLeft(elem)
-{
- var left = parseInt(elem.style.left);
- if (isNaN(left))
- return 0;
- else
- return left;
-}
-
-function elementMoveBy(elem, point)
-{
- var newTop = elementGetTop(elem) + point.y;
- var newLeft = elementGetLeft(elem) + point.x;
- elem.style.top = newTop + 'px';
- elem.style.left = newLeft + 'px';
-}
-
-function elementMoveTo(elem, point)
-{
- elem.style.top = point.x + 'px';
- elem.style.left = point.y + 'px';
-}
-
-function getEventPositionX(e)
-{
- if (!e)
- {
- // IE
- e = window.event;
- return e.clientX + document.body.scrollLeft;
- }
- else
- {
- // standard
- return e.clientX + document.body.scrollLeft;
- }
-}
-
-function getEventPositionY(e)
-{
- if (!e)
- {
- // IE
- e = window.event;
- return e.clientY + document.body.scrollTop;
- }
- else
- {
- // standard
- return e.clientY + document.body.scrollTop;
- }
-}
-
-function findTargetDragBlock(e)
-{
- var x = getEventPositionX(e);
- var y = getEventPositionY(e);
-
- for (var i = 0; i < dragBlockList.length; i++)
- {
- var dragBlock = dragBlockList[i];
- if (elementContainsPoint(dragBlock, x, y))
- {
- return dragBlock;
- }
- }
-
- return null;
-}
-
-function handleMouseDown(event)
-{
- if (!event) // IE
- {
- event = window.event;
-// event.target = event.srcElement;
- }
-
- target = findTargetDragBlock(event);
-
- if (target)
- {
- previousX = getEventPositionX(event);
- previousY = getEventPositionY(event);
- target.originalPosition = {x:elementGetLeft(target),
y:elementGetTop(target)};
- target.style.borderColor = 'black';
- event.cancelBubble = true;
- event.returnValue = false;
- return false;
- }
- else
- {
- return true;
- }
-}
-
-function handleMouseMove(event)
-{
- if (!event) // IE
- {
- event = window.event;
-// event.target = event.srcElement;
- }
-
- if (target)
- {
- var currentX = getEventPositionX(event);
- var currentY = getEventPositionY(event);
- var dx = currentX - previousX;
- var dy = currentY - previousY;
- target.style.cursor = 'move';
- elementMoveBy(target, {x:dx, y:dy});
- highlightDragSink(currentX, currentY);
- previousX = currentX;
- previousY = currentY;
- event.cancelBubble = true;
- event.returnValue = false;
- return false;
- }
- else
- {
- return true;
- }
-}
-
-function handleMouseUp(event)
-{
- if (!event) // IE
- {
- event = window.event;
-// event.target = event.srcElement;
- }
-
- if (target)
- {
- target.style.cursor = 'pointer';
- target.style.borderColor = 'gray';
- if (highlightedDragSink)
- {
- drop(target, highlightedDragSink);
- unhighlight(highlightedDragSink);
- highlightedDragSink = null;
- }
- else
- {
- elementMoveTo(target, target.originalPosition);
- }
- target.originalPosition = null;
- target = null;
- previousX = 0;
- previousY = 0;
- event.cancelBubble = true;
- event.returnValue = false;
- return false;
- }
- else
- {
- return true;
- }
-}
-
-document.onmousedown = handleMouseDown;
-document.onmousemove = handleMouseMove;
-document.onmouseup = handleMouseUp;
-
-function highlightDragSink(x, y)
-{
- for (var i = 0; i < dragSinkList.length; i++)
- {
- var dragSink = dragSinkList[i];
- if (elementContainsPoint(dragSink, x, y))
- {
- if (highlightedDragSink)
- unhighlight(highlightedDragSink);
- highlight(dragSink);
- highlightedDragSink = dragSink;
- return;
- }
- }
-
- if (highlightedDragSink)
- {
- unhighlight(highlightedDragSink);
- highlightedDragSink = null;
- }
-}
-
-function elementContainsPoint(elem, x, y)
-{
- var top = elem.offsetTop;
- var left = elem.offsetLeft;
- var height = elem.offsetHeight;
- var width = elem.offsetWidth;
- return (0 <= x - left && x - left <= width) &&
- (0 <= y - top && y - top <= height);
-}
-
-function highlight(elem)
-{
- elem.style.borderColor = '#FF0000';
-}
-
-function unhighlight(elem)
-{
- elem.style.borderColor = '#EEEEEE';
-}
-
-function buildDragBlockList()
-{
- var layoutPlaygroundTable = document.getElementById('layoutPlaygroundTable');
- var dragBlockCandidateList = layoutPlaygroundTable.getElementsByTagName("div");
- dragBlockList = new Array();
- for (var i = 0; i < dragBlockCandidateList.length; i++)
- {
- var dragBlockCandidate = dragBlockCandidateList[i];
- if (dragBlockCandidate.className == 'drag-block')
- dragBlockList[dragBlockList.length] = dragBlockCandidate;
- }
-}
-
-function buildDragSinkList()
-{
- var layoutPlaygroundTable = document.getElementById('layoutPlaygroundTable');
- var dragSinkCandidateList = layoutPlaygroundTable.getElementsByTagName("div");
- dragSinkList = new Array();
- for (var i = 0; i < dragSinkCandidateList.length; i++)
- {
- var dragSinkCandidate = dragSinkCandidateList[i];
- if (dragSinkCandidate.className == 'drag-sink')
- dragSinkList[dragSinkList.length] = dragSinkCandidate;
- }
-}
-
-function drop(target, dragSink)
-{
- var targetRowCol = eval('_rowcol=' + target.attributes['name'].value);
- var dragSinkRowCol = eval('_rowcol=' + dragSink.attributes['name'].value);
-
- if (destSameAsOrigin(targetRowCol, dragSinkRowCol))
- return;
-
- // get reference to portletEtnry
- var portletEntry = modelRoot[targetRowCol.col][targetRowCol.row];
-
- // remove from old position
- modelRoot[targetRowCol.col].splice(targetRowCol.row, 1);
-
- // insert into new position
- modelRoot[dragSinkRowCol.col].splice(dragSinkRowCol.row, 0, portletEntry);
-
- recordModelChange(targetRowCol, dragSinkRowCol);
-
- renderLayoutPlayground(modelRoot);
-}
-
-function destSameAsOrigin(origin, dest)
-{
- return
- (origin.col == dest.col) &&
- (origin.row == dest.row || origin.row + 1 == dest.row);
-}
-
-function recordModelChange(origin, dest)
-{
- var change = origin.col + ',' + origin.row + ',' + dest.col + ',' + dest.row;
- var f = document.forms['xform'];
- if (f.modelChangeList.value == '')
- f.modelChangeList.value = change;
- else
- f.modelChangeList.value += ';' + change;
-}
-
-function submitFormWithModelChanges(form)
-{
- var modelChangeList = document.forms.xform.modelChangeList.value;
- form.modelChangeList.value = modelChangeList;
- form.submit();
-}
-
-function getPrintString(o)
-{
- var s = '{';
- for (p in o)
- {
- s += p + ':' + o[p] + ', ';
- }
- s += '}';
- return s;
-}
-</script>
-
-<!-- layout table -->
-<br>
-
-<div id='layoutPlayground'></div>
-<script type="text/javascript">
-renderLayoutPlayground(modelRoot);
-</script>
-
-<br>
-
-<!-- buttons -->
- <form name="xform" action="<%= jslink.getTemplate() %>" method="post">
- <input type="hidden" name="<%= jslink.getActionKey() %>" value="<%= action %>" >
- <input type="hidden" name="modelChangeList" value="">
- <center>
- <table cellspacing="2">
- <tr>
- <td>
- <input type="submit" name="eventSubmit_doSave" value="<%=
l10n.get("CUSTOMIZER_SAVEAPPLY") %>">
- </td>
- <td>
- <input type="submit" name="eventSubmit_doCancel" value="<%=
l10n.get("CUSTOMIZER_CANCEL") %>">
- </td>
- </tr>
- </table>
- </center>
-</form>
+<%--
+Copyright 2004 The Apache Software Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+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.
+--%>
+<%@ page import = "java.util.*" %>
+<%@ page import = "org.apache.turbine.util.*" %>
+<%@ page import = "org.apache.velocity.context.Context" %>
+<%@ page import = "org.apache.jetspeed.util.Config" %>
+<%@ page import = "org.apache.jetspeed.portal.*" %>
+<%@ page import = "org.apache.jetspeed.om.profile.psml.PsmlEntry" %>
+<%@ page import = "org.apache.jetspeed.om.SecurityReference" %>
+<%@ page import = "org.apache.jetspeed.util.template.*" %>
+<%@ page import = "org.apache.jetspeed.util.StringUtils" %>
+<%@ page import =
"org.apache.jetspeed.services.customlocalization.CustomLocalizationTool" %>
+
+<%
+Context context = (Context) request.getAttribute("jspContext");
+Object[] columns = (Object[]) context.get("portlets");
+PortletController controller = (PortletController) context.get("controller");
+Config myConfig = controller.getConfig();
+String[] sizes = StringUtils.stringToArray(myConfig.getInitParameter("sizes"), ",");
+JetspeedLink jslink = (JetspeedLink) context.get("jslink");
+String action = (String) context.get("action");
+CustomLocalizationTool l10n = (CustomLocalizationTool) context.get("l10n");
+Map portletTitleMap = (Map) context.get("titles");
+RunData runData = (RunData) context.get("data");
+JetspeedTool jetspeed = (JetspeedTool) context.get("jetspeed");
+%>
+
+<style>
+.drag-block {
+ position: relative;
+ border: solid gray;
+ cursor: pointer;
+ height: 120px;
+}
+.drag-sink {
+ position: relative;
+ border: solid #EEEEEE;
+}
+</style>
+
+<script type="text/javascript" src="javascript/util.js"></script>
+<script type="text/javascript">
+
+// global variables
+
+dragBlockTemplate = '<div class="drag-block" name="{col:${col},row:${row}}"><form
name="decoration-${portletId}" action="${jslinkTemplate}" method="post"
onSubmit="javascript:submitFormWithModelChanges(this)"><table border="0"
width="100%"><tr><td align="center" colspan="2"><b>${portletTitle}</b></td><td
align="right"><input type="image" src="${closeImageSrc}" border="0"
name="eventSubmit_doDelete" title="remove"></td></tr><tr><td valign="top"
width="45%">Skin : ${portletSkinName}</td><td valign="top">Security ID :
${portletSecurityId}</td><td></td></tr><tr><td colspan="2">Decoration :
${portletDecoration}</td><td></td></tr></table><input type="hidden" name="js_peid"
value="${portletId}"><input type="hidden" name="col" value="${originalCol}"><input
type="hidden" name="row" value="${originalRow}"><input type="hidden"
name="eventSubmit_doControl" value="doControl"><input type="hidden" name="<%=
jslink.getActionKey() %>" value="<%= action %>" ><input type="hidden"
name="modelChangeList"></form></div>';
+
+dragSinkTemplate = '<div class="drag-sink" name="{col:${col},row:${row}}"></div>';
+
+layoutPlaygroundTableColumnTemplate = '<td valign="top"
width="${width}">${columnContent}</td>';
+
+var modelRoot = [
+<%
+for (int i = 0; i < columns.length; i++)
+{
+%>
+ <%= i > 0 ? "," : "" %>[
+<%
+ List portletList = (List) columns[i];
+ for (int j = 0; j < portletList.size(); j++)
+ {
+%>
+ <%= j > 0 ? "," : "" %>
+<%
+ PsmlEntry entry = (PsmlEntry) portletList.get(j);
+ String portletId = entry.getId();
+ String portletTitle = (String) portletTitleMap.get(entry.getId());
+ String portletSkinName = entry.getSkin() == null ? "-- Default --" :
entry.getSkin().getName();
+
+ // security reference
+ SecurityReference securityReference =
jetspeed.getSecurityReference(entry);
+ String portletSecurityRef;
+ if (securityReference != null)
+ {
+ portletSecurityRef = securityReference.getParent();
+ if (jetspeed.getSecuritySource(entry) == 1)
+ {
+ portletSecurityRef = portletSecurityRef + "<span
style=\"color:red\"><br/>" + l10n.get("SECURITY_IS_REGISTRY_LEVEL") + ".</span>";
+ }
+ else if (jetspeed.getSecuritySource(entry) == 2)
+ {
+ portletSecurityRef = portletSecurityRef + "<span
style=\"color:red\"><br/>" + l10n.get("SECURITY_IS_SYSTEM_DEFAULT") + ".</span>";
+ }
+ }
+ else
+ {
+ portletSecurityRef = "-- Default --";
+ }
+
+ // decoration
+ String controlListBox =
+ (entry.getControl() != null && entry.getControl().getName() !=
null) ?
+ JetspeedTool.getPortletParameter(runData, (Portlet)
runData.getUser().getTemp("customizer"), "control", entry.getControl().getName()) :
+ JetspeedTool.getPortletParameter(runData, (Portlet)
runData.getUser().getTemp("customizer"), "control");
+ controlListBox = controlListBox.substring(12);
+ controlListBox = controlListBox.replace('\n', ' ');
+ controlListBox = controlListBox.replace('\r', ' ');
+%>
+ {id:'<%= portletId %>', parent:'<%= entry.getParent() %>',title:'<%=
portletTitle %>',description:'<%= entry.getDescription() %>',skinName:'<%=
portletSkinName %>',securityId:'<%= portletSecurityRef %>',controlListBox:'<%=
controlListBox %>'}
+<%
+ }
+%>
+ ]
+<%
+}
+%>
+];
+var sizes = [
+<%
+for (int i = 0; i < sizes.length; i++)
+{
+%>
+ <%= i > 0 ? "," : "" %>'<%= sizes[i] %>'
+<%
+}
+%>
+];
+
+var dragBlockList;
+var dragSinkList;
+
+function renderLayoutPlayground(columns)
+{
+ var content = '<table border="0" width="100%" id="layoutPlaygroundTable"><tr>';
+
+ for (var i = 0; i < columns.length; i++)
+ {
+ var columnContent = fillTemplate(
+ dragSinkTemplate,
+ 'col', i,
+ 'row', 0
+ );
+ var portletList = columns[i];
+ for (var j = 0; j < portletList.length; j++)
+ {
+ var psmlEntry = portletList[j];
+ var controlListBox =
psmlEntry.controlListBox.replace(/this.form.submit\(\)/gi,
'submitFormWithModelChanges(this.form)');
+ columnContent += fillTemplate(
+ dragBlockTemplate,
+ 'portletId', psmlEntry.id,
+ 'portletTitle', psmlEntry.title,
+ 'portletSkinName', psmlEntry.skinName,
+ 'portletSecurityId', psmlEntry.securityId,
+ 'portletDecoration', controlListBox,
+ 'closeImageSrc', 'images/close.gif',
+ 'jslinkTemplate', '<%= jslink.getTemplate() %>',
+ 'col', i,
+ 'row', j,
+ 'originalCol', i,
+ 'originalRow', j
+ );
+ columnContent += fillTemplate(
+ dragSinkTemplate,
+ 'col', i,
+ 'row', j + 1
+ );
+ }
+ content += fillTemplate(
+ layoutPlaygroundTableColumnTemplate,
+ 'width', sizes[i],
+ 'columnContent', columnContent
+ );
+ }
+
+ content += '</tr></table>';
+ var layoutPlaygroundDiv = document.getElementById('layoutPlayground');
+ layoutPlaygroundDiv.innerHTML = content;
+
+ buildDragBlockList();
+ buildDragSinkList();
+}
+
+var target = null;
+var highlightedDragSink = null;
+var previousX = 0;
+var previousY = 0;
+
+function elementGetTop(elem)
+{
+ var top = parseInt(elem.style.top);
+ if (isNaN(top))
+ return 0;
+ else
+ return top;
+}
+
+function elementGetLeft(elem)
+{
+ var left = parseInt(elem.style.left);
+ if (isNaN(left))
+ return 0;
+ else
+ return left;
+}
+
+function elementMoveBy(elem, point)
+{
+ var newTop = elementGetTop(elem) + point.y;
+ var newLeft = elementGetLeft(elem) + point.x;
+ elem.style.top = newTop + 'px';
+ elem.style.left = newLeft + 'px';
+}
+
+function elementMoveTo(elem, point)
+{
+ elem.style.top = point.x + 'px';
+ elem.style.left = point.y + 'px';
+}
+
+function getEventPositionX(e)
+{
+ if (!e)
+ {
+ // IE
+ e = window.event;
+ return e.clientX + document.body.scrollLeft;
+ }
+ else
+ {
+ // standard
+ return e.clientX + document.body.scrollLeft;
+ }
+}
+
+function getEventPositionY(e)
+{
+ if (!e)
+ {
+ // IE
+ e = window.event;
+ return e.clientY + document.body.scrollTop;
+ }
+ else
+ {
+ // standard
+ return e.clientY + document.body.scrollTop;
+ }
+}
+
+function findTargetDragBlock(e)
+{
+ var x = getEventPositionX(e);
+ var y = getEventPositionY(e);
+
+ for (var i = 0; i < dragBlockList.length; i++)
+ {
+ var dragBlock = dragBlockList[i];
+ if (elementContainsPoint(dragBlock, x, y))
+ {
+ return dragBlock;
+ }
+ }
+
+ return null;
+}
+
+function handleMouseDown(event)
+{
+ if (!event) // IE
+ {
+ event = window.event;
+// event.target = event.srcElement;
+ }
+
+ target = findTargetDragBlock(event);
+
+ if (target)
+ {
+ previousX = getEventPositionX(event);
+ previousY = getEventPositionY(event);
+ target.originalPosition = {x:elementGetLeft(target),
y:elementGetTop(target)};
+ target.style.borderColor = 'black';
+ event.cancelBubble = true;
+ event.returnValue = false;
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+function handleMouseMove(event)
+{
+ if (!event) // IE
+ {
+ event = window.event;
+// event.target = event.srcElement;
+ }
+
+ if (target)
+ {
+ var currentX = getEventPositionX(event);
+ var currentY = getEventPositionY(event);
+ var dx = currentX - previousX;
+ var dy = currentY - previousY;
+ target.style.cursor = 'move';
+ elementMoveBy(target, {x:dx, y:dy});
+ highlightDragSink(currentX, currentY);
+ previousX = currentX;
+ previousY = currentY;
+ event.cancelBubble = true;
+ event.returnValue = false;
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+function handleMouseUp(event)
+{
+ if (!event) // IE
+ {
+ event = window.event;
+// event.target = event.srcElement;
+ }
+
+ if (target)
+ {
+ target.style.cursor = 'pointer';
+ target.style.borderColor = 'gray';
+ if (highlightedDragSink)
+ {
+ drop(target, highlightedDragSink);
+ unhighlight(highlightedDragSink);
+ highlightedDragSink = null;
+ }
+ else
+ {
+ elementMoveTo(target, target.originalPosition);
+ }
+ target.originalPosition = null;
+ target = null;
+ previousX = 0;
+ previousY = 0;
+ event.cancelBubble = true;
+ event.returnValue = false;
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+document.onmousedown = handleMouseDown;
+document.onmousemove = handleMouseMove;
+document.onmouseup = handleMouseUp;
+
+function highlightDragSink(x, y)
+{
+ for (var i = 0; i < dragSinkList.length; i++)
+ {
+ var dragSink = dragSinkList[i];
+ if (elementContainsPoint(dragSink, x, y))
+ {
+ if (highlightedDragSink)
+ unhighlight(highlightedDragSink);
+ highlight(dragSink);
+ highlightedDragSink = dragSink;
+ return;
+ }
+ }
+
+ if (highlightedDragSink)
+ {
+ unhighlight(highlightedDragSink);
+ highlightedDragSink = null;
+ }
+}
+
+function elementContainsPoint(elem, x, y)
+{
+ var top = elem.offsetTop;
+ var left = elem.offsetLeft;
+ var height = elem.offsetHeight;
+ var width = elem.offsetWidth;
+ return (0 <= x - left && x - left <= width) &&
+ (0 <= y - top && y - top <= height);
+}
+
+function highlight(elem)
+{
+ elem.style.borderColor = '#FF0000';
+}
+
+function unhighlight(elem)
+{
+ elem.style.borderColor = '#EEEEEE';
+}
+
+function buildDragBlockList()
+{
+ var layoutPlaygroundTable = document.getElementById('layoutPlaygroundTable');
+ var dragBlockCandidateList = layoutPlaygroundTable.getElementsByTagName("div");
+ dragBlockList = new Array();
+ for (var i = 0; i < dragBlockCandidateList.length; i++)
+ {
+ var dragBlockCandidate = dragBlockCandidateList[i];
+ if (dragBlockCandidate.className == 'drag-block')
+ dragBlockList[dragBlockList.length] = dragBlockCandidate;
+ }
+}
+
+function buildDragSinkList()
+{
+ var layoutPlaygroundTable = document.getElementById('layoutPlaygroundTable');
+ var dragSinkCandidateList = layoutPlaygroundTable.getElementsByTagName("div");
+ dragSinkList = new Array();
+ for (var i = 0; i < dragSinkCandidateList.length; i++)
+ {
+ var dragSinkCandidate = dragSinkCandidateList[i];
+ if (dragSinkCandidate.className == 'drag-sink')
+ dragSinkList[dragSinkList.length] = dragSinkCandidate;
+ }
+}
+
+function drop(target, dragSink)
+{
+ var targetRowCol = eval('_rowcol=' + target.attributes['name'].value);
+ var dragSinkRowCol = eval('_rowcol=' + dragSink.attributes['name'].value);
+
+ if (destSameAsOrigin(targetRowCol, dragSinkRowCol))
+ return;
+
+ // get reference to portletEtnry
+ var portletEntry = modelRoot[targetRowCol.col][targetRowCol.row];
+
+ // remove from old position
+ modelRoot[targetRowCol.col].splice(targetRowCol.row, 1);
+
+ // insert into new position
+ modelRoot[dragSinkRowCol.col].splice(dragSinkRowCol.row, 0, portletEntry);
+
+ recordModelChange(targetRowCol, dragSinkRowCol);
+
+ renderLayoutPlayground(modelRoot);
+}
+
+function destSameAsOrigin(origin, dest)
+{
+ return
+ (origin.col == dest.col) &&
+ (origin.row == dest.row || origin.row + 1 == dest.row);
+}
+
+function recordModelChange(origin, dest)
+{
+ var change = origin.col + ',' + origin.row + ',' + dest.col + ',' + dest.row;
+ var f = document.forms['xform'];
+ if (f.modelChangeList.value == '')
+ f.modelChangeList.value = change;
+ else
+ f.modelChangeList.value += ';' + change;
+}
+
+function submitFormWithModelChanges(form)
+{
+ var modelChangeList = document.forms.xform.modelChangeList.value;
+ form.modelChangeList.value = modelChangeList;
+ form.submit();
+}
+
+function getPrintString(o)
+{
+ var s = '{';
+ for (p in o)
+ {
+ s += p + ':' + o[p] + ', ';
+ }
+ s += '}';
+ return s;
+}
+</script>
+
+<!-- layout table -->
+<br>
+
+<div id='layoutPlayground'></div>
+<script type="text/javascript">
+renderLayoutPlayground(modelRoot);
+</script>
+
+<br>
+
+<!-- buttons -->
+ <form name="xform" action="<%= jslink.getTemplate() %>" method="post">
+ <input type="hidden" name="<%= jslink.getActionKey() %>" value="<%= action %>" >
+ <input type="hidden" name="modelChangeList" value="">
+ <center>
+ <table cellspacing="2">
+ <tr>
+ <td>
+ <input type="submit" name="eventSubmit_doSave" value="<%=
l10n.get("CUSTOMIZER_SAVEAPPLY") %>">
+ </td>
+ <td>
+ <input type="submit" name="eventSubmit_doCancel" value="<%=
l10n.get("CUSTOMIZER_CANCEL") %>">
+ </td>
+ </tr>
+ </table>
+ </center>
+</form>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]