[Bedework-commit] bedework r1837 - in trunk/deployment: webadmin/webapp/resources/default/default webadmin/webapp/resources/resources webpublic/webapp/resources/demoskins/MainCampus/default/default webpublic/webapp/resources/demoskins/SoEDepartmental/default/default

svnadmin at bedework.org svnadmin at bedework.org
Thu Apr 17 00:20:59 EDT 2008


Author: johnsa
Date: 2008-04-17 00:20:54 -0400 (Thu, 17 Apr 2008)
New Revision: 1837

Added:
   trunk/deployment/webadmin/webapp/resources/resources/bedeworkXProperties.js
Modified:
   trunk/deployment/webadmin/webapp/resources/default/default/default.xsl
   trunk/deployment/webadmin/webapp/resources/resources/bedeworkEventForm.js
   trunk/deployment/webpublic/webapp/resources/demoskins/MainCampus/default/default/default.xsl
   trunk/deployment/webpublic/webapp/resources/demoskins/SoEDepartmental/default/default/default.xsl
Log:
admin client: front-end xproperty support

Modified: trunk/deployment/webadmin/webapp/resources/default/default/default.xsl
===================================================================
--- trunk/deployment/webadmin/webapp/resources/default/default/default.xsl	2008-04-17 04:15:47 UTC (rev 1836)
+++ trunk/deployment/webadmin/webapp/resources/default/default/default.xsl	2008-04-17 04:20:54 UTC (rev 1837)
@@ -65,18 +65,18 @@
        we will probably change the way we create these before long (e.g. build them
        dynamically in the xslt). -->
 
-  <xsl:variable name="submissionsRootEncoded" select="/bedework/submissionsRoot/encoded"/>
+  <xsl:variable name="submissionsRootEncoded" select="/bedework/submissionsRoot/encoded"/>
   <xsl:variable name="submissionsRootUnencoded" select="/bedework/submissionsRoot/unencoded"/>
 
-  <!-- primary navigation, menu tabs -->
+  <!-- primary navigation, menu tabs -->
   <xsl:variable name="setup" select="/bedework/urlPrefixes/setup/a/@href"/>
-  <xsl:variable name="initPendingTab" select="/bedework/urlPrefixes/initPendingTab/a/@href"/>
-  <xsl:variable name="showCalsuiteTab" select="/bedework/urlPrefixes/showCalsuiteTab/a/@href"/>
-  <xsl:variable name="showUsersTab" select="/bedework/urlPrefixes/showUsersTab/a/@href"/>
-  <xsl:variable name="showSystemTab" select="/bedework/urlPrefixes/showSystemTab/a/@href"/>
+  <xsl:variable name="initPendingTab" select="/bedework/urlPrefixes/initPendingTab/a/@href"/>
+  <xsl:variable name="showCalsuiteTab" select="/bedework/urlPrefixes/showCalsuiteTab/a/@href"/>
+  <xsl:variable name="showUsersTab" select="/bedework/urlPrefixes/showUsersTab/a/@href"/>
+  <xsl:variable name="showSystemTab" select="/bedework/urlPrefixes/showSystemTab/a/@href"/>
   <xsl:variable name="logout" select="/bedework/urlPrefixes/logout/a/@href"/>
   <xsl:variable name="search" select="/bedework/urlPrefixes/search/search/a/@href"/>
-  <xsl:variable name="search-next" select="/bedework/urlPrefixes/search/next/a/@href"/>
+  <xsl:variable name="search-next" select="/bedework/urlPrefixes/search/next/a/@href"/>
 
   <!-- events -->
   <xsl:variable name="event-showEvent" select="/bedework/urlPrefixes/event/showEvent/a/@href"/>
@@ -85,12 +85,12 @@
   <xsl:variable name="event-showDeleteConfirm" select="/bedework/urlPrefixes/event/showDeleteConfirm/a/@href"/>
   <xsl:variable name="event-initAddEvent" select="/bedework/urlPrefixes/event/initAddEvent/a/@href"/>
   <xsl:variable name="event-initUpdateEvent" select="/bedework/urlPrefixes/event/initUpdateEvent/a/@href"/>
-  <xsl:variable name="event-delete" select="/bedework/urlPrefixes/event/delete/a/@href"/>
+  <xsl:variable name="event-delete" select="/bedework/urlPrefixes/event/delete/a/@href"/>
   <xsl:variable name="event-deletePending" select="/bedework/urlPrefixes/event/deletePending/a/@href"/>
   <xsl:variable name="event-fetchForDisplay" select="/bedework/urlPrefixes/event/fetchForDisplay/a/@href"/>
-  <xsl:variable name="event-fetchForUpdate" select="/bedework/urlPrefixes/event/fetchForUpdate/a/@href"/>
+  <xsl:variable name="event-fetchForUpdate" select="/bedework/urlPrefixes/event/fetchForUpdate/a/@href"/>
   <xsl:variable name="event-fetchForUpdatePending" select="/bedework/urlPrefixes/event/fetchForUpdatePending/a/@href"/>
-  <xsl:variable name="event-update" select="/bedework/urlPrefixes/event/update/a/@href"/>
+  <xsl:variable name="event-update" select="/bedework/urlPrefixes/event/update/a/@href"/>
   <xsl:variable name="event-updatePending" select="/bedework/urlPrefixes/event/updatePending/a/@href"/>
   <xsl:variable name="event-selectCalForEvent" select="/bedework/urlPrefixes/event/selectCalForEvent/a/@href"/>
   <xsl:variable name="event-initUpload" select="/bedework/urlPrefixes/event/initUpload/a/@href"/>
@@ -194,11 +194,11 @@
   <xsl:variable name="admingroup-fetchForUpdateMembers" select="/bedework/urlPrefixes/admingroup/fetchForUpdateMembers/a/@href"/>
   <xsl:variable name="admingroup-update" select="/bedework/urlPrefixes/admingroup/update/a/@href"/>
   <xsl:variable name="admingroup-updateMembers" select="/bedework/urlPrefixes/admingroup/updateMembers/a/@href"/>
-  <xsl:variable name="admingroup-switch" select="/bedework/urlPrefixes/admingroup/switch/a/@href"/>
-  <!-- filters -->
-  <xsl:variable name="filter-showAddForm" select="/bedework/urlPrefixes/filter/showAddForm/a/@href"/>
-  <xsl:variable name="filter-add" select="/bedework/urlPrefixes/filter/add/a/@href"/>
-  <xsl:variable name="filter-delete" select="/bedework/urlPrefixes/filter/delete/a/@href"/>
+  <xsl:variable name="admingroup-switch" select="/bedework/urlPrefixes/admingroup/switch/a/@href"/>
+  <!-- filters -->
+  <xsl:variable name="filter-showAddForm" select="/bedework/urlPrefixes/filter/showAddForm/a/@href"/>
+  <xsl:variable name="filter-add" select="/bedework/urlPrefixes/filter/add/a/@href"/>
+  <xsl:variable name="filter-delete" select="/bedework/urlPrefixes/filter/delete/a/@href"/>
 
 
   <!-- URL of the web application - includes web context -->
@@ -226,25 +226,33 @@
           <link rel="stylesheet" href="{$resourcesRoot}/resources/bwClock.css"/>
           <script type="text/javascript" src="/bedework-common/javascript/dojo/dojo.js">&#160;</script>
           <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkEventForm.js">&#160;</script>
+          <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkXProperties.js">&#160;</script>
           <xsl:if test="$portalFriendly = 'true'">
             <script type="text/javascript" src="{$resourcesRoot}/resources/dynCalendarWidget.js">&#160;</script>
             <link rel="stylesheet" href="{$resourcesRoot}/resources/dynCalendarWidget.css"/>
