NIHVIVO-3772 NIHVIVO-3721 Incorporate the OpenSocial integration from Eric Meeks at CTSI, UCSF. Add instructions on how to install and configure ORNG Shindig.

This commit is contained in:
j2blake 2012-06-05 19:31:08 +00:00
parent 182b4e7226
commit 2e69f0379b
16 changed files with 684 additions and 7 deletions

View file

@ -100,7 +100,7 @@ blockquote {
/* BRANDING ------> */ /* BRANDING ------> */
h1.vivo-logo { h1.vivo-logo {
position: absolute; position: absolute;
width: 386px; width: 442px;
height: 59px; height: 59px;
top: 28px; top: 28px;
left: 0; left: 0;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View file

@ -49,7 +49,7 @@
<p> <p>
This is created when you unpack the VIVO distribution file (see <a href="#download_code">Step III</a>, below). This is where you will This is created when you unpack the VIVO distribution file (see <a href="#download_code">Step III</a>, below). This is where you will
create your deploy.properties file (see <a href="#deploy_properties">Step create your deploy.properties file (see <a href="#deploy_properties">Step
V</a>, below), and where you will make any modifications to the VIVO IV</a>, below), and where you will make any modifications to the VIVO
theme or code. You can create this wherever you choose. theme or code. You can create this wherever you choose.
</p> </p>
<h4>VIVO inside Tomcat</h4> <h4>VIVO inside Tomcat</h4>
@ -59,7 +59,7 @@
but you wont need to look at it or change it. If you need to change but you wont need to look at it or change it. If you need to change
VIVO, make the changes in the distribution directory, and run the build VIVO, make the changes in the distribution directory, and run the build
script again. Tell the build script where to find Tomcat by setting <code>tomcat.home</code> script again. Tell the build script where to find Tomcat by setting <code>tomcat.home</code>
in the deploy.properties file (see <a href="#deploy_properties">Step V</a>, in the deploy.properties file (see <a href="#deploy_properties">Step IV</a>,
below). below).
</p> </p>
<h4>The VIVO home directory</h4> <h4>The VIVO home directory</h4>
@ -68,7 +68,7 @@
image files are stored here, and the Solr home directory is stored here also. image files are stored here, and the Solr home directory is stored here also.
You can create this wherever you choose. Tell VIVO where to find the You can create this wherever you choose. Tell VIVO where to find the
home directory by setting <code>vitro.home.directory</code> home directory by setting <code>vitro.home.directory</code>
in the deploy.properties file (see <a href="#deploy_properties">Step V</a>, in the deploy.properties file (see <a href="#deploy_properties">Step IV</a>,
below). You must create this directory before starting VIVO, and you below). You must create this directory before starting VIVO, and you
must ensure that Tomcat has permission to read and write to this must ensure that Tomcat has permission to read and write to this
directory when it runs. directory when it runs.
@ -119,6 +119,9 @@
<a href="#external_auth">Using an External Authentication <a href="#external_auth">Using an External Authentication
System with VIVO</a> System with VIVO</a>
</li> </li>
<li>
<a href="#external_auth">Using VIVO as an OpenSocial platform</a>
</li>
<li> <li>
<a href="#installation_check">Was the installation successful?</a> <a href="#installation_check">Was the installation successful?</a>
</li> </li>
@ -981,7 +984,25 @@
<pre>selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId</pre> <pre>selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId</pre>
</li> </li>
</ul> </ul>
<h3 id="installation_check">XII. Was the installation successful? </h3>
<h3 id="external_auth">XII. Using VIVO as an OpenSocial platform </h3>
<p>
VIVO now supports an extension of the OpenSocial API,
known as Open Research Networking Gadgets, or ORNG (pronounced "ORNG")
(see http://www.opengadgets.org/index.html).
</p>
<p>
Configuring VIVO to support ORNG requires several steps, including
additions to the VIVO properties, modifications to Tomcat configuration
creation of an ORNG-compatible version of Apache Shindig, and use of a
security certificate for safe network operations.
</p>
<p>
For instructions, consult the file
<a href="setting_up_orng.html">setting_up_orng.html</a> in this directory.
</p>
<h3 id="installation_check">XIII. Was the installation successful? </h3>
<p> <p>
If you have completed the previous steps, you have good indications If you have completed the previous steps, you have good indications
that the installation was successful. that the installation was successful.

410
doc/setting_up_orng.html Normal file
View file

@ -0,0 +1,410 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Setting up VIVO to use OpenSocial Gadgets</title>
<link rel="stylesheet" href="./css/doc.css" media="screen">
</head>
<body>
<div id="branding" role="banner">
<h1 class="vivo-logo"><a href="/"><span class="displace">VIVO</span></a></h1>
</div>
<!-- Start of content -->
<div id="wrapper-content" role="main">
<h1>Setting up VIVO to use OpenSocial Gadgets</h1>
<small>
Instructions for connecting VIVO and Open Research Networking Gadgets
</small>
<p>
This document contains instructions on how to configure your VIVO
installation to use OpenSocial gadgets.
</p>
<p>
VIVO uses an extension of the OpenSocial protocols called
Open Research Networking Gadgets, or ORNG.
ORNG is a project of the Clinical & Translational Science Institute at the
University of California, San Francisco.
You can find out more about the ORNG project at their web site,
<a href="http://www.opengadgets.org/index.html">http://www.opengadgets.org/index.html</a>
</p>
<p>
ORNG supports gadgets using a modified version of Apache Shindig.
These instructions tell you how to install the ORNG Shindig web application,
and how to configure it to work with VIVO.
</p>
<hr/>
<h3 id="tableofcontents">Table of Contents</h3>
<toc>
<ol class="roman2">
<li><a href="#config_files">Create configuration files</a></li>
<li><a href="#database">Create database tables and procedures</a></li>
<li><a href="#tomcat_settings">Modify Tomcat settings</a></li>
<li><a href="#deploy">Deploy the web application</a> <br>
<li><a href="#vivo_settings">Configure VIVO</a></li>
<li><a href="#confirm">Does it work?</a></li>
</ol>
</toc>
<hr/>
<h3 id="config_files">I. Create configuration files</h3>
<p>
In your VIVO home directory, create a directory called <em>shindig</em>.
Under that, create directories called <em>conf</em> and <em>openssl</em>.
Your VIVO home directory will look something like this:
<pre> [VIVO home directory]
|
|--shindig
| |
| |--conf
| |
| |--openssl
|
|--solr
|
|--uploads</pre>
</p>
<h4>A. Create a secure key file</h4>
<p>
Shindig uses an encryption key to insure that the communication
between the gadget and the server is secure.
You should create a file that contains the encryption key,
and store that file in the <em>shindig/openssl</em> directory that you created.
</p>
<p>
On Unix-based systems (like Linux or Mac OS X), this command will create
an encryption key from a random seed:
<pre>dd if=/dev/random bs=32 count=1 | openssl base64 > <em>[key-file]</em></pre>
For example, if your VIVO home directory is <em>/usr/local/vivo/data</em>,
you might use the command this way:
<pre>dd if=/dev/random bs=32 count=1 | openssl base64 > /usr/local/vivo/data/shindig/openssl/securitytokenkey.txt</pre>
</p>
<p>
If your VIVO installation is installed on a machine that runs Microsoft Windows,
you will need to find another way to create an encryption key.
The easiest way might be to find a Unix-based machine,
issue the command above, and copy the resulting file to your Windows machine.
</p>
<h4>B. Create the Create configuration files</h4>
<p>
In your VIVO distribution directory, find the file called
<pre>vitro-core/opensocial/shindig.orng.properties</pre> and copy it to the
<em>shindig/conf</em> directory that you created.
</p>
<p>
Set these values in the <em>shindig.orng.properties</em> file
</p>
<table border='1' bordercolor="#CCCCCC" cellspacing="5">
<tbody>
<tr>
<th>
Property Name
</th>
<th>
Example Value
</th>
</tr>
<tr>
<td colspan="2">
Specify the location of the encryption key file.
</td>
</tr>
<tr class="odd_row">
<td>
shindig.signing.key-file
</td>
<td>
/usr/local/vivo/data/shindig/openssl/securitytokenkey.txt
</td>
</tr>
<tr>
<td colspan="2">
Specify the JDBC URL of your database. Change
the end of the URL to reflect your database name (if it is not "vivo").
</td>
</tr>
<tr class="odd_row">
<td>
orng.dbURL
</td>
<td>
jdbc:mysql://localhost/vivo
</td>
</tr>
<tr>
<td colspan="2">
Change the username to match the authorized user
you created in MySQL when installing VIVO.
</td>
</tr>
<tr class="odd_row">
<td>
orng.dbUser
</td>
<td>
username
</td>
</tr>
<tr>
<td colspan="2">
Change the password to match the password you
created in MySQL when installing VIVO.
</td>
</tr>
<tr class="odd_row">
<td>
orng.dbPassword
</td>
<td>
password
</td>
</tr>
</tbody>
</table>
<h3 id="database">II. Create database tables and procedures</h3>
<p>
Shindig uses several database tables in MySQL to store its data:
which gadgets appear on which pages, what size are the gadgets,
what information applies to each individual, and more.
Shindig also creates stored procedures in MySQL. These are small
pieces of code that simplify the use of the database tables.
</p>
<p>
In the VIVO distribution directory, a file called
<em>vitro-core/opensocial/shindig_orng_tables.sql</em>
contains SQL commands that create the tables and
stored procedures for Shindig to use.
</p>
<p>
Tell MySQL to process this file with a command like this:
<pre>mysql -u <em>username</em> -p <em>database</em> &lt; <em>sql_file</em></pre>
So, if your current directory is the VIVO distibution directory, and your
VIVO database is <em>vivoDb</em> and your MySQL user account is <em>vivoUser</em>,
then you might use the command this way:
<pre>mysql -u vivoUser -p vivoDb &lt; vitro-core/opensocial/shindig_orng_tables.sql</pre>
MySQL will prompt you for the password for your MySQL user account, and then
process the file.
</p>
<p>
You may want to start your gadget collection with some example gadgets
that have been developed by the ORNG group. The file called
<em>vitro-core/opensocial/shindig_example_gadgets.sql</em>
contains SQL commands that will add these gadgets to your system's configuration.
</p>
<p>
If you want to load these example gadgets, you can use a command similar to the previous one:
<pre>mysql -u vivoUser -p vivoDb &lt; vitro-core/opensocial/shindig_example_gadgets.sql</pre>
As before, MySQL will prompt you for the password for your MySQL user account, and then
process the file.
</p>
<h3 id="tomcat_settings">III. Modify Tomcat settings</h3>
<p>
The Shindig application must know where to find the configuration file that you created in
Step I.
It must also know its own URL, so that URL can be inserted into the gadgets.
</p>
<p>
This information is provided through startup parameters in Tomcat.
With most installations of Tomcat, the "setenv.sh" or
"setenv.bat" file in Tomcat's bin directory is a convenient place to
set these parameters.
<em>If this file does not exist in Tomcat's bin directory, you can create it.</em>
</p>
<p>
Here is an example of the setenv file, showing only the Shindig requirements:
<pre>export CLASSPATH=/usr/local/vivo/data/shindig/conf
export CATALINA_OPTS='-Dshindig.host=localhost -Dshindig.port=8080'</pre>
This assumes that your setenv file was empty before starting this process,
and that you used the default location for the Shindig configuration file in Step I.
In fact, it's more common for the setenv file to contain other parameters besides
those used for Shindig. In that case, it might look more like this:
<pre>export CLASSPATH=/usr/local/vivo/data/shindig/conf
export CATALINA_OPTS='-Dshindig.host=localhost -Dshindig.port=8080 -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:MaxPermSize=128m'</pre>
</p>
<h3 id="deploy">IV. Deploy the web application</h3>
<p>
In the VIVO distribution directory, a file called <em>vitro-core/opensocial/shindigorng.war</em>
contains the ORNG-Shindig web application.
Copy this file to the <em>webapps</em> directory of your Tomcat server.
For example, if your Tomcat server is located at <em>/usr/local/tomcat</em>,
then you should copy this file to <em>/usr/local/tomcat/webapps/shindigorng.war</em>
</p>
<h3 id="vivo_settings">V. Configure VIVO</h3>
<p>
In the VIVO distribution directory, the file called <em>deploy.properties</em>
contains configuration options for the VIVO application.
You must set some additional parameters so VIVO will be able to communicate with Shindig.
</p>
<table border='1' bordercolor="#CCCCCC" cellspacing="5">
<tbody>
<tr>
<th>
Property Name
</th>
<th>
Example Value
</th>
</tr>
<tr>
<td colspan="2">
The base URL that VIVO will use when contacting the ORNG Shindig application.
Usually, this is the same host and port number as VIVO itself,
with a context path of <em>shindigorng</em>
</td>
</tr>
<tr class="odd_row">
<td>OpenSocial.shindigURL</td>
<td>http://localhost:8080/shindigorng</td>
</tr>
<tr>
<td colspan="2">
The host name and port number of the Token Service that ORNG shindig creates.
For now, a value of <em>localhost</em> or <em>127.0.0.1</em> will not work.
You must provide the actual host name of your machine, followed by <em>:8777</em>
</td>
</tr>
<tr class="odd_row">
<td>OpenSocial.tokenService</td>
<td>myhost.mydomain.edu:8777</td>
</tr>
</tbody>
</table>
<h3 id="confirm">VI. Does it work?</h3>
<p>
Start VIVO. Enter a search term in the search box, and view the results. Check the gadgets there.
Navigate to a person's profile page. Again, check for the expected gadgets.
</p>
<p>
If the gadgets do not appear as you expect, look for these symptoms,
and check for the corresponding possible causes.
</p>
<table>
<tr>
<th>Symptoms</th>
<th>Possible causes</th>
</tr>
<tr>
<td>
<ul>
<li>
Gadgets do not appear on Individual page or in search results.
</li>
<li>
Tomcat "localhost" log file contains an error message:
<pre>Unable to load properties: shindig.orng.properties</pre>
</li>
</ul>
</td>
<td>
<ul>
<li>Configuration file is not correctly named.</li>
<li>Tomcat's setenv file does not specify the correct CLASSPATH</li>
</ul>
</td>
</tr>
<tr class="odd_row"><td colspan="2"></td></tr>
<tr>
<td>
<ul>
<li>
Dialog box appears in the browser with the message:
"Error 500 reading application data: internalError"
</li>
<li>
Tomcat "catalina" log file contains an error message:
<pre>java.sql.SQLException: Access denied for user</pre>
</li>
</ul>
</td>
<td>
<ul>
<li>
Configuration file contains incorrect value for one or more of these:
<ul>
<li>orng.dbURL</li>
<li>orng.dbUser</li>
<li>orng.dbPassword</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr class="odd_row"><td colspan="2"></td></tr>
<tr>
<td>
<ul>
<li>
Gadgets appear to work as desired.
</li>
<li>
Tomcat "catalina" log file contains an error message:
<pre>org.apache.shindig.protocol.ProtocolException: java.net.UnknownHostException:</pre>
</li>
</ul>
</td>
<td>
<ul>
<li>
<b>What's up?
This is a result of not setting key-file, or pointing it to a file that doesn't exist.
Is there no better diagnostic?</b>
</li>
</ul>
</td>
</tr>
<tr class="odd_row"><td colspan="2"></td></tr>
<tr>
<td>
<ul>
<li>
Gadgets do not appear on Individual page or in search results
</li>
<li>
vivo.all.log contains an error message:
<pre>MySQLSyntaxErrorException: Table 'vivo.shindig_apps' doesn't exist</pre>
</li>
</ul>
</td>
<td>
<ul>
<li>
MySQL does not contain the shindig tables.
<pre>shindig_orng_tables.sql</pre> was not processed.
</li>
</ul>
</td>
</tr>
<tr class="odd_row"><td colspan="2"></td></tr>
<tr>
<td>
<ul>
<li>
Gadgets do not appear on Individual page or in search results
</li>
<li>
vivo.all.log contains an error message:
<pre>java.net.ConnectException: Connection refused</pre>
</li>
</ul>
</td>
<td>
<ul>
<li>
In <em>deploy.properties</em>, <em>OpenSocial.tokenService</em> is not set correctly.
</li>
</ul>
</td>
</tr>
<tr class="odd_row"><td colspan="2"></td></tr>
</table>
</div>
</body>
</html>

View file

@ -103,6 +103,13 @@
See J.Blake for details. See J.Blake for details.
</p> </p>
</li> </li>
<li>
<h4 id="openSocial">Support for OpenSocial gadgets</h4>
<p>
You can now add OpenSocial support to your VIVO instance. Look at setting_up_orng.html for details.
See J.Blake for details.
</p>
</li>
</ul> </ul>

View file

@ -180,4 +180,25 @@ Vitro.reconcile.defaultTypeList = http://vivoweb.org/ontology/core#Role, core:Ro
# #
# Types of individual for which we can create proxy editors. # Types of individual for which we can create proxy editors.
# If this is omitted, defaults to http://www.w3.org/2002/07/owl#Thing # If this is omitted, defaults to http://www.w3.org/2002/07/owl#Thing
#
proxy.eligibleTypeList = http://xmlns.com/foaf/0.1/Person, http://xmlns.com/foaf/0.1/Organization proxy.eligibleTypeList = http://xmlns.com/foaf/0.1/Person, http://xmlns.com/foaf/0.1/Organization
#
# For OpenSocial integration
# The base URL of the ORNG Shindig server. Usually, this is the same host and port
# number as VIVO iteself, with a context path of "shindigorng".
#
OpenSocial.shindigURL = http://localhost:8080/shindigorng
#
# For OpenSocial integration
# The host name and port number of the service that provides security tokens for VIVO and
# Shindig to share. For now, the host name must be the actual host, not "localhost" or "127.0.0.1"
# The port number must be 8777
#
OpenSocial.tokenService = myhost.mydomain.edu:8777
#
# For OpenSocial integration
# Only set sandbox to True for dev/test environments. Comment out or set to False in production
#
#OpenSocial.sandbox = True

View file

@ -1356,6 +1356,20 @@
<url-pattern>/harvester/harvest</url-pattern> <url-pattern>/harvester/harvest</url-pattern>
</servlet-mapping> </servlet-mapping>
<!-- VIVO OpenSocial Extension by UCSF -->
<servlet>
<servlet-name>GadgetController</servlet-name>
<servlet-class>edu.ucsf.vitro.opensocial.GadgetController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GadgetController</servlet-name>
<url-pattern>/gadget</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GadgetController</servlet-name>
<url-pattern>/gadget/sandbox</url-pattern>
</servlet-mapping>
<!-- ============================== servlet-mappings ======================== --> <!-- ============================== servlet-mappings ======================== -->
<servlet-mapping> <servlet-mapping>

View file

@ -98,6 +98,20 @@
<#if researchAreas?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> <#if researchAreas?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.objectPropertyListing researchAreas editable /> <@p.objectPropertyListing researchAreas editable />
</#if> </#if>
<#-- VIVO OpenSocial Extension by UCSF -->
<#if openSocial??>
<#if openSocial.visible>
<#-- It would likely make sense to remove the #if logic as it is safe and -->
<#-- arguably better to just have both divs in all conditions -->
<#if editable>
<div id="gadgets-edit" class="gadgets-gadget-parent"></div>
<#else>
<div id="gadgets-view" class="gadgets-gadget-parent"></div>
</#if>
</#if>
</#if>
</section> </section>
</section> </section>

View file

@ -0,0 +1,113 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
.gadgets-gadget-chrome {
float: left;
margin: 4px 6px 4px 0;
border: 1px solid #7aa5d6;
border: 1px solid #CCC;
}
.col2 .gadgets-gadget-chrome {
margin-left: 9px;
}
.gadgets-gadget
{
width: 100%;
border: none;
}
.gadgets-gadget-title-bar {
padding: 4px 4px 2px;
background-color: #e5ecf9;
background-color: #EEEBE5;
}
.gadgets-gadget-title-bar:hover { background-color: #e7e3db; }
.gadgets-gadget-title-bar img,
.gadgets-gadget-title-button {
vertical-align: top;
}
.gadgets-gadget-title a, .gadgets-gadget-title a:hover {
font-weight: bold;
font-size: 14px;
color: #CA7C29;
}
.EditBody .gadgets-gadget-title a {
color:#3B6394;
}
.EditBody .gadgets-gadget-title a:hover {
color:#1E416C;
}
.gadgets-gadget-title-button-bar {
font-size: smaller;
}
.gadgets-gadget-canvas-title {
color: #000;
padding-left: 6px;
}
.gadgets-gadget-user-prefs-dialog {
background-color: #e5ecf9;
}
.gadgets-gadget-user-prefs-dialog-action-bar {
text-align: center;
padding-bottom: 4px;
}
.gadgets-gadget-title-button img {
border: 2px solid #4F5CC7;
border: none;
float: right;
margin-right: 2px;
}
.EditBody .gadgets-gadget-title-button img {
float: left;
margin-right: 8px;
}
.gadgets-gadget-content {
padding: 4px;
}
.gadgets-log-entry {
}
/* Used to style messages produced during rewriting by CajaContentRewriter */
.gadgets-messages {
}
.gadgets-gadget-status {
font-weight: bold;
float: right;
/* text-align: center; */
font-size: 12px;
padding-right: 6px;
}
* html .gadgets-gadget-status { margin-top: -18px; padding-right: 30px; } /* fudge line break for IE6 */
*+html .gadgets-gadget-status { margin-top: -18px; padding-right: 30px; } /* fudge line break for IE7 */
/* list tool fix ticket #135 */
* html #ctl00_ctl00_left_pnlOpenSocialTools { height: 130px; }
*+html #ctl00_ctl00_left_pnlOpenSocialTools { height: 130px; }
* html #ctl00_ctl00_left_pnlOpenSocialTools { margin-left: -8px; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

View file

@ -0,0 +1,12 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Template for the body of the GadgetDetails page -->
<div class="pageTitle" id="gadgets-title"><h2>${title}</h2></div>
<#-- VIVO OpenSocial Extension by UCSF -->
<#if openSocial??>
<#if openSocial.visible>
<div id="gadgets-detail" class="gadgets-gadget-parent"></div>
</#if>
</#if>

View file

@ -0,0 +1,47 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Template for the body of the GadgetDetails page -->
<div class="pageTitle" id="gadgets-title"><h2>${title}</h2></div>
<#-- VIVO OpenSocial Extension by UCSF -->
<#if openSocial??>
<#if openSocial.visible>
<form method="POST">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<th>
Gadget URLs</br>
One Per Line
</th>
<td>
<textarea name="gadgetURLS" rows="10" cols="160">${gadgetURLS}</textarea>
</td>
</tr>
<tr>
<th>
Debug mode
</th>
<td>
<input type="checkbox" name="debug" value="debug" checked="checked" />
</td>
</tr>
<tr>
<th>
Use Cache
</th>
<td>
<input type="checkbox" name="useCache" value="useCache" />
</td>
</tr>
<tr>
<th>
</th>
<td>
<input type="submit" value="Submit" />
</td>
</tr>
</table>
</form>
</#if>
</#if>

View file

@ -6,6 +6,17 @@
<title>${title}</title> <title>${title}</title>
<#-- VIVO OpenSocial Extension by UCSF -->
<#if openSocial??>
<#if openSocial.visible>
<#-- Required to add these BEFORE stylesheets.flt and headScripts.ftl are processed -->
${stylesheets.add('<link rel="stylesheet" href="${urls.theme}/css/openSocial/gadgets.css" />')}
${headScripts.add('<script type="text/javascript" src="${openSocial.containerJavascriptSrc}"></script>',
'<script type="text/javascript" language="javascript">${openSocial.gadgetJavascript}</script>',
'<script type="text/javascript" src="${urls.base}/js/openSocial/shindig.js"></script>')}
</#if>
</#if>
<#include "stylesheets.ftl"> <#include "stylesheets.ftl">
<link rel="stylesheet" href="${urls.theme}/css/screen.css" /> <link rel="stylesheet" href="${urls.theme}/css/screen.css" />

View file

@ -9,7 +9,7 @@
<#include "head.ftl"> <#include "head.ftl">
</head> </head>
<body class="${bodyClasses!}"> <body class="${bodyClasses!}" onload="${bodyOnload!}">
<#include "identity.ftl"> <#include "identity.ftl">
<#include "menu.ftl"> <#include "menu.ftl">

View file

@ -8,11 +8,18 @@
<#include "head.ftl"> <#include "head.ftl">
</head> </head>
<body class="${bodyClasses!}"> <body class="${bodyClasses!}" onload="${bodyOnload!}">
<#include "identity.ftl"> <#include "identity.ftl">
<#include "menu.ftl"> <#include "menu.ftl">
<#-- VIVO OpenSocial Extension by UCSF -->
<#if openSocial??>
<#if openSocial.visible>
<div id="gadgets-tools" class="gadgets-gadget-parent"></div>
</#if>
</#if>
${body} ${body}
<#include "footer.ftl"> <#include "footer.ftl">