-          </xsl:if>
-          <script type="text/javascript">
-            <xsl:comment>
-            function initRXDates() {
-              // return string values to be loaded into javascript for rdates
-              <xsl:for-each select="/bedework/formElements/form/rdates/rdate">
-                bwRdates.update('<xsl:value-of select="date"/>','<xsl:value-of select="time"/>',false,false,false,'<xsl:value-of select="tzid"/>');
-              </xsl:for-each>
-              // return string values to be loaded into javascript for rdates
-              <xsl:for-each select="/bedework/formElements/form/exdates/rdate">
-                bwExdates.update('<xsl:value-of select="date"/>','<xsl:value-of select="time"/>',false,false,false,'<xsl:value-of select="tzid"/>');
-              </xsl:for-each>
-            }
-            </xsl:comment>
+          </xsl:if>
+          <script type="text/javascript">
+            <xsl:comment>
+            function initRXDates() {
+              // return string values to be loaded into javascript for rdates
+              <xsl:for-each select="/bedework/formElements/form/rdates/rdate">
+                bwRdates.update('<xsl:value-of select="date"/>','<xsl:value-of select="time"/>',false,false,false,'<xsl:value-of select="tzid"/>');
+              </xsl:for-each>
+              // return string values to be loaded into javascript for exdates
+              <xsl:for-each select="/bedework/formElements/form/exdates/rdate">
+                bwExdates.update('<xsl:value-of select="date"/>','<xsl:value-of select="time"/>',false,false,false,'<xsl:value-of select="tzid"/>');
+              </xsl:for-each>
+            }
+            function initXProperties() {
+              <xsl:for-each select="form/xproperties/node()">
+                bwXprops.init('<xsl:value-of select="name()"/>',[<xsl:for-each select="parameters/node()">['<xsl:value-of select="name()"/>','<xsl:value-of select="node()"/>']</xsl:for-each>],"<xsl:value-of select="values/text"/>");
+                <!-- <xsl:variable name="xprop"><xsl:value-of select="name()"/><xsl:for-each select="parameters/node()">;<xsl:value-of select="name()"/>=<xsl:value-of select="node()"/></xsl:for-each>:<xsl:value-of select="values/text"/></xsl:variable>
+                <input type="hidden" name="xproperty" value="{$xprop}" id="name()"/> -->
+              </xsl:for-each>
+            }
+            </xsl:comment>
           </script>
-        </xsl:if>
+        </xsl:if>
         <xsl:if test="/bedework/page='modCalendar' or /bedework/page='modCalSuite'">
           <script type="text/javascript" src="{$resourcesRoot}/resources/bedework.js">&#160;</script>
           <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkAccess.js">&#160;</script>
@@ -254,10 +262,10 @@
         </xsl:if>
         <xsl:if test="/bedework/page='calendarDescriptions' or /bedework/page='displayCalendar'">
           <link rel="stylesheet" href="{$resourcesRoot}/resources/calendarDescriptions.css"/>
-        </xsl:if>
-        <xsl:if test="/bedework/page='addFilter'">
-          <script type="text/javascript" src="{$resourcesRoot}/resources/bedework.js">&#160;</script>
         </xsl:if>
+        <xsl:if test="/bedework/page='addFilter'">
+          <script type="text/javascript" src="{$resourcesRoot}/resources/bedework.js">&#160;</script>
+        </xsl:if>
         <link rel="icon" type="image/ico" href="{$resourcesRoot}/resources/bedework.ico" />
         <script language="JavaScript" type="text/javascript">
           <xsl:comment>
@@ -265,27 +273,27 @@
           // places the cursor in the first available form element when the page is loaded
           // (if a form exists on the page)
           function focusFirstElement() {
-            if (window.document.forms[0]) {
-              for (i=0; i<window.document.forms[0].elements.length; i++) {
-                if (window.document.forms[0].elements[i].type != "submit" &&
-                    window.document.forms[0].elements[i].type != "reset" ) {
-                  window.document.forms[0].elements[i].focus();
-                  break;
-                }
+            if (window.document.forms[0]) {
+              for (i=0; i<window.document.forms[0].elements.length; i++) {
+                if (window.document.forms[0].elements[i].type != "submit" &&
+                    window.document.forms[0].elements[i].type != "reset" ) {
+                  window.document.forms[0].elements[i].focus();
+                  break;
+                }
               }
             }
           }]]>
           </xsl:comment>
         </script>
       </head>
-      <body>
-        <xsl:choose>
-          <xsl:when test="(/bedework/page='modEvent' or /bedework/page='modEventPending') and /bedework/formElements/recurrenceId=''">
-            <xsl:attribute name="onload">initRXDates();focusFirstElement();</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:attribute name="onload">focusFirstElement();</xsl:attribute>
-          </xsl:otherwise>
+      <body>
+        <xsl:choose>
+          <xsl:when test="(/bedework/page='modEvent' or /bedework/page='modEventPending') and /bedework/formElements/recurrenceId=''">
+            <xsl:attribute name="onload">initRXDates();initXProperties();focusFirstElement();</xsl:attribute>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:attribute name="onload">focusFirstElement();</xsl:attribute>
+          </xsl:otherwise>
         </xsl:choose>
         <xsl:choose>
           <xsl:when test="/bedework/page='selectCalForEvent'">
@@ -294,28 +302,28 @@
           <xsl:otherwise>
             <xsl:call-template name="header"/>
             <div id="content">
-              <xsl:choose>
-                <xsl:when test="/bedework/page='tabPendingEvents'">
-                  <xsl:call-template name="tabPendingEvents"/>
-                </xsl:when>
-                <xsl:when test="/bedework/page='tabCalsuite'">
-                  <xsl:call-template name="tabCalsuite"/>
-                </xsl:when>
-                <xsl:when test="/bedework/page='tabUsers'">
-                  <xsl:call-template name="tabUsers"/>
-                </xsl:when>
-                <xsl:when test="/bedework/page='tabSystem'">
-                  <xsl:call-template name="tabSystem"/>
+              <xsl:choose>
+                <xsl:when test="/bedework/page='tabPendingEvents'">
+                  <xsl:call-template name="tabPendingEvents"/>
                 </xsl:when>
+                <xsl:when test="/bedework/page='tabCalsuite'">
+                  <xsl:call-template name="tabCalsuite"/>
+                </xsl:when>
+                <xsl:when test="/bedework/page='tabUsers'">
+                  <xsl:call-template name="tabUsers"/>
+                </xsl:when>
+                <xsl:when test="/bedework/page='tabSystem'">
+                  <xsl:call-template name="tabSystem"/>
+                </xsl:when>
                 <xsl:when test="/bedework/page='eventList'">
                   <xsl:call-template name="eventList"/>
                 </xsl:when>
-                <xsl:when test="/bedework/page='modEvent' or
+                <xsl:when test="/bedework/page='modEvent' or
                                /bedework/page='modEventPending'">
                   <xsl:apply-templates select="/bedework/formElements" mode="modEvent"/>
                 </xsl:when>
-                <xsl:when test="/bedework/page='displayEvent' or
-                                /bedework/page='deleteEventConfirm' or
+                <xsl:when test="/bedework/page='displayEvent' or
+                                /bedework/page='deleteEventConfirm' or
                                 /bedework/page='deleteEventConfirmPending'">
                   <xsl:apply-templates select="/bedework/event" mode="displayEvent"/>
                 </xsl:when>
@@ -325,7 +333,7 @@
                 <xsl:when test="/bedework/page='modContact'">
                   <xsl:call-template name="modContact"/>
                 </xsl:when>
-                <xsl:when test="/bedework/page='deleteContactConfirm' or
+                <xsl:when test="/bedework/page='deleteContactConfirm' or
                                 /bedework/page='contactReferenced'">
                   <xsl:call-template name="deleteContactConfirm"/>
                 </xsl:when>
@@ -347,18 +355,18 @@
                 <xsl:when test="/bedework/page='deleteCategoryConfirm'">
                   <xsl:call-template name="deleteCategoryConfirm"/>
                 </xsl:when>
-                <xsl:when test="/bedework/page='calendarList' or
-                                /bedework/page='calendarDescriptions' or
-                                /bedework/page='displayCalendar' or
-                                /bedework/page='modCalendar' or
-                                /bedework/page='deleteCalendarConfirm' or
+                <xsl:when test="/bedework/page='calendarList' or
+                                /bedework/page='calendarDescriptions' or
+                                /bedework/page='displayCalendar' or
+                                /bedework/page='modCalendar' or
+                                /bedework/page='deleteCalendarConfirm' or
                                 /bedework/page='calendarReferenced'">
                   <xsl:apply-templates select="/bedework/calendars" mode="calendarCommon"/>
                 </xsl:when>
                 <xsl:when test="/bedework/page='moveCalendar'">
                   <xsl:call-template name="calendarMove"/>
                 </xsl:when>
-                <xsl:when test="/bedework/page='subscriptions' or
+                <xsl:when test="/bedework/page='subscriptions' or
                                 /bedework/page='modSubscription'">
                   <xsl:apply-templates select="/bedework/subscriptions"/>
                 </xsl:when>
@@ -409,10 +417,10 @@
                 </xsl:when>
                 <xsl:when test="/bedework/page='deleteAdminGroupConfirm'">
                   <xsl:call-template name="deleteAdminGroupConfirm"/>
-                </xsl:when>
-                <xsl:when test="/bedework/page='addFilter'">
-                  <xsl:call-template name="addFilter"/>
                 </xsl:when>
+                <xsl:when test="/bedework/page='addFilter'">
+                  <xsl:call-template name="addFilter"/>
+                </xsl:when>
                 <xsl:when test="/bedework/page='searchResult'">
                   <xsl:call-template name="searchResult"/>
                 </xsl:when>
@@ -527,13 +535,13 @@
           </xsl:otherwise>
         </xsl:choose>
       </h1>
-    </div>
+    </div>
     <xsl:call-template name="messagesAndErrors"/>
     <table id="statusBarTable">
       <tr>
-        <td class="leftCell">
-          <a href="{$setup}">Home</a>
-          <a href="{$publicCal}" target="calendar">Launch Calendar</a>
+        <td class="leftCell">
+          <a href="{$setup}">Home</a>
+          <a href="{$publicCal}" target="calendar">Launch Calendar</a>
           <a href="{$logout}" id="bwLogoutButton">Log Out</a>
         </td>
         <xsl:if test="/bedework/userInfo/user">
@@ -559,48 +567,48 @@
           </td>
         </xsl:if>
       </tr>
-    </table>
-    <xsl:if test="/bedework/userInfo/group">
-      <!-- user has selected a group, so show menu tabs -->
-      <ul id="bwAdminMenu">
-        <li>
-          <xsl:if test="/bedework/tab = 'main'">
-            <xsl:attribute name="class">selected</xsl:attribute>
-          </xsl:if>
-          <a href="{$setup}&amp;listAllEvents=false">Main Menu</a>
-        </li>
-        <li>
-          <xsl:if test="/bedework/tab = 'pending'">
-            <xsl:attribute name="class">selected</xsl:attribute>
-          </xsl:if>
+    </table>
+    <xsl:if test="/bedework/userInfo/group">
+      <!-- user has selected a group, so show menu tabs -->
+      <ul id="bwAdminMenu">
+        <li>
+          <xsl:if test="/bedework/tab = 'main'">
+            <xsl:attribute name="class">selected</xsl:attribute>
+          </xsl:if>
+          <a href="{$setup}&amp;listAllEvents=false">Main Menu</a>
+        </li>
+        <li>
+          <xsl:if test="/bedework/tab = 'pending'">
+            <xsl:attribute name="class">selected</xsl:attribute>
+          </xsl:if>
           <a href="{$initPendingTab}&amp;calPath={$submissionsRootEncoded}&amp;listAllEvents=true">Pending Events</a>
-        </li>
-        <xsl:if test="/bedework/currentCalSuite/currentAccess/current-user-privilege-set/privilege/write or /bedework/userInfo/superUser='true'">
-          <li>
-            <xsl:if test="/bedework/tab = 'calsuite'">
-              <xsl:attribute name="class">selected</xsl:attribute>
-            </xsl:if>
-            <a href="{$showCalsuiteTab}">Calendar Suite</a>
-          </li>
-        </xsl:if>
-        <xsl:if test="/bedework/userInfo/contentAdminUser='true'">
-          <li>
-            <xsl:if test="/bedework/tab = 'users'">
-              <xsl:attribute name="class">selected</xsl:attribute>
-            </xsl:if>
-            <a href="{$showUsersTab}">Users</a>
-          </li>
-        </xsl:if>
-        <xsl:if test="/bedework/userInfo/superUser='true'">
-          <li>
-            <xsl:if test="/bedework/tab = 'system'">
-              <xsl:attribute name="class">selected</xsl:attribute>
-            </xsl:if>
-            <a href="{$showSystemTab}">System</a>
-          </li>
-        </xsl:if>
-      </ul>
-    </xsl:if>
+        </li>
+        <xsl:if test="/bedework/currentCalSuite/currentAccess/current-user-privilege-set/privilege/write or /bedework/userInfo/superUser='true'">
+          <li>
+            <xsl:if test="/bedework/tab = 'calsuite'">
+              <xsl:attribute name="class">selected</xsl:attribute>
+            </xsl:if>
+            <a href="{$showCalsuiteTab}">Calendar Suite</a>
+          </li>
+        </xsl:if>
+        <xsl:if test="/bedework/userInfo/contentAdminUser='true'">
+          <li>
+            <xsl:if test="/bedework/tab = 'users'">
+              <xsl:attribute name="class">selected</xsl:attribute>
+            </xsl:if>
+            <a href="{$showUsersTab}">Users</a>
+          </li>
+        </xsl:if>
+        <xsl:if test="/bedework/userInfo/superUser='true'">
+          <li>
+            <xsl:if test="/bedework/tab = 'system'">
+              <xsl:attribute name="class">selected</xsl:attribute>
+            </xsl:if>
+            <a href="{$showSystemTab}">System</a>
+          </li>
+        </xsl:if>
+      </ul>
+    </xsl:if>
   </xsl:template>
 
   <xsl:template name="messagesAndErrors">
@@ -627,63 +635,63 @@
   <!--==============================================-->
 
   <!--+++++++++++++++ Main Menu Tab ++++++++++++++++++++-->
-  <xsl:template name="mainMenu">
-
-    <table id="mainMenu">
-      <tr>
-        <td>
-          <a id="addEventLink" href="{$event-initAddEvent}">
-            <img src="{$resourcesRoot}/resources/bwAdminAddEventIcon.jpg" width="140" height="140" alt="Add Event" border="0"/>
-            <br/>Add Event
-          </a>
-        </td>
-        <td>
-          <a id="addContactLink" href="{$contact-initAdd}">
-            <img src="{$resourcesRoot}/resources/bwAdminAddContactIcon.jpg" width="100" height="100" alt="Add Event" border="0"/>
-            <br/>Add Contact
-          </a>
-        </td>
-        <td>
-          <a id="addLocationLink" href="{$location-initAdd}">
-            <img src="{$resourcesRoot}/resources/bwAdminAddLocationIcon.jpg" width="100" height="100" alt="Add Event" border="0"/>
-            <br/>Add Location
-          </a>
-        </td>
-        <td>
-          <a id="addCategoryLink" href="{$category-initAdd}">
-            <img src="{$resourcesRoot}/resources/bwAdminAddCategoryIcon.jpg" width="100" height="100" alt="Add Event" border="0"/>
-            <br/>Add Category
-          </a>
-        </td>
-      </tr>
-      <tr>
-        <td>
-          <a href="{$event-initUpdateEvent}">
-            <img src="{$resourcesRoot}/resources/bwAdminManageEventsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
-            <br/>Manage Events
-          </a>
-        </td>
-        <td>
-          <a href="{$contact-initUpdate}">
-            <img src="{$resourcesRoot}/resources/bwAdminManageContactsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
-            <br/>Manage Contacts
-          </a>
-        </td>
-        <td>
-          <a href="{$location-initUpdate}">
-            <img src="{$resourcesRoot}/resources/bwAdminManageLocsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
-            <br/>Manage Locations
-          </a>
-        </td>
-        <td>
-          <a href="{$category-initUpdate}">
-            <img src="{$resourcesRoot}/resources/bwAdminManageCatsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
-            <br/>Manage Categories
-          </a>
-        </td>
-      </tr>
-    </table>
-
+  <xsl:template name="mainMenu">
+
+    <table id="mainMenu">
+      <tr>
+        <td>
+          <a id="addEventLink" href="{$event-initAddEvent}">
+            <img src="{$resourcesRoot}/resources/bwAdminAddEventIcon.jpg" width="140" height="140" alt="Add Event" border="0"/>
+            <br/>Add Event
+          </a>
+        </td>
+        <td>
+          <a id="addContactLink" href="{$contact-initAdd}">
+            <img src="{$resourcesRoot}/resources/bwAdminAddContactIcon.jpg" width="100" height="100" alt="Add Event" border="0"/>
+            <br/>Add Contact
+          </a>
+        </td>
+        <td>
+          <a id="addLocationLink" href="{$location-initAdd}">
+            <img src="{$resourcesRoot}/resources/bwAdminAddLocationIcon.jpg" width="100" height="100" alt="Add Event" border="0"/>
+            <br/>Add Location
+          </a>
+        </td>
+        <td>
+          <a id="addCategoryLink" href="{$category-initAdd}">
+            <img src="{$resourcesRoot}/resources/bwAdminAddCategoryIcon.jpg" width="100" height="100" alt="Add Event" border="0"/>
+            <br/>Add Category
+          </a>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <a href="{$event-initUpdateEvent}">
+            <img src="{$resourcesRoot}/resources/bwAdminManageEventsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
+            <br/>Manage Events
+          </a>
+        </td>
+        <td>
+          <a href="{$contact-initUpdate}">
+            <img src="{$resourcesRoot}/resources/bwAdminManageContactsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
+            <br/>Manage Contacts
+          </a>
+        </td>
+        <td>
+          <a href="{$location-initUpdate}">
+            <img src="{$resourcesRoot}/resources/bwAdminManageLocsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
+            <br/>Manage Locations
+          </a>
+        </td>
+        <td>
+          <a href="{$category-initUpdate}">
+            <img src="{$resourcesRoot}/resources/bwAdminManageCatsIcon.jpg" width="100" height="73" alt="Manage Events" border="0"/>
+            <br/>Manage Categories
+          </a>
+        </td>
+      </tr>
+    </table>
+
     <!--
     <h2 class="menuTitle">Main Menu</h2>
     <table id="mainMenuTable">
@@ -747,7 +755,7 @@
           </a>
         </td>
       </tr>
-    </table>
+    </table>
     -->
     <div id="mainMenuEventSearch">
       <h4 class="menuTitle">Event search:</h4>
@@ -762,31 +770,31 @@
           <input type="radio" name="searchLimits" value="beforeToday"/>past dates
           <input type="radio" name="searchLimits" value="none"/>all dates
         </div>
-      </form>
+      </form>
     </div>
-  </xsl:template>
-
-  <!--+++++++++++++++ Pending Events Tab ++++++++++++++++++++-->
-  <xsl:template name="tabPendingEvents">
-    <h2>Pending Events</h2>
-    <p>The following events were submitted to the calendar:</p>
-    <xsl:call-template name="eventListCommon">
-      <xsl:with-param name="pending">true</xsl:with-param>
-    </xsl:call-template>
-  </xsl:template>
-
-  <!--+++++++++++++++ Calendar Suite Tab ++++++++++++++++++++-->
-  <xsl:template name="tabCalsuite">
+  </xsl:template>
+
+  <!--+++++++++++++++ Pending Events Tab ++++++++++++++++++++-->
+  <xsl:template name="tabPendingEvents">
+    <h2>Pending Events</h2>
+    <p>The following events were submitted to the calendar:</p>
+    <xsl:call-template name="eventListCommon">
+      <xsl:with-param name="pending">true</xsl:with-param>
+    </xsl:call-template>
+  </xsl:template>
+
+  <!--+++++++++++++++ Calendar Suite Tab ++++++++++++++++++++-->
+  <xsl:template name="tabCalsuite">
     <xsl:if test="/bedework/currentCalSuite/currentAccess/current-user-privilege-set/privilege/write or /bedework/userInfo/superUser='true'">
       <h2>
         Manage Current Calendar Suite
-      </h2>
-      <div id="calSuiteTitle">
-        Calendar Suite:
-        <strong><xsl:value-of select="/bedework/currentCalSuite/name"/></strong>
-        <xsl:text> </xsl:text>
-        <a href="{$admingroup-switch}" class="fieldInfo">change</a>
-      </div>
+      </h2>
+      <div id="calSuiteTitle">
+        Calendar Suite:
+        <strong><xsl:value-of select="/bedework/currentCalSuite/name"/></strong>
+        <xsl:text> </xsl:text>
+        <a href="{$admingroup-switch}" class="fieldInfo">change</a>
+      </div>
       <ul class="adminMenu">
         <li>
           <a href="{$subscriptions-fetch}">
@@ -804,11 +812,11 @@
           </a>
         </li>
       </ul>
-    </xsl:if>
+    </xsl:if>
   </xsl:template>
-
-  <!--+++++++++++++++ User/Group Tab ++++++++++++++++++++-->
-  <xsl:template name="tabUsers">
+
+  <!--+++++++++++++++ User/Group Tab ++++++++++++++++++++-->
+  <xsl:template name="tabUsers">
     <xsl:if test="/bedework/userInfo/contentAdminUser='true'">
       <h2>Manage Users &amp; Groups</h2>
       <ul class="adminMenu">
@@ -841,37 +849,37 @@
           </li>
         </xsl:if>
       </ul>
-    </xsl:if>
+    </xsl:if>
   </xsl:template>
-
-  <!--+++++++++++++++ System Tab ++++++++++++++++++++-->
-  <xsl:template name="tabSystem">
-    <xsl:if test="/bedework/userInfo/superUser='true'">
+
+  <!--+++++++++++++++ System Tab ++++++++++++++++++++-->
+  <xsl:template name="tabSystem">
+    <xsl:if test="/bedework/userInfo/superUser='true'">
       <h2>Manage System</h2>
       <ul class="adminMenu">
-        <li>
-          <a href="{$calendar-fetch}">
-            Manage calendars
-          </a>
-        </li>
         <li>
+          <a href="{$calendar-fetch}">
+            Manage calendars
+          </a>
+        </li>
+        <li>
           <a href="{$calsuite-fetch}">
             Manage calendar suites
           </a>
-        </li>
-        <li>
-          <a href="{$filter-showAddForm}">
-            Manage CalDAV filters
-          </a>
-        </li>
-        <li>
-          <a href="{$event-initUpload}">
-            Upload iCAL file
-          </a>
-        </li>
-      </ul>
-      <ul class="adminMenu">
+        </li>
         <li>
+          <a href="{$filter-showAddForm}">
+            Manage CalDAV filters
+          </a>
+        </li>
+        <li>
+          <a href="{$event-initUpload}">
+            Upload iCAL file
+          </a>
+        </li>
+      </ul>
+      <ul class="adminMenu">
+        <li>
           <a href="{$system-fetch}">
             Manage system preferences
           </a>
@@ -880,12 +888,12 @@
           <a href="{$timezones-initUpload}">
             Manage system timezones
           </a>
-        </li>
-      </ul>
-      <ul class="adminMenu">
-        <li>
-          Statistics:
-          <ul>
+        </li>
+      </ul>
+      <ul class="adminMenu">
+        <li>
+          Statistics:
+          <ul>
             <li>
               <a href="{$stats-update}&amp;fetch=yes">
                 admin web client
@@ -895,8 +903,8 @@
               <a href="{$publicCal}/stats.do" target="pubClient">
                 public web client
               </a>
-            </li>
-          </ul>
+            </li>
+          </ul>
         </li>
       </ul>
     </xsl:if>
@@ -925,24 +933,24 @@
         </tr>
       </table>
     </form>
-
-    <xsl:call-template name="eventListCommon"/>
-  </xsl:template>
-
-  <xsl:template name="eventListCommon">
+
+    <xsl:call-template name="eventListCommon"/>
+  </xsl:template>
+
+  <xsl:template name="eventListCommon">
     <xsl:param name="pending">false</xsl:param>
     <table id="commonListTable">
       <tr>
         <th>Title</th>
         <th>Start</th>
-        <th>End</th>
-        <xsl:choose>
-          <xsl:when test="$pending = 'true'">
-            <th>Categories</th>
-          </xsl:when>
+        <th>End</th>
+        <xsl:choose>
+          <xsl:when test="$pending = 'true'">
+            <th>Categories</th>
+          </xsl:when>
           <xsl:otherwise>
-            <th>Calendar</th>
-          </xsl:otherwise>
+            <th>Calendar</th>
+          </xsl:otherwise>
         </xsl:choose>
         <th>Description</th>
       </tr>
@@ -953,20 +961,20 @@
         <xsl:variable name="guid" select="guid"/>
         <xsl:variable name="recurrenceId" select="recurrenceId"/>
         <tr>
-          <td>
-            <xsl:choose>
-              <xsl:when test="$pending = 'true'">
-                <a href="{$event-fetchForUpdatePending}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}">
-                  <xsl:choose>
-                    <xsl:when test="summary != ''">
-                      <xsl:value-of select="summary"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <em>no title</em>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </a>
-              </xsl:when>
+          <td>
+            <xsl:choose>
+              <xsl:when test="$pending = 'true'">
+                <a href="{$event-fetchForUpdatePending}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}">
+                  <xsl:choose>
+                    <xsl:when test="summary != ''">
+                      <xsl:value-of select="summary"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      <em>no title</em>
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </a>
+              </xsl:when>
               <xsl:otherwise>
                 <a href="{$event-fetchForUpdate}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}">
                   <xsl:choose>
@@ -977,31 +985,31 @@
                       <em>no title</em>
                     </xsl:otherwise>
                   </xsl:choose>
-                </a>
-              </xsl:otherwise>
+                </a>
+              </xsl:otherwise>
             </xsl:choose>
           </td>
           <td class="date">
-            <xsl:value-of select="start/shortdate"/>
+            <xsl:value-of select="start/shortdate"/>
             <xsl:text> </xsl:text>
             <xsl:value-of select="start/time"/>
           </td>
           <td class="date">
-            <xsl:value-of select="end/shortdate"/>
+            <xsl:value-of select="end/shortdate"/>
             <xsl:text> </xsl:text>
             <xsl:value-of select="end/time"/>
-          </td>
-          <td class="calcat">
-            <xsl:choose>
+          </td>
+          <td class="calcat">
+            <xsl:choose>
               <xsl:when test="$pending = 'true'">
-                <xsl:for-each select="categories/category">
-                  <xsl:value-of select="word"/><br/>
-                </xsl:for-each>
-              </xsl:when>
-              <xsl:otherwise>
-                <xsl:value-of select="calendar/name"/>
-              </xsl:otherwise>
-            </xsl:choose>
+                <xsl:for-each select="categories/category">
+                  <xsl:value-of select="word"/><br/>
+                </xsl:for-each>
+              </xsl:when>
+              <xsl:otherwise>
+                <xsl:value-of select="calendar/name"/>
+              </xsl:otherwise>
+            </xsl:choose>
           </td>
           <td>
             <xsl:value-of select="description"/>
@@ -1029,42 +1037,37 @@
     <xsl:variable name="calPath" select="form/calendar/path"/>
     <xsl:variable name="guid" select="guid"/>
     <xsl:variable name="recurrenceId" select="recurrenceId"/>
-
+
     <h2>Event Information</h2>
-
-    <!-- if a submitted event has comments, display them -->
-    <xsl:if test="normalize-space(form/xproperties/xproperty[@name='X-BEDEWORK-SUBMIT-COMMENT']/value) != ''">
-      <script type="text/javascript">
-        bwSubmitComment = new bwSubmitComment('<xsl:value-of select="form/xproperties/xproperty[@name='X-BEDEWORK-SUBMIT-COMMENT']/value"/>');
-      </script>
-
-      <div id="bwSubmittedEventCommentBlock">
-        <h4>Comments from Submitter</h4>
-        <a href="javascript:toggleVisibility('bwSubmittedEventComment','visible');" class="toggle">show/hide</a>
-        <a href="javascript:bwSubmitComment.launch();" class="toggle">pop-up</a>
-        <div id="bwSubmittedEventComment">
-        </div>
-      </div>
-      <script type="text/javascript">
-        bwSubmitComment.display('bwSubmittedEventComment');
-      </script>
-    </xsl:if>
 
-    <form name="eventForm" method="post" onsubmit="setEventFields(this,{$portalFriendly})">
-      <xsl:choose>
-        <xsl:when test="/bedework/page = 'modEventPending'">
-          <xsl:attribute name="action"><xsl:value-of select="$event-updatePending"/></xsl:attribute>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:attribute name="action"><xsl:value-of select="$event-update"/></xsl:attribute>
-        </xsl:otherwise>
+    <!-- if a submitted event has comments, display them -->
+    <xsl:if test="normalize-space(form/xproperties/xproperty[@name='X-BEDEWORK-SUBMIT-COMMENT']/value) != ''">
+      <script type="text/javascript">
+        bwSubmitComment = new bwSubmitComment('<xsl:value-of select="form/xproperties/xproperty[@name='X-BEDEWORK-SUBMIT-COMMENT']/value"/>');
+      </script>
+
+      <div id="bwSubmittedEventCommentBlock">
+        <h4>Comments from Submitter</h4>
+        <a href="javascript:toggleVisibility('bwSubmittedEventComment','visible');" class="toggle">show/hide</a>
+        <a href="javascript:bwSubmitComment.launch();" class="toggle">pop-up</a>
+        <div id="bwSubmittedEventComment">
+        </div>
+      </div>
+      <script type="text/javascript">
+        bwSubmitComment.display('bwSubmittedEventComment');
+      </script>
+    </xsl:if>
+
+    <form name="eventForm" method="post" onsubmit="setEventFields(this,{$portalFriendly})">
+      <xsl:choose>
+        <xsl:when test="/bedework/page = 'modEventPending'">
+          <xsl:attribute name="action"><xsl:value-of select="$event-updatePending"/></xsl:attribute>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:attribute name="action"><xsl:value-of select="$event-update"/></xsl:attribute>
+        </xsl:otherwise>
       </xsl:choose>
-
-      <xsl:for-each select="form/xproperties/node()">
-        <xsl:variable name="xprop"><xsl:value-of select="name()"/><xsl:for-each select="parameters/node()">;<xsl:value-of select="name()"/>=<xsl:value-of select="node()"/></xsl:for-each>:<xsl:value-of select="values/text"/></xsl:variable>
-        <input type="hidden" name="xproperty" value="{$xprop}" id="name()"/>
-      </xsl:for-each>
-
+
       <xsl:call-template name="submitEventButtons"/>
 
       <table class="eventFormTable">
@@ -1075,7 +1078,7 @@
           <td>
             <xsl:copy-of select="form/title/*"/>
           </td>
-        </tr>
+        </tr>
         <xsl:if test="not(starts-with(form/calendar/path,$submissionsRootUnencoded))">
           <tr>
             <td class="fieldName">
@@ -1084,7 +1087,7 @@
             <td>
               <xsl:if test="form/calendar/preferred/select/option">
                 <select name="prefCalendarId">
-                  <option>
+                  <option>
                     <xsl:attribute name="value"><xsl:value-of select="form/calendar/path"/></xsl:attribute>
                     Select preferred:
                   </option>
@@ -1092,14 +1095,14 @@
                     <xsl:sort select="." order="ascending"/>
                     <option>
                       <xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
-                      <xsl:if test="@selected"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
-                      <xsl:choose>
-                        <xsl:when test="starts-with(node(),/bedework/submissionsRoot/unencoded)">
-                          submitted events
-                        </xsl:when>
+                      <xsl:if test="@selected"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
+                      <xsl:choose>
+                        <xsl:when test="starts-with(node(),/bedework/submissionsRoot/unencoded)">
+                          submitted events
+                        </xsl:when>
                         <xsl:otherwise>
-                          <xsl:value-of select="substring-after(node(),'/public/')"/>
-                        </xsl:otherwise>
+                          <xsl:value-of select="substring-after(node(),'/public/')"/>
+                        </xsl:otherwise>
                       </xsl:choose>
                     </option>
                   </xsl:for-each>
@@ -1107,7 +1110,7 @@
                 or Calendar (all):
               </xsl:if>
               <select name="calendarId">
-                <option>
+                <option>
                   <xsl:attribute name="value"><xsl:value-of select="form/calendar/path"/></xsl:attribute>
                   Select:
                 </option>
@@ -1116,13 +1119,13 @@
                   <option>
                     <xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
                     <xsl:if test="@selected"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
-                    <xsl:choose>
-                      <xsl:when test="starts-with(node(),/bedework/submissionsRoot/unencoded)">
-                        submitted events
-                      </xsl:when>
-                      <xsl:otherwise>
-                        <xsl:value-of select="substring-after(node(),'/public/')"/>
-                      </xsl:otherwise>
+                    <xsl:choose>
+                      <xsl:when test="starts-with(node(),/bedework/submissionsRoot/unencoded)">
+                        submitted events
+                      </xsl:when>
+                      <xsl:otherwise>
+                        <xsl:value-of select="substring-after(node(),'/public/')"/>
+                      </xsl:otherwise>
                     </xsl:choose>
                   </option>
                 </xsl:for-each>
@@ -1132,7 +1135,7 @@
                 <a href="javascript:launchSimpleWindow('{$calendar-fetchDescriptions}')">calendar descriptions</a>
               </span>
             </td>
-          </tr>
+          </tr>
         </xsl:if>
 
         <tr>
@@ -2062,26 +2065,26 @@
           <td class="optional">
             Event URL:
           </td>
-          <td>
+          <td>
             <xsl:copy-of select="form/link/*"/>
             <xsl:text> </xsl:text>
             <span class="fieldInfo">(optional: for more information about the event)</span>
           </td>
-        </tr>
-        <!-- Url -->
-        <tr>
-          <td class="optional">
-            Image URL:
-          </td>
-          <td>
-            <input type="text" name="xBwImageHolder" value="" class="edit" size="30">
-              <xsl:if test="form/xproperties/node()[name()='X-BEDEWORK-IMAGE']">
-                <xsl:attribute name="value"><xsl:value-of select="form/xproperties/node()[name()='X-BEDEWORK-IMAGE']/values/text"/></xsl:attribute>
-              </xsl:if>
+        </tr>
+        <!-- Url -->
+        <tr>
+          <td class="optional">
+            Image URL:
+          </td>
+          <td>
+            <input type="text" name="xBwImageHolder" value="" class="edit" size="30">
+              <xsl:if test="form/xproperties/node()[name()='X-BEDEWORK-IMAGE']">
+                <xsl:attribute name="value"><xsl:value-of select="form/xproperties/node()[name()='X-BEDEWORK-IMAGE']/values/text"/></xsl:attribute>
+              </xsl:if>
             </input>
-            <xsl:text> </xsl:text>
-            <span class="fieldInfo">(optional: to include an image with the event description)</span>
-          </td>
+            <xsl:text> </xsl:text>
+            <span class="fieldInfo">(optional: to include an image with the event description)</span>
+          </td>
         </tr>
         <!-- Location -->
         <tr>
@@ -2180,8 +2183,8 @@
                 <tr>
                   <xsl:variable name="catCount" select="count(form/categories/preferred/category)"/>
                   <td>
-                    <xsl:for-each select="form/categories/preferred/category[position() &lt;= ceiling($catCount div 2)]">
-                      <!-- <xsl:sort select="keyword" order="ascending"/> -->
+                    <xsl:for-each select="form/categories/preferred/category[position() &lt;= ceiling($catCount div 2)]">
+                      <!-- <xsl:sort select="keyword" order="ascending"/> -->
                       <input type="checkbox" name="categoryKey">
                         <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
                         <xsl:attribute name="id">pref-<xsl:value-of select="keyword"/></xsl:attribute>
@@ -2192,8 +2195,8 @@
                     </xsl:for-each>
                   </td>
                   <td>
-                    <xsl:for-each select="form/categories/preferred/category[position() &gt; ceiling($catCount div 2)]">
-                      <!-- <xsl:sort select="keyword" order="ascending"/> -->
+                    <xsl:for-each select="form/categories/preferred/category[position() &gt; ceiling($catCount div 2)]">
+                      <!-- <xsl:sort select="keyword" order="ascending"/> -->
                       <input type="checkbox" name="categoryKey">
                         <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
                         <xsl:attribute name="id">pref-<xsl:value-of select="keyword"/></xsl:attribute>
@@ -2316,86 +2319,86 @@
       </table>
       <xsl:call-template name="submitEventButtons"/>
     </form>
-  </xsl:template>
-
-  <xsl:template name="submitEventButtons">
-    <table border="0" id="submitTable">
-      <tr>
-        <xsl:choose>
-          <xsl:when test="starts-with(form/calendar/path,$submissionsRootUnencoded)">
-            <td>
-              <div id="publishBox" class="invisible">
-                <div id="publishBoxCloseButton">
-                  <a href="javascript:resetPublishBox('calendarId')">
-                    <img src="{$resourcesRoot}/resources/closeIcon.gif" width="20" height="20" alt="close" border="0"/>
-                  </a>
-                </div>
-                <strong>Select a calendar in which to publish this event:</strong><br/>
-                <select name="calendarId" id="calendarId">
-                  <option>
-                    <xsl:attribute name="value"><xsl:value-of select="form/calendar/path"/></xsl:attribute>
-                    Select:
-                  </option>
-                  <xsl:for-each select="form/calendar/all/select/option">
-                    <xsl:sort select="." order="ascending"/>
-                    <option>
-                      <xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
-                      <xsl:if test="@selected"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
-                      <xsl:choose>
-                        <xsl:when test="starts-with(node(),/bedework/submissionsRoot/unencoded)">
-                          submitted events
-                        </xsl:when>
-                        <xsl:otherwise>
-                          <xsl:value-of select="substring-after(node(),'/public/')"/>
-                        </xsl:otherwise>
-                      </xsl:choose>
-                    </option>
-                  </xsl:for-each>
-                </select>
-                <input type="submit" name="publishEvent" value="Publish" onclick="changeClass('publishBox','invisible')"/>
-                <xsl:if test="$portalFriendly = 'false'">
-                  <br/>
-                  <span id="calDescriptionsLink">
-                    <a href="javascript:launchSimpleWindow('{$calendar-fetchDescriptions}')">calendar descriptions</a>
-                  </span>
-                </xsl:if>
-              </div>
-              <input type="submit" name="updateSubmitEvent" value="Update Event"/>
-              <input type="button" name="publishEvent" value="Publish Event" onclick="changeClass('publishBox','visible')"/>
-              <input type="submit" name="cancel" value="Cancel"/>
-            </td>
-            <td align="right">
-              <input type="submit" name="delete" value="Delete Event"/>
-            </td>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:choose>
-              <xsl:when test="/bedework/creating='true'">
-                <td>
-                  <input type="submit" name="addEvent" value="Add Event"/>
-                  <input type="submit" name="cancelled" value="Cancel"/>
-                </td>
-              </xsl:when>
-              <xsl:otherwise>
-                <td>
-                  <input type="submit" name="updateEvent" value="Update Event"/>
-                  <input type="submit" name="cancelled" value="Cancel"/>
-                  <xsl:if test="form/recurringEntity != 'true' and recurrenceId = ''">
-                    <!-- cannot duplicate recurring events for now -->
-                    <input type="submit" name="copy" value="Copy Event"/>
-                  </xsl:if>
-                </td>
-                <td align="right">
-                  <input type="submit" name="delete" value="Delete Event"/>
-                </td>
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:otherwise>
-        </xsl:choose>
-      </tr>
-    </table>
   </xsl:template>
 
+  <xsl:template name="submitEventButtons">
+    <table border="0" id="submitTable">
+      <tr>
+        <xsl:choose>
+          <xsl:when test="starts-with(form/calendar/path,$submissionsRootUnencoded)">
+            <td>
+              <div id="publishBox" class="invisible">
+                <div id="publishBoxCloseButton">
+                  <a href="javascript:resetPublishBox('calendarId')">
+                    <img src="{$resourcesRoot}/resources/closeIcon.gif" width="20" height="20" alt="close" border="0"/>
+                  </a>
+                </div>
+                <strong>Select a calendar in which to publish this event:</strong><br/>
+                <select name="calendarId" id="calendarId">
+                  <option>
+                    <xsl:attribute name="value"><xsl:value-of select="form/calendar/path"/></xsl:attribute>
+                    Select:
+                  </option>
+                  <xsl:for-each select="form/calendar/all/select/option">
+                    <xsl:sort select="." order="ascending"/>
+                    <option>
+                      <xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
+                      <xsl:if test="@selected"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
+                      <xsl:choose>
+                        <xsl:when test="starts-with(node(),/bedework/submissionsRoot/unencoded)">
+                          submitted events
+                        </xsl:when>
+                        <xsl:otherwise>
+                          <xsl:value-of select="substring-after(node(),'/public/')"/>
+                        </xsl:otherwise>
+                      </xsl:choose>
+                    </option>
+                  </xsl:for-each>
+                </select>
+                <input type="submit" name="publishEvent" value="Publish" onclick="changeClass('publishBox','invisible')"/>
+                <xsl:if test="$portalFriendly = 'false'">
+                  <br/>
+                  <span id="calDescriptionsLink">
+                    <a href="javascript:launchSimpleWindow('{$calendar-fetchDescriptions}')">calendar descriptions</a>
+                  </span>
+                </xsl:if>
+              </div>
+              <input type="submit" name="updateSubmitEvent" value="Update Event"/>
+              <input type="button" name="publishEvent" value="Publish Event" onclick="changeClass('publishBox','visible')"/>
+              <input type="submit" name="cancel" value="Cancel"/>
+            </td>
+            <td align="right">
+              <input type="submit" name="delete" value="Delete Event"/>
+            </td>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:choose>
+              <xsl:when test="/bedework/creating='true'">
+                <td>
+                  <input type="submit" name="addEvent" value="Add Event"/>
+                  <input type="submit" name="cancelled" value="Cancel"/>
+                </td>
+              </xsl:when>
+              <xsl:otherwise>
+                <td>
+                  <input type="submit" name="updateEvent" value="Update Event"/>
+                  <input type="submit" name="cancelled" value="Cancel"/>
+                  <xsl:if test="form/recurringEntity != 'true' and recurrenceId = ''">
+                    <!-- cannot duplicate recurring events for now -->
+                    <input type="submit" name="copy" value="Copy Event"/>
+                  </xsl:if>
+                </td>
+                <td align="right">
+                  <input type="submit" name="delete" value="Delete Event"/>
+                </td>
+              </xsl:otherwise>
+            </xsl:choose>
+          </xsl:otherwise>
+        </xsl:choose>
+      </tr>
+    </table>
+  </xsl:template>
+
   <xsl:template match="val" mode="weekMonthYearNumbers">
     <xsl:if test="position() != 1 and position() = last()"> and </xsl:if>
     <xsl:value-of select="."/><xsl:choose>
@@ -2580,14 +2583,14 @@
            old events for historical reasons.  Please remove only those events
            that are truly erroneous.</p>
         <p id="confirmButtons">
-          <form method="post">
-            <xsl:choose>
-              <xsl:when test="/bedework/page = 'deleteEventConfirmPending'">
-                <xsl:attribute name="action"><xsl:value-of select="$event-deletePending"/></xsl:attribute>
-              </xsl:when>
-              <xsl:otherwise>
-                <xsl:attribute name="action"><xsl:value-of select="$event-delete"/></xsl:attribute>
-              </xsl:otherwise>
+          <form method="post">
+            <xsl:choose>
+              <xsl:when test="/bedework/page = 'deleteEventConfirmPending'">
+                <xsl:attribute name="action"><xsl:value-of select="$event-deletePending"/></xsl:attribute>
+              </xsl:when>
+              <xsl:otherwise>
+                <xsl:attribute name="action"><xsl:value-of select="$event-delete"/></xsl:attribute>
+              </xsl:otherwise>
             </xsl:choose>
             <input type="submit" name="cancelled" value="Cancel"/>
             <input type="submit" name="delete" value="Delete"/>
@@ -4703,14 +4706,14 @@
   </xsl:template>
 
   <xsl:template name="modView">
-    <h2>Update View</h2>
-
-    <p class="note">
-      Note: In some configurations, changes made here will not show up in the calendar suite until
-      the cache is flushed (approx. 5 minutes) or you start a new session (e.g. clear your cookies).
-      Deleting a view on a production system should be followed by a server restart to clear the cache for all users.
-    </p>
+    <h2>Update View</h2>
 
+    <p class="note">
+      Note: In some configurations, changes made here will not show up in the calendar suite until
+      the cache is flushed (approx. 5 minutes) or you start a new session (e.g. clear your cookies).
+      Deleting a view on a production system should be followed by a server restart to clear the cache for all users.
+    </p>
+
     <xsl:variable name="viewName" select="/bedework/views/view/name"/>
     <h3 class="viewName">
       <xsl:value-of select="$viewName"/>
@@ -5570,7 +5573,7 @@
               </xsl:choose>
             </select>
           </td>
-        </tr>
+        </tr>
         <!--
         <tr>
           <td class="fieldName">
@@ -5589,7 +5592,7 @@
             <xsl:variable name="skinStyle" select="/bedework/prefs/skinStyle"/>
             <input type="text" name="skinStyle" value="{$skinStyle}" size="40"/>
           </td>
-        </tr>
+        </tr>
         -->
       </table>
       <br />
@@ -5828,7 +5831,7 @@
               </xsl:choose>
             </select>
           </td>
-        </tr>
+        </tr>
         <!--
         <tr>
           <td class="fieldName">
@@ -5847,7 +5850,7 @@
             <xsl:variable name="skinStyle" select="/bedework/prefs/skinStyle"/>
             <input type="text" name="skinStyle" value="{$skinStyle}" size="40"/>
           </td>
-        </tr>
+        </tr>
         -->
       </table>
       <br />
@@ -6126,78 +6129,78 @@
       <input type="submit" name="cancelled" value="No: Cancel"/>
     </form>
   </xsl:template>
-
-  <!--+++++++++++++++ Filters ++++++++++++++++++++-->
-  <xsl:template name="addFilter">
-    <h2>Add a Named CalDAV Filter (<a href="http://bedework.org/trac/bedework/wiki/Bedework/DevDocs/Filters">examples</a>)</h2>
-    <form name="peForm" method="post" action="{$filter-add}">
-      <table id="addFilterFormTable" class="eventFormTable">
-        <tr>
-          <th>
-            Name:
-          </th>
-          <td>
-            <input type="text" name="name" value="" size="40"/>
-          </td>
-        </tr>
-        <tr>
-          <th>
-            Description:
-          </th>
-          <td>
-            <input type="text" name="desc" value="" size="40"/>
-          </td>
-        </tr>
-        <tr>
-          <th>
-            Filter Definition:
-          </th>
-          <td>
-            <textarea name="def" rows="30" cols="80"></textarea>
-          </td>
-        </tr>
-        <tr>
-          <td>
-          </td>
-          <td>
-            <input type="submit" name="add" value="Add Filter"/>
-            <input type="submit" name="cancelled" value="Cancel"/>
-          </td>
-        </tr>
-      </table>
-    </form>
-    <xsl:if test="/bedework/filters/filter">
-      <h2>Current Filters</h2>
-      <table id="filterTable">
-        <tr>
-          <th>Filter Name</th>
-          <th>Description/Definition</th>
-          <th>Delete</th>
-        </tr>
-        <xsl:for-each select="/bedework/filters/filter">
-          <xsl:variable name="filterName" select="name"/>
-          <tr>
-            <td><xsl:value-of select="$filterName"/></td>
-            <td>
-              <xsl:if test="description != ''"><xsl:value-of select="description"/><br/></xsl:if>
-              <a href="javascript:toggleVisibility('bwfilter-{$filterName}','filterdef')">
-                show/hide filter definition
-              </a>
-              <div id="bwfilter-{$filterName}" class="invisible">
-                <xsl:value-of select="definition"/>
-              </div>
-            </td>
-            <td>
-              <a href="{$filter-delete}&amp;name={$filterName}" title="delete filter">
-                <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="delete filter"/>
-              </a>
-            </td>
-          </tr>
-        </xsl:for-each>
-      </table>
-    </xsl:if>
-  </xsl:template>
 
+  <!--+++++++++++++++ Filters ++++++++++++++++++++-->
+  <xsl:template name="addFilter">
+    <h2>Add a Named CalDAV Filter (<a href="http://bedework.org/trac/bedework/wiki/Bedework/DevDocs/Filters">examples</a>)</h2>
+    <form name="peForm" method="post" action="{$filter-add}">
+      <table id="addFilterFormTable" class="eventFormTable">
+        <tr>
+          <th>
+            Name:
+          </th>
+          <td>
+            <input type="text" name="name" value="" size="40"/>
+          </td>
+        </tr>
+        <tr>
+          <th>
+            Description:
+          </th>
+          <td>
+            <input type="text" name="desc" value="" size="40"/>
+          </td>
+        </tr>
+        <tr>
+          <th>
+            Filter Definition:
+          </th>
+          <td>
+            <textarea name="def" rows="30" cols="80"></textarea>
+          </td>
+        </tr>
+        <tr>
+          <td>
+          </td>
+          <td>
+            <input type="submit" name="add" value="Add Filter"/>
+            <input type="submit" name="cancelled" value="Cancel"/>
+          </td>
+        </tr>
+      </table>
+    </form>
+    <xsl:if test="/bedework/filters/filter">
+      <h2>Current Filters</h2>
+      <table id="filterTable">
+        <tr>
+          <th>Filter Name</th>
+          <th>Description/Definition</th>
+          <th>Delete</th>
+        </tr>
+        <xsl:for-each select="/bedework/filters/filter">
+          <xsl:variable name="filterName" select="name"/>
+          <tr>
+            <td><xsl:value-of select="$filterName"/></td>
+            <td>
+              <xsl:if test="description != ''"><xsl:value-of select="description"/><br/></xsl:if>
+              <a href="javascript:toggleVisibility('bwfilter-{$filterName}','filterdef')">
+                show/hide filter definition
+              </a>
+              <div id="bwfilter-{$filterName}" class="invisible">
+                <xsl:value-of select="definition"/>
+              </div>
+            </td>
+            <td>
+              <a href="{$filter-delete}&amp;name={$filterName}" title="delete filter">
+                <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="delete filter"/>
+              </a>
+            </td>
+          </tr>
+        </xsl:for-each>
+      </table>
+    </xsl:if>
+  </xsl:template>
+
   <!--+++++++++++++++ System Stats ++++++++++++++++++++-->
 
   <xsl:template match="sysStats" mode="showSysStats">

Modified: trunk/deployment/webadmin/webapp/resources/resources/bedeworkEventForm.js
===================================================================
--- trunk/deployment/webadmin/webapp/resources/resources/bedeworkEventForm.js	2008-04-17 04:15:47 UTC (rev 1836)
+++ trunk/deployment/webadmin/webapp/resources/resources/bedeworkEventForm.js	2008-04-17 04:20:54 UTC (rev 1837)
@@ -39,15 +39,6 @@
 var rdateDeleteStr = "remove";
 
 // ========================================================================
-// ========================================================================
-//   Bedework specific x-properties
-
-var bwXpropertyImage = "X-BEDEWORK-IMAGE";
-var bwXparamDescription = "X-BEDEWORK-PARAM-DESCRIPTION";
-var bwXparamWidth = "X-BEDEWORK-PARAM-WIDTH";
-var bwXparamHeight = "X-BEDEWORK-PARAM-HEIGHT";
-
-// ========================================================================
 // rdate functions
 // ========================================================================
 
@@ -331,6 +322,7 @@
   }
   setRecurrence(formObj);
   setBedeworkXProperties(formObj);
+
   //setAccessHow(formObj,1);
   //setAccessAcl(formObj);
 }
@@ -347,24 +339,6 @@
   formObj["eventEndDate.month"].value = endDate.getMonth() + 1;
   formObj["eventEndDate.day"].value = endDate.getDate();
 }
-function setBedeworkXProperties(formObj) {
-  // set up specific Bedework X-Properties
-
-  // X-BEDEWORK-IMAGE and its parameters:
-  if (formObj["xBwImageHolder"].value != '') {
-    var xprop = bwXpropertyImage + ";" + bwXparamDescription + "=bogusDesc" + ":" + formObj["xBwImageHolder"].value;
-    var xBwImage = document.getElementById(bwXpropertyImage);
-    if (xBwImage == null) {
-      var xBwImageNew = formObj.appendChild(document.createElement("input"));
-      xBwImageNew.type = "hidden";
-      xBwImageNew.name = "xproperty";
-      xBwImageNew.id = bwXpropertyImage;
-      xBwImageNew.value = xprop;
-    } else {
-      xBwImage.value = xprop;
-    }
-  }
-}
 function swapAllDayEvent(obj) {
   allDayStartDateField = document.getElementById("allDayStartDateField");
   allDayEndDateField = document.getElementById("allDayEndDateField");

Added: trunk/deployment/webadmin/webapp/resources/resources/bedeworkXProperties.js
===================================================================
--- trunk/deployment/webadmin/webapp/resources/resources/bedeworkXProperties.js	                        (rev 0)
+++ trunk/deployment/webadmin/webapp/resources/resources/bedeworkXProperties.js	2008-04-17 04:20:54 UTC (rev 1837)
@@ -0,0 +1,128 @@
+// Bedework event form functions
+
+/* **********************************************************************
+    Copyright 2007 Rensselaer Polytechnic Institute. All worldwide rights reserved.
+
+    Redistribution and use of this distribution in source and binary forms,
+    with or without modification, are permitted provided that:
+       The above copyright notice and this permission notice appear in all
+        copies and supporting documentation;
+
+        The name, identifiers, and trademarks of Rensselaer Polytechnic
+        Institute are not used in advertising or publicity without the
+        express prior written permission of Rensselaer Polytechnic Institute;
+
+    DISCLAIMER: The software is distributed" AS IS" without any express or
+    implied warranty, including but not limited to, any implied warranties
+    of merchantability or fitness for a particular purpose or any warrant)'
+    of non-infringement of any current or pending patent rights. The authors
+    of the software make no representations about the suitability of this
+    software for any particular purpose. The entire risk as to the quality
+    and performance of the software is with the user. Should the software
+    prove defective, the user assumes the cost of all necessary servicing,
+    repair or correction. In particular, neither Rensselaer Polytechnic
+    Institute, nor the authors of the software are liable for any indirect,
+    special, consequential, or incidental damages related to the software,
+    to the maximum extent the law permits. */
+
+
+// ========================================================================
+// Bedework specific x-properties
+// ========================================================================
+
+var bwXPropertyImage = "X-BEDEWORK-IMAGE";
+var bwXParamDescription = "X-BEDEWORK-PARAM-DESCRIPTION";
+var bwXParamWidth = "X-BEDEWORK-PARAM-WIDTH";
+var bwXParamHeight = "X-BEDEWORK-PARAM-HEIGHT";
+
+var bwXPropertySubmitComment = "X-BEDEWORK-SUBMIT-COMMENT";
+
+
+// ========================================================================
+// x-property functions
+// ========================================================================
+
+var bwXProps = new BwXProperties();
+
+/* An xproperty
+ * name:   String - name of x-property, e.g. "X-BEDEWORK-IMAGE"
+ * params: 2-D Array of parameter key/value pairs,
+ *         e.g. params[0] = ["X-BEDEWORK-PARAM-DESCRIPTION","a lovely image"]
+ * value:  String - value of x-property
+ */
+function BwXProperty(name, params, value) {
+  this.name = name;
+  this.params = params;
+  this.value = value;
+
+  this.format = function() {
+    var curXparams = "";
+    for (var i = 0; i < this.params.length; i++) {
+      curXparams += ";" + this.params[i][0] + "=" + this.params[i][1];
+    }
+    return this.name + curXparams + ":" + this.value;
+  }
+}
+
+function BwXProperties() {
+  var xproperties = new Array();
+
+  this.init = function(name, params, value) {
+     var xprop = new BwXProperty(name, params, value);
+     xproperties.push(xprop);
+  }
+
+  this.update = function(name, params, value, isUnique) {
+    var xprop = new BwXProperty(name, params, value);
+    if (isUnique && this.contains(xprop)) {
+      index = this.getIndex(name);
+      if (index != null) {
+        xproperties.splice(index,1,xprop);
+      }
+    } else {
+      xproperties.push(xprop);
+    }
+  }
+
+  this.contains = function(xprop) {
+    for (var i = 0; i < xproperties.length; i++) {
+      var curXprop = xproperties[i];
+      if (curXprop[0].equals(xprop[0])) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  this.getIndex = function(xpropName) {
+    for (var i = 0; i < xproperties.length; i++) {
+      var curXprop = xproperties[i];
+      if (curXprop[0].equals(xpropName)) {
+        return i;
+      }
+    }
+    return null;
+  }
+
+  this.generate = function(formObj) {
+    for (var i = 0; i < xproperties.length; i++) {
+      var xpropField = formObj.appendChild(document.createElement("input"));
+      xpropField.type = "hidden";
+      xpropField.name = "xproperty";
+      xpropField.value = xproperties[i].format();
+    }
+  }
+
+}
+
+function setBedeworkXProperties(formObj) {
+  // set up specific Bedework X-Properties on event form submission
+
+  // X-BEDEWORK-IMAGE and its parameters:
+  if (formObj["xBwImageHolder"].value != '') {
+    bwXProps.update(bwXPropertyImage,[[bwXParamDescription,''],[bwXParamWidth,''],[bwXParamHeight,'']],formObj["xBwImageHolder"].value,true);
+  }
+
+  // commit all xproperties back to the form
+  bwXProps.generate(formObj);
+}

Modified: trunk/deployment/webpublic/webapp/resources/demoskins/MainCampus/default/default/default.xsl
===================================================================
--- trunk/deployment/webpublic/webapp/resources/demoskins/MainCampus/default/default/default.xsl	2008-04-17 04:15:47 UTC (rev 1836)
+++ trunk/deployment/webpublic/webapp/resources/demoskins/MainCampus/default/default/default.xsl	2008-04-17 04:20:54 UTC (rev 1837)
@@ -773,8 +773,8 @@
         <td class="fieldname">Description:</td>
         <td colspan="2" class="fieldval description">
           <xsl:if test="xproperties/node()[name()='X-BEDEWORK-IMAGE']">
-            <xsl:variable name="bwImageUrl"><xsl:value-of select="xproperties/node()[name()='X-BEDEWORK-IMAGE']/values/text"/></xsl:variable>
-            <img src="{$bwImageUrl}" class="bwEventImage"/>
+            <xsl:variable name="bwImage"><xsl:value-of select="xproperties/node()[name()='X-BEDEWORK-IMAGE']/values/text"/></xsl:variable>
+            <img src="{$bwImage}" class="bwEventImage"/>
           </xsl:if>
           <xsl:call-template name="replace">
             <xsl:with-param name="string" select="description"/>

Modified: trunk/deployment/webpublic/webapp/resources/demoskins/SoEDepartmental/default/default/default.xsl
===================================================================
--- trunk/deployment/webpublic/webapp/resources/demoskins/SoEDepartmental/default/default/default.xsl	2008-04-17 04:15:47 UTC (rev 1836)
+++ trunk/deployment/webpublic/webapp/resources/demoskins/SoEDepartmental/default/default/default.xsl	2008-04-17 04:20:54 UTC (rev 1837)
@@ -766,8 +766,8 @@
         <td class="fieldname">Description:</td>
         <td colspan="2" class="fieldval description">
           <xsl:if test="xproperties/node()[name()='X-BEDEWORK-IMAGE']">
-            <xsl:variable name="bwImageUrl"><xsl:value-of select="xproperties/node()[name()='X-BEDEWORK-IMAGE']/values/text"/></xsl:variable>
-            <img src="{$bwImageUrl}" class="bwEventImage"/>
+            <xsl:variable name="bwImage"><xsl:value-of select="xproperties/node()[name()='X-BEDEWORK-IMAGE']/values/text"/></xsl:variable>
+            <img src="{$bwImage}" class="bwEventImage"/>
           </xsl:if>
           <xsl:call-template name="replace">
             <xsl:with-param name="string" select="description"/>



More information about the Bedework-commit mailing list