Skip to content
Commits on Source (7)
......@@ -13,8 +13,7 @@ blat_config.xml
*.iws
out
web-app/jbrowse
jbrowse-github
jbrowse-download
jbrowse
log4j2.json
log4j2-test.json
tmp
......@@ -37,3 +36,6 @@ restapi.doc
package-lock.json
jb_run.js
jb_setup.js
.DS_Store
yarn.lock
bin
......@@ -10,18 +10,17 @@
"browser": true,
"dojo": true,
"evil": true, // allow eval
"esversion": 6,
"laxbreak": true,
"laxcomma": true,
"loopfunc": true,
"funcscope": true,
"maxlen": 10000,
"indent": 4,
"shadow": true,
"maxerr": 250,
"sub": true,
"predef": [ "require", "define", "SockJS", "Stomp", "bbop", "amigo" ],
"maxcomplexity": 40,
"indent": 2,
"undef": true,
"trailing": true,
"devel": true
......
sudo: required
dist: trusty
group: deprecated
language: groovy
language: java
node_js:
- "iojs"
......@@ -18,7 +18,6 @@ addons:
- mysql-server-5.6
- mysql-client-core-5.6
- mysql-client-5.6
- oracle-java8-installer
services:
- postgresql
......@@ -30,6 +29,7 @@ before_install:
before_script:
- node -v
- npm -v
- npm install -g yarn
- "echo $JAVA_OPTS"
- "export JAVA_OPTS='-Xmx2048m'"
- "echo $JAVA_OPTS"
......@@ -49,8 +49,8 @@ cache:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
script:
- travis_wait ./gradlew handleJBrowse copy-resources gwtc && ./grailsw refresh-dependencies --stacktrace && ./grailsw test-app -coverage -xml --stacktrace
- node web-app/jbrowse/src/dojo/dojo.js load=build --require "web-app/jbrowse/src/JBrowse/init.js" --profile "web-app/jbrowse/plugins/WebApollo/js/WebApollo"
- travis_wait ./gradlew installJBrowseWebOnly gwtc installJBrowseTools && ./grailsw refresh-dependencies --stacktrace && ./grailsw test-app -coverage -xml --stacktrace
#- node web-app/jbrowse/src/dojo/dojo.js load=build --require "web-app/jbrowse/src/JBrowse/init.js" --profile "web-app/jbrowse/plugins/WebApollo/js/WebApollo"
- jshint client/apollo/js
after_success:
- ./grailsw coveralls
......
## 2.3.1
Bug Fixes
- Fixed issue when dragging features to resize was not providing an indicator box [1988](https://github.com/GMOD/Apollo/pull/1988)
- Fixed issue when sequence alterations were not rendering the full height of the sequence track [2049](https://github.com/GMOD/Apollo/pull/2049)
- Making organisms obsolete should remove associated permissions [2043](https://github.com/GMOD/Apollo/pull/2043)
- User-created features taken from split reads should create features with introns [2036](https://github.com/GMOD/Apollo/pull/2036)
- Should indicate split reads properly in evidence [2034](https://github.com/GMOD/Apollo/pull/2034)[2054](https://github.com/GMOD/Apollo/pull/2054)
- Temporary files not removed during export of GFF3 or other file types [1966](https://github.com/GMOD/Apollo/pull/1966)
- Fixed issue where you could not alter an isoform after deleting a gene name [1961](https://github.com/GMOD/Apollo/pull/1961)
- Fixed some minor issues associated with sequence alterations [1497](https://github.com/GMOD/Apollo/pull/1497)
- Multiple owners tagged on GFF3 export [29](https://github.com/GMOD/Apollo/pull/29)
- Setting gene description puts UcA into a bad state [2056](https://github.com/GMOD/Apollo/issues/2056)
- Fixes plugin inclusion error by reverting prior fix [2055](https://github.com/GMOD/Apollo/issues/2055)
Minor Features
- Allowed duplication of organism from the Organism Panel [1968](https://github.com/GMOD/Apollo/pull/1968)
- Allows making an organism obsolete [1967](https://github.com/GMOD/Apollo/pull/1967)
- Create a filter and flag for inactive users [1937](https://github.com/GMOD/Apollo/pull/1937)
- Allowed deletion of feature from the Sequence and Annotator Panels [2040](https://github.com/GMOD/Apollo/pull/2040)
- Allow export of orig_id as an optional attribute [2002](https://github.com/GMOD/Apollo/pull/2002)
## 2.3.0
Features
- Moved to JBrowse 1.16.2 by default [1988](https://github.com/GMOD/Apollo/pull/1988), which also fixed track styling issues [#1942](https://github.com/GMOD/Apollo/pull/1942)
- Moved to Neat Features as the default [2021](https://github.com/GMOD/Apollo/pull/2021)
- Improved terminator annoation [1997](https://github.com/GMOD/Apollo/pull/1997)
Bug Fixes
- JBrowse bin directory not properly being installed [2017](https://github.com/GMOD/Apollo/pull/2017)
- Workaround for declaring plugins in trackList.json via a JBrowse bug [2014](https://github.com/GMOD/Apollo/pull/2014)
- Fixed problems with creating variant annotations with soft masking [2009](https://github.com/GMOD/Apollo/pull/2009)
- Fixed bugs in reporting code [2008](https://github.com/GMOD/Apollo/pull/2008)
- Fixed several build bugs #1996, #1994, #1993
- Fixed bug where deletions, insertions, and substitutions were not editable in the side-bpanel [#1923](https://github.com/GMOD/Apollo/pull/2008)
## 2.2.0
Features
- Move to JBrowse 1.15 and webpack (smaller file size) [1928](https://github.com/GMOD/Apollo/pull/1928),[1986](https://github.com/GMOD/Apollo/pull/1986)
- Add ability to annotate terminators [1954](https://github.com/GMOD/Apollo/issues/1954)
- Added a script for removing all features from a sequence [1935](https://github.com/GMOD/Apollo/pull/1935)
- Allowed removal of ALL user permissions (instead of deleting) to inactivate [777](https://github.com/GMOD/Apollo/issues/777)
- Clarified edge-detection [9](https://github.com/GMOD/Apollo/issues/9)
Bug Fixes
- Fixed bug where showing annotations by users was lost [1952](https://github.com/GMOD/Apollo/issues/1952)
- Fixed by where lowercase reference sequence does not translate correctly in 'Get Sequence' output [1944](https://github.com/GMOD/Apollo/issues/1944)
- Fixed problem where removing an available status type caused an error [1909](https://github.com/GMOD/Apollo/issues/1909)
- Fixed bug where a logged-in link location was ignored when passed in by copying the logged in URL [1982](https://github.com/GMOD/Apollo/issues/1982)
- Fixed bug where insertion and deletion details did not come up in the Annotator Panel when clicked [1984](https://github.com/GMOD/Apollo/issues/1984)
## 2.1.0
Features
- Added ability to annotate a variant from VCF evidence tracks [1892](https://github.com/GMOD/Apollo/pull/1892)
- Allow forced assignment of transcript to a gene [#1851](https://github.com/GMOD/Apollo/pull/1851)
- Added proper Instructor and Organism Admin permission level [#1178](https://github.com/GMOD/Apollo/issues/1178)
- Indicate start / stop codons with color [#1852](https://github.com/GMOD/Apollo/pull/1852)
- Set the default biotype on track [#1861](https://github.com/GMOD/Apollo/issues/1861)
- Focus annotator panel on the current transcript [#1846](https://github.com/GMOD/Apollo/issues/1846)
- Allow fetching variant data from evidence tracks via web service [#1867](https://github.com/GMOD/Apollo/pull/1867)
- Recognized dot notation from JBrowse / Apollo [#1839](https://github.com/GMOD/Apollo/issues/1839)
- Allow setting default native track to true [#1848](https://github.com/GMOD/Apollo/pull/1848)
- Provide [sample data](https://github.com/GMOD/Apollo/blob/master/docs/Apollo2Build.md#adding-sample-data) (and links in doc)[#1817](https://github.com/GMOD/Apollo/pull/1817)
Bug Fixes
- Fixed descriptor leak when loading bulk loading GFF3 [#1187](https://github.com/GMOD/Apollo/pull/1887)
- Fixed adding ability to create sequence alterations of uneven length [#1883](https://github.com/GMOD/Apollo/issues/1883)
- Fixed problem where canonical splice-sites were not recognized if sequence was being shown in lower-case [#1879](https://github.com/GMOD/Apollo/issues/1879)
- Prevents setting bad translation starts and ends [#1838](https://github.com/GMOD/Apollo/issues/1838)
- Improved performance of cache deletion code [#1824](https://github.com/GMOD/Apollo/pull/1824)
- Allow more special characters in the password [#1859](https://github.com/GMOD/Apollo/issues/1859)
- Fixed bug with 'Update Membership' and 'Update Group Admin' call in web services [#1891](https://github.com/GMOD/Apollo/issues/1891)
- Fixed bug with 'Update Organism Permission' call in web services [#1885](https://github.com/GMOD/Apollo/issues/1885)
- In some cases when the name store is not properly configured, the location is not remembered [#1895](https://github.com/GMOD/Apollo/issues/1895)
## 2.0.8
......@@ -7,8 +100,9 @@ Features
- Added the ability to annotate from high performance [Alignments2](http://gmod.org/wiki/JBrowse_Configuration_Guide#Alignments2) BAM reads [#1789](https://github.com/GMOD/Apollo/pull/1789)
- Added support for indexed FASTA to be used as reference sequence. [#1791](https://github.com/GMOD/Apollo/pull/1791)
- Added sequence API [#1799](https://github.com/GMOD/Apollo/pull/1799)
- Added ability to remove gridlines from the view menu in both light and dark themes [#1547](https://github.com/GMOD/Apollo/pull/1547)
Bugfixes
Bug Fixes
- Fixed bug when flipping strand fails to flip the strand of the owning gene [#1769](https://github.com/GMOD/Apollo/issues/1769)
- Fixes to track services to allow remote jbrowse tracks and jsonz [#1767](https://github.com/GMOD/Apollo/issues/1767)
......@@ -44,7 +138,7 @@ Features
- Removal of bower in favor of npm to install JBrowse. [#1691](https://github.com/GMOD/Apollo/pull/1691)
- Added documentation for a Web Service wrapper for Python, PHP, etc. See [Web Services API documentation](http://genomearchitect.readthedocs.io/en/latest/Web_services.html).
Bugfixes
Bug Fixes
- Fixed bug in which ```add_transcripts_from_gff3_to_annotations.pl``` replaced valid mRNA name with gene name. [#1475](https://github.com/GMOD/Apollo/issues/1475)
- Fixed bug in which ```REMOTE_USER``` was not cached everywhere and was being ignored on ping request. [#1492](https://github.com/GMOD/Apollo/pull/1492)
......@@ -71,7 +165,7 @@ Features
+ Add new 'default_group' param for remote_user auth #1445
+ Added icon to toggle view of native JBrowse tracks that is always visible #1452
Bugfixes
Bug Fixes
+ Failure to load tracks when switching organisms with identical Sequence IDs #1391
+ Unable to add organism from script without a pre-existing organism #1388
......@@ -118,7 +212,7 @@ Features
+ Bumped default JBrowse version
Bugfixes
Bug Fixes
+ Web-service method 'getUserPermissionsForUser' #1230
+ UI glitch with more than ten groups #1242
......@@ -163,7 +257,7 @@ Features
+ Added [documentation for using Apollo with Docker](https://github.com/GMOD/Apollo/blob/master/docs/Setup.md#configure-for-docker) (#1016)
Bugfixes
Bug Fixes
+ Fixed multiple errors in the add_transcript_from_gff3_to_annotations.pl loading script (#1146)
+ Expired sessions or server disconnection triggers reconnection instead of a silent failure (#493)
......@@ -201,7 +295,7 @@ Features
+ Added ability to allow username to be a non-email based name (#939).
+ Sync with JBrowse 1.12.2-apollo for stability (#971).
Bugfixes
Bug Fixes
+ Fixed a bug were set translation start, in an intron, produces an uncaught out of bounds exception (#532).
+ Remove alternate hover CSS on tables in Annotator Panel for better visibility of entries (#632).
......@@ -244,7 +338,7 @@ Features
+ Improved the speed of FASTA export via optimization (#854).
+ Updated history window to indicate current position (#797).
Bugfixes
Bug Fixes
+ Fixed a bug where sequence modifications weren't being included in the GFF3 export (#748).
+ Provide alternate translation table support on the client (#759).
......@@ -288,7 +382,7 @@ Features
+ Added ability to reference the organism by name in the jbrowse URL for easier to remember URL formats (#653).
+ Added a get_fasta.groovy script to fetch FASTA for annotations via web services.
Bugfixes
Bug Fixes
+ Fixed the permissions to only allow the global admin role to create and delete organisms (#542).
+ Fixed an issue with JBrowse compatibility for certain refSeqs.json files not containing length.
......@@ -304,14 +398,14 @@ Bugfixes
## 2.0.0
Bugfixes
Bug Fixes
+ Organism panel not showing all organisms (#540).
+ Admins for specific organisms have issues with giving other users permissions (#542).
## 2.0.0-RC6
Bugfixes
Bug Fixes
+ Fixed multiple bugs having to do with sequence alterations (#534, #531, #458, #456).
+ Fixed logout for multiple windows on the same browser (#480).
......@@ -324,7 +418,7 @@ Features
+ Optimized transcript merging (#529,#515).
Bugfixes
Bug Fixes
+ History operations fail when setting acceptor / donor (#530).
......@@ -336,7 +430,7 @@ Features
+ Add an interim export panel (#78).
+ Added google analytics integration (#146).
Bugfixes
Bug Fixes
+ User's last location isn't preserved on page on page refresh (#522).
+ Added security to report pages (#513).
......@@ -361,7 +455,7 @@ Features
+ Add compression to gzip / fasta (#252).
+ Add stress testing frameworks (#137).
Bugfixes
Bug Fixes
+ Fixed bug that prevented deleting of certain isoforms after database optimizations were applied in RC2 (#497).
+ Moving to opposite strand was not recalculating the ORF (#468).
......@@ -387,7 +481,7 @@ Features
+ Added gzip functionality to data downloads (#252).
+ Added command line exporter for GFF3.
Bugfixes
Bug Fixes
+ Fixed small bug with permission checking on creating new organism permissions (#463).
+ Fixed bug with stop codons being retained in peptide sequence exports (#448).
......@@ -414,7 +508,7 @@ Features
+ Updated undo/redo operations to work in WA2.0 and fixed several issues with undoing merged transcript operations (#356).
Bugfixes
Bug Fixes
+ Fixed several bugs with sequence alternations (#442, #447, 428, #420).
+ Fixed bug with in-frame stop codons not being identified after manually setting translation start (#55).
......@@ -436,7 +530,7 @@ Features
+ Changed maxHeight on "User-created Annotations" track to prevent overflow (#124).
+ Allow single-level features to be dragged to the "User-created Annotations" track for editing (#193).
Bugfixes
Bug Fixes
+ Updated URL to new server to access Gene Ontology terms (GOLR) (#190).
+ Fixed an issue where the API could be used to create random berkeley DBs (#152).
......@@ -466,7 +560,7 @@ Features
+ Added ability to view GFF3 for individual annotations
Bugfixes
Bug Fixes
+ Speed up set\_track\_permissions.pl (#118)
+ Fix some cases where error reporting was broken on login pages (#111)
......@@ -506,7 +600,7 @@ Features:
+ Added command line exporters for GFF3 files.
+ Added light / dark color schemes.
Bugfixes:
Bug Fixes:
+ Fixed phase in GFF3 output
+ Disabled scrollToPreviousEdge/scrollToNextEdge if the feature is fully visible at the current zoom level
......@@ -538,7 +632,7 @@ Features:
+ Can now directly set an annotation to a specific state from the history display
+ Added / updated filters for changes and sequences to be more memory efficient and added added filters.
Bugfixes:
Bug Fixes:
+ Fixed bug of not applying timestamp to temporary BLAT searches (also now requires unique token to guarantee uniqueness)
+ Fixed building of feature_relationship pointers in hybrid data store
......
-------
Copyright (c) 2015, Regents of the University of California.
All rights reserved.
Note: This license has also been called the "New BSD License" or "Modified BSD License". See also the 2-clause BSD License.
Copyright 2018, Regents of the University of California.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Neither the name of the Lawrence Berkeley National Lab nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Apollo
[![DOI](https://zenodo.org/badge/13471446.svg)](https://zenodo.org/badge/latestdoi/13471446)
![Build](https://travis-ci.org/GMOD/Apollo.svg?branch=master)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2254462.svg)](https://doi.org/10.5281/zenodo.2254462)
[![Build](https://travis-ci.org/GMOD/Apollo.svg?branch=master)](https://travis-ci.org/GMOD/Apollo?branch=master)
[![Coverage](https://coveralls.io/repos/github/GMOD/Apollo/badge.svg?branch=master)](https://coveralls.io/github/GMOD/Apollo?branch=master)
[![Documentation](https://readthedocs.org/projects/genomearchitect/badge/?version=latest)](https://genomearchitect.readthedocs.org/en/latest/)
[![Chat at Gitter](https://badges.gitter.im/GMOD/Apollo.svg)](https://gitter.im/GMOD/Apollo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)
### [![](https://github.com/GMOD/Apollo/blob/master/docs/images/download_small.png) Download the latest release](https://github.com/GMOD/Apollo/releases/latest)
An instantaneous, collaborative, genome annotation editor. The stack is a Java web application / database backend and a
A collaborative, real-time, genome annotation editor. The stack is a Java web application / database backend and a
Javascript client that runs in a web browser as a JBrowse plugin.
For general information on Apollo, go to [http://genomearchitect.org/](http://genomearchitect.org/).
For general information on Apollo, go to [http://genomearchitect.org/](http://genomearchitect.org/). Cite Apollo using [10.1371/journal.pcbi.1006790](https://doi.org/10.1371/journal.pcbi.1006790)
Questions / Comments / Community contact can be sent to our [Apollo user mailing list](mailto:apollo@lists.lbl.gov). To subscribe send [this email to our mail server](mailto:sympa@lists.lbl.gov?subject=subscribe apollo) or review additional [sympa commands](http://www.sympa.org/manual/sympa-commands). Old questions are [archived on Nabble](http://gmod.827538.n3.nabble.com/Apollo-f815553.html).
Complete Apollo installation and configuration instructions are available from the [Apollo documentation pages](http://genomearchitect.readthedocs.io/en/latest/)
The Apollo client is implemented as a plugin for [JBrowse](http://jbrowse.org). Additional JBrowse plugins may be found in the [JBrowse registry](https://gmod.github.io/jbrowse-registry/) and configured in ```apollo-config.groovy```.
[Planning Board](https://waffle.io/GMOD/Apollo)
## Setup guide
[Setup guide](docs/Setup.md) for deploying on production and [custom configuration guide](docs/Configure.md).
Launchable public Amazon EC2 images may also be found in most regions under the name 'Apollo' as well as [instructions for docker](docs/Setup.md#configure-for-docker).
We provide a [Setup guide](docs/Setup.md) for deploying a [configuring](docs/Configure.md) a production instance.
Launchable public Amazon Web Services (AWS) EC2 images may be [launched from Community AMIs in the N. Virginia region under 'Apollo'](docs/images/EC2Image.png).
Launch settings should be 2 vCPU, 8 GB recommended, 80 GB storage depending on the size of your data, and ports 22 and 8080 open at a minimum.
The server will be available at <http://aws.public.ip:8080/apollo/>. Binaries with be in the `apollo/bin` directory though it should be in the path.
Apollo may be launched from [Docker](docs/Setup.md#configure-for-docker) as well.
The [quick-start guide for developers](docs/Apollo2Build.md) shows how to easily get started with Apollo.
......@@ -31,8 +43,8 @@ You can follow steps in our [migration guide](https://github.com/GMOD/Apollo/blo
### Note about data directories
Apollo 2.0 allows you to add multiple data directories to your webapp, and it expects the data directories to be stored
outside of the tomcat webapps directory. Use the WA2.0 [quick-start guide](docs/Apollo2Build.md) to learn how to add new
Apollo 2.X allows you to add multiple data directories to your webapp, and it expects the data directories to be stored
outside of the tomcat webapps directory. Use the [quick-start guide](docs/Apollo2Build.md) to learn how to add new
data directories for your organisms.
......@@ -71,4 +83,8 @@ http://www.jetbrains.com/idea/index.html)
[![YourKit](https://www.yourkit.com/images/yklogo.png)](https://www.yourkit.com/)
Thanks to YourKit for providing us the use of their YourKit Java Profiler. YourKit supports Open Source.
Thanks to YourKit for providing us the use of their YourKit Java Profiler. YourKit provides great supports for Open Source Projects.
[![Waffle.io - Columns and their card count](https://badge.waffle.io/GMOD/Apollo.svg?columns=all)](https://waffle.io/GMOD/Apollo)
......@@ -6,16 +6,17 @@ function usage(){
echo "";
echo "Production Commands:";
echo "";
echo "deploy: Builds Unoptimized war file (no processing of javascript) into the target directory.";
echo "release: Builds in release mode (minimized javascript). (beta)";
echo "deploy: Builds war file (no processing of javascript) into the target directory.";
echo "jbrowse-tools: Installs JBrowse tools in the ./bin directory if not preset."
echo "run-local <port>: Runs from current directory, but not in dev-mode. ";
echo "help: This message.";
echo "";
echo "Development Commands:";
echo "devmode: Runs from current directory debug mode (non-minimized javascript).";
echo "jbrowse: Installs updated client/apollo files and JBrowse for the web.";
echo "run-app <port>: Runs from current directory, but does not compile annotator panel (you have to run run-local once first).";
echo "test: Runs test-suite.";
echo "debug: Runs from current directory in debug mode (non-minimized javascript).";
echo "debug: Runs from cuurent directory in debug mode (non-minimized javascript).";
echo "watchman: Creates watchman daemon to autocopy plugin files (non-minimized javascript).";
echo "compile: Compiled the build.";
echo "clean: Removes class files.";
......@@ -93,6 +94,22 @@ function check_node(){
echo "npm version 3 or better must be installed. Please install an updated version of node.js by following the instructions appropriate for your system https://nodejs.org/en/download/package-manager/";
exit 1
fi
yarn_executable=$(which yarn)
if ! [ -x "$yarn_executable" ] ; then
yarnjs_executable=$(which yarnjs)
echo "You must install 'yarn ' to build Apollo."
exit 1 ;
fi
YARN_VERSION=`$yarn_executable --version | cut -d\. -f1`
echo "Yarn Version: $YARN_VERSION"
if [[ -n $YARN_VERSION && $YARN_VERSION -lt 1 ]]; then
echo "yarn version 1 or better must be installed. npm i -g yarn"
exit 1
fi
}
......@@ -113,13 +130,24 @@ function check_configs_for_release(){
check_perldependencies
}
function use_gradlew(){
if [ -f 'gradlew' ]; then
echo "Using gradlew";
: "${JAVA_HOME?:Need to set JAVA_HOME}"
gradle_executable="./gradlew"
echo "Gradle version: `$gradle_executable -v | grep Gradle | cut -f2 -d' ' `";
else
echo "You must install 'gradle' to install Apollo."
exit 1 ;
fi
}
function check_configs(){
grails_executable=$(which grails)
gradle_executable=$(which gradle)
git_executable=$(which git)
if ! [ -x "$grails_executable" ] ; then
if [ -f 'grailsw' ]; then
if ! [[ -x "$grails_executable" ]] ; then
if [[ -f 'grailsw' ]]; then
echo "Grails not found using grailsw";
: "${JAVA_HOME?:Need to set JAVA_HOME}"
grails_executable="./grailsw"
......@@ -128,17 +156,21 @@ function check_configs(){
exit 1 ;
fi
fi
if ! [ -x "$gradle_executable" ] ; then
if [ -f 'gradlew' ]; then
echo "Gradle not found using gradlew";
: "${JAVA_HOME?:Need to set JAVA_HOME}"
gradle_executable="./gradlew"
if ! [[ -x "$gradle_executable" ]] ; then
use_gradlew
else
echo "You must install 'gradle' to install Apollo."
exit 1 ;
GRADLE_MAJOR_VERSION=`$gradle_executable -v | grep Gradle | cut -f2 -d' ' | cut -f1 -d.`;
echo "Gradle version: ${GRADLE_MAJOR_VERSION}"
if [[ $GRADLE_MAJOR_VERSION -gt 3 || $GRADLE_MAJOR_VERSION -lt 2 ]];then
echo "Gradle version ${GRADLE_MAJOR_VERSION} not supported. ONly 2 or 3 supported so using local ./gradlew instead"
use_gradlew
else
echo "Using system gradle `$gradle_executable -v | grep Gradle | cut -f2 -d' '`";
fi
fi
if ! [ -x "$git_executable" ] ; then
if ! [[ -x "$git_executable" ]] ; then
echo "You must install 'git' to install Apollo."
exit 1 ;
fi
......@@ -160,37 +192,60 @@ function clean_code(){
function clean_all(){
check_configs
rm -rf bin
rm -rf jbrowse-download
rm -rf JBrowse-dev
rm -rf jbrowse
rm -rf web-app/jbrowse
rm -rf extlib
rm -rf node_modules
rm -rf client/apollo/node_modules
rm -rf package-lock.json
rm -f *.zip
rm -f *.tar.gz
clean_code
}
function link_jbrowse_tools(){
rm -rf bin
ln -s jbrowse/bin bin
EXTLIB=$(pwd)/extlib
./bin/cpanm --local-lib=${EXTLIB} Bio::GFF3::LowLevel::Parser CGI Devel::Size Digest::Crc32 JSON File::Next Hash::Merge PerlIO::gzip Heap::Simple Heap::Simple::Perl
./bin/cpanm --local-lib=${EXTLIB} --notest Heap::Simple::XS
echo "********************************************************************";
echo "JBrowse Tools installed in './bin'";
echo "Perl dependencies in ${EXTLIB}; add to PERL5LIB thusly:";
echo " export PERL5LIB=${EXTLIB}/lib/perl5:\$PERL5LIB";
echo "********************************************************************";
unset EXTLIB
}
if [[ $1 == "devmode" ]];then
check_configs
$gradle_executable handleJBrowse copyResourcesDev devmode &
$gradle_executable installJBrowseWebOnly devmode &
$grails_executable -reloading run-app
elif [[ $1 == "jbrowse-tools" ]];then
check_configs
$gradle_executable installJBrowseWebOnly && link_jbrowse_tools
elif [[ $1 == "run-local" ]];then
check_configs
if [[ $# == 2 ]]; then
$gradle_executable handleJBrowse copy-resources copyResourcesDev gwtc && $grails_executable -Dserver.port=$2 run-app
$gradle_executable installJBrowseWebOnly gwtc && $grails_executable -Dserver.port=$2 run-app
else
$gradle_executable handleJBrowse copy-resources copyResourcesDev gwtc && $grails_executable run-app
$gradle_executable installJBrowseWebOnly gwtc && $grails_executable run-app
fi
elif [[ $1 == "watchman" ]]; then
watchman_executable=$(which watchman)
if ! [ -x "$watchman_executable" ] ; then
echo "Watchman not found. Install watchman to automatically update the client side plugins for apollo development modes"
fi
if [ -x "$watchman_executable" ]; then $watchman_executable -- trigger $(PWD) jsfilescopy 'client/apollo/**/*.js' -- scripts/copy_client.sh; fi;
if [ -x "$watchman_executable" ]; then
$watchman_executable -- trigger $(PWD) jsfilescopy 'client/apollo/**/*.*s' -- scripts/copy_client.sh;
fi;
elif [[ $1 == "run-app" ]];then
check_configs
if [[ $# == 2 ]]; then
$gradle_executable handleJBrowse copyResourcesDev && $grails_executable -Dserver.port=$2 run-app
# $gradle_executable handleJBrowse copyResourcesDev compileJBrowse && $grails_executable -Dserver.port=$2 run-app
$gradle_executable installJBrowseWebOnly && $grails_executable -Dserver.port=$2 run-app
else
$gradle_executable handleJBrowse copyResourcesDev && $grails_executable run-app
$gradle_executable installJBrowseWebOnly && $grails_executable run-app
fi
elif [[ $1 == "debug" ]];then
# TODO: feel like there is a better way to do this
......@@ -199,31 +254,24 @@ elif [[ $1 == "debug" ]];then
copy_configs
clean_all
export MAVEN_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n
$gradle_executable handleJBrowse devmode &
$gradle_executable installJBrowseWebOnly devmode &
$grails_executable -reloading debug
export MAVEN_OPTS=$OLD_MAVEN_OPTS
unset OLD_MAVEN_OPTS
elif [[ $1 == "test" ]];then
check_configs
copy_configs
$gradle_executable handleJBrowse
$gradle_executable installJBrowseWebOnly
check_rest_api
$grails_executable test-app
elif [[ $1 == "test-unit" ]];then
check_configs
copy_configs
$grails_executable handleJBrowse test-app :unit
$grails_executable installJBrowseWebOnly test-app :unit
elif [[ $1 == "deploy" ]];then
check_configs
copy_configs
$gradle_executable handleJBrowse copy-resources gwtc && $grails_executable war
deploy_message
elif [[ $1 == "release" ]];then
check_configs
check_configs_for_release
copy_configs
clean_all
$gradle_executable handleJBrowse release gwtc && $grails_executable war
$gradle_executable installJBrowseWebOnly gwtc && $grails_executable war && link_jbrowse_tools
deploy_message
elif [[ $1 == "compile" ]];then
check_configs
......@@ -238,7 +286,7 @@ elif [[ $1 == "clean" ]];then
$gradle_executable clean && $grails_executable clean
elif [[ $1 == "jbrowse" ]];then
check_configs
$gradle_executable handleJBrowse
$gradle_executable installJBrowseWebOnly
else
usage
fi
......@@ -3,4 +3,4 @@
app.grails.version=2.5.5
app.name=apollo
app.servlet.version=3.0
app.version=2.0.8
app.version=2.3.1
......@@ -9,6 +9,7 @@ import org.apache.tools.ant.taskdefs.condition.Os
* user guide available at https://docs.gradle.org/2.11/userguide/tutorial_java_projects.html
*/
buildscript {
repositories {
mavenCentral()
......@@ -18,8 +19,6 @@ buildscript {
}
plugins {
// id "com.eriwen.gradle.js" version "1.12.1"
// id "com.moowork.node" version "0.12"
}
// In this section you declare where to find the dependencies of your project
......@@ -34,8 +33,8 @@ ext {
npmCommand = Os.isFamily(Os.FAMILY_WINDOWS) ? 'npm.cmd' : 'npm'
githubURL = "https://github.com/"
nodeModulesDirectory = "node_modules"
jbrowseDirectory = "jbrowse-download"
pluginsDirectory = "jbrowse-download/plugins"
jbrowseDirectory = "jbrowse"
pluginsDirectory = "jbrowse/plugins"
defaultGitMethod = "shell"
}
......@@ -47,18 +46,9 @@ apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'eclipse'
apply plugin: 'idea'
//apply plugin: "de.qaware.seu.as.code.git"
// In this section you declare the dependencies for your production and test code
dependencies {
// The production code uses the SLF4J logging API at compile time
// compile 'org.slf4j:slf4j-api:1.7.14'
// Declare the dependency for your favourite test framework you want to use in your tests.
// TestNG is also supported by the Gradle Test task. Just change the
// testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
// 'test.useTestNG()' to your build script.
// testCompile 'junit:junit:4.12'
}
def jbrowseConfig
......@@ -92,25 +82,33 @@ task evaluateJBrowseConfigs {
logger.quiet "Final plugins ${jbrowsePlugins}"
}
task installJBrowse(dependsOn: evaluateJBrowseConfigs) << {
logger.quiet "Installing JBrowse ${jbrowseConfig}"
File jbrowseFile = new File("jbrowse-download")
task cloneRepo3(dependsOn: evaluateJBrowseConfigs) {
doLast {
println "installing $jbrowseConfig"
File jbrowseFile = new File("jbrowse")
if (jbrowseConfig.git) {
def git = jbrowseConfig.git
if (jbrowseFile.exists()) {
if ((git.alwaysRecheck || git.alwaysPull)) {
tasks.refreshNpmRepo.execute()
if (!git.hash) {
String branchName = (git.branch ?: git.tag) ?: "dev"
exec {
workingDir 'jbrowse'
commandLine 'git', 'pull', 'origin', branchName
}
}
}
} else {
logger.quiet "Cloning: ${git.url} into ${"jbrowse-download"}"
def branch = git.branch ?: (git.tag ? "tags/${git.tag}" : null)
// NOTE: this is possible, but user may have to explicitly force the checkout
// cloneRepo(git.url, "jbrowse-download", branch, 1)
cloneRepoNpm(git.url, "jbrowse-download", branch)
// always default to dev if nothing found
String branchName = (git.branch ?: git.tag) ?: "dev"
println "branchName ${branchName}"
exec {
commandLine = ['git', 'clone', git.url,'--branch', branchName, '--single-branch']
}
}
} else if (jbrowseConfig.url && !jbrowseFile.exists()) {
if (jbrowseConfig.url.type == "zip") {
// assume its a zip
def f = new File("jbrowse-directory" + ".zip")
......@@ -128,35 +126,33 @@ task installJBrowse(dependsOn: evaluateJBrowseConfigs) << {
}
}
}
task installJBrowseLocal(dependsOn: installJBrowse,type: Exec) {
workingDir = '.'
commandLine './install_jbrowse.sh'
}
task copyResourcesDev(dependsOn: installJBrowse) << {
//task copyResourcesDev(dependsOn: installJBrowse) {
task copyResourcesDev() {
doLast {
File jbrowse = new File("web-app/jbrowse")
logger.quiet "Found JBrowse directory ${jbrowse.file}"
if (jbrowse.exists()) {
tasks["copy-resources-dev"].execute()
}
else{
} else {
tasks["copy-resources"].execute()
}
installJBrowseLocal.execute()
// installJBrowseLocal.execute()
}
}
task copyApolloPlugin(dependsOn:installJBrowse,type:Copy){
// task copyApolloPlugin(dependsOn: installJBrowse, type: Copy) {
task copyApolloPlugin(type: Copy) {
doLast{
logger.quiet "Copying apollo plugin"
from("client/apollo")
into("jbrowse-download/plugins/WebApollo")
into("jbrowse/plugins/WebApollo")
}
}
// wrapper for ant script
task setupJBrowse(dependsOn: "setup-jbrowse") << {}
task installJBrowsePlugins(dependsOn: copyApolloPlugin) << {
task installJBrowsePlugins2 {
doLast {
logger.quiet "Installing JBrowse plugins ${jbrowsePlugins}"
for (plugin in jbrowsePlugins) {
......@@ -170,15 +166,13 @@ task installJBrowsePlugins(dependsOn: copyApolloPlugin) << {
logger.error "Error: There is a problem with the plugin at ${path}!"
throw new GradleException("Included plugin ${path} not found in build")
}
}
else if (plugin.value.included==false) {
} else if (plugin.value.included == false) {
if (pluginExists) {
logger.quiet "Plugin ${path} exists but is not included."
} else {
logger.quiet "Plugin ${path} does not exist but is also not included."
}
}
else if (plugin.value.git) {
} else if (plugin.value.git) {
logger.quiet "Plugin is supplied by git"
if (pluginExists) {
logger.quiet "Plugin ${path} exists and appears valid."
......@@ -218,35 +212,8 @@ task installJBrowsePlugins(dependsOn: copyApolloPlugin) << {
}
}
}
// wrapper for ant script
task buildJBrowse(dependsOn: 'build.jbrowse'){}
// TODO: should inherent handleJBrowse
task handleJBrowseRelease(dependsOn: [copyApolloPlugin]) {
logger.quiet "Handling JBrowse release ${jbrowseConfig}"
doLast {
installJBrowsePlugins
setupJBrowse
copyResourcesDev
buildJBrowse
installJBrowseLocal
}
}
// root task
task handleJBrowse(dependsOn: [installJBrowsePlugins]) {
logger.quiet "Handling JBrowse ${jbrowseConfig}"
doLast {
setupJBrowse
copyResourcesDev
installJBrowseLocal
}
}
def confirmPlugin(String path) {
File file = new File(path)
......@@ -281,13 +248,11 @@ def cloneRepoShell(String url, String directory, String branch, Integer depth) {
if (!branch) {
branch = "master"
}
else
if (branch.startsWith("tags")) {
} else if (branch.startsWith("tags")) {
fetchTags(new File(directory))
}
checkoutBranch(new File(directory), branch)
tasks.installJBrowseScript.execute()
// tasks.installJBrowseScript.execute()
}
def cloneRepoNpm(String url, String directory, String branch) {
......@@ -297,22 +262,24 @@ def cloneRepoNpm(String url, String directory, String branch){
if (finalUrl.startsWith(githubURL)) {
finalUrl = finalUrl.substring(githubURL.length())
logger.quiet "Final github URL: ${finalUrl}"
}
else{
} else {
logger.quiet "Final non-github URL: ${finalUrl}"
}
exec {
logger.quiet "Using npm to install: ${finalUrl}"
commandLine "npm", "install", finalUrl, "--ignore-scripts"
}
println "CURRENT DIRECTORY"
println new File(".").absolutePath
// commandLine "npm","install",finalUrl,"--ignore-scripts"
File npmDirectory = new File('node_modules')
if (finalUrl.contains("#") && (finalUrl.endsWith("jbrowse") || finalUrl.split("#")[0].endsWith("jbrowse"))) {
logger.quiet "Moving JBrowse into position ${finalUrl}"
tasks.moveNodeModulesJBrowse.execute()
tasks.installJBrowseScript.execute()
}
else{
} else {
npmDirectory.eachDir {
File targetFile = new File(directory)
logger.quiet "Moving plugin into place: ${npmDirectory.absolutePath} -> ${targetFile}"
......@@ -326,56 +293,43 @@ def cloneRepoNpm(String url, String directory, String branch){
}
}
task removeJBrowseDownload(type:Delete){
delete(jbrowseDirectory)
}
task moveNodeModulesJBrowse(dependsOn:removeJBrowseDownload) {
task installJBrowseTools() {
doLast {
file("jbrowse-download").deleteDir() // dependency handles this
file("node_modules/jbrowse").renameTo(file("jbrowse-download"))
file("node_modules/*").renameTo(file("jbrowse-download/src"))
file("node_modules").deleteDir()
// file("jbrowse-download/node_modules").deleteDir()
}
}
task installJBrowseScript(type:Exec) {
logger.quiet "Setting up JBrowse... "
workingDir jbrowseDirectory
commandLine './setup.sh'
}
task refreshNpmRepo(type: Exec){
// println "using npm to update: ${directory}"
workingDir jbrowseDirectory
commandLine "npm","update"
}
// Get the path for the locally installed binaries
task npmBin << {
new ByteArrayOutputStream().withStream { os ->
exec {
executable = npmCommand
args = ['bin']
standardOutput = os
workingDir 'jbrowse'
commandLine 'node', './utils/jb_setup.js'
}
ext.binPath = os.toString().trim() + File.separator
}
}
// Install packages from package.json
task npm(type: Exec) {
description = "Grab NodeJS dependencies (from package.json)"
commandLine = [npmCommand, "install"]
inputs.file "package.json"
outputs.dir "node_modules"
tasks.npmBin.execute()
}
// Get the path for the locally installed binaries
//task npmBin {
// doLast {
// new ByteArrayOutputStream().withStream { os ->
// exec {
// executable = npmCommand
// args = ['bin']
// standardOutput = os
// }
// ext.binPath = os.toString().trim() + File.separator
// }
// }
//}
//
//// Install packages from package.json
//task npm(type: Exec) {
// description = "Grab NodeJS dependencies (from package.json)"
// commandLine = [npmCommand, "install"]
// inputs.file "package.json"
// outputs.dir "node_modules"
// tasks.npmBin.execute()
//}
task cleanAll(type: Delete) {
doLast{
delete 'web-app/WEB-INF/deploy', 'web-app/annotator', 'target'
}
}
def fetchTags(File file) {
logger.quiet "Fetching tags"
......@@ -438,3 +392,65 @@ def gitPull(File file) {
if (outputStream.length() > 0) println outputStream
if (errorStream.length() > 0) println "Error: " + errorStream
}
task updateRepo2(dependsOn: evaluateJBrowseConfigs) {
doLast {
def git = jbrowseConfig.git
if (!git.hash) {
String branchName = (git.branch ?: git.tag) ?: "dev"
exec{
workingDir = 'jbrowse'
commandLine = ['git', 'pull', 'origin', branchName]
}
}
}
}
task installJBrowseWebOnly {
doLast {
if (!file('jbrowse').exists()) {
println "Cloning a new JBrowse"
tasks.cloneRepo3.execute()
} else {
println "JBrowse already exists"
tasks.updateRepo2.execute()
}
exec {
workingDir 'jbrowse'
commandLine 'yarn'
}
exec {
workingDir 'jbrowse'
executable 'rm' args '-rf','plugins/WebApollo'
}
exec {
workingDir 'jbrowse'
executable 'cp' args '-r', '../client/apollo', 'plugins/WebApollo'
}
exec {
workingDir 'jbrowse/plugins/WebApollo'
commandLine 'yarn'
}
tasks.installJBrowsePlugins2.execute()
exec {
workingDir 'jbrowse'
commandLine 'npm', 'run', 'build'
}
tasks.copyJBrowseDirectory.execute()
}
}
task copyJBrowseDirectory(type: Copy) {
from('jbrowse') {
exclude "sample_data/**", "node_modules/**", "tests/**"
}
into("web-app/jbrowse/")
}
task cleanJBrowse(type: Delete) {
doLast{
delete 'jbrowse', 'web-app/jbrowse'
}
}
......@@ -47,7 +47,7 @@
</java>
</target>
<target name="devmode" depends="copy-resources,javac"
<target name="devmode" depends="javac"
description="Run development mode (pass -Dgwt.args=-nosuperDevMode to fallback to classic DevMode)">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.DevMode" maxmemory="1g">
<classpath>
......
-------
Copyright (c) 2015, Regents of the University of California.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Neither the name of the Lawrence Berkeley National Lab nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Install this plugin into your JBrowse from npm. `cd jbrowse; npm install @gmod/apollo-jbrowse-plugin`
......@@ -34,6 +34,39 @@
border-color: lightgray;
}
.alt_alleles {
min-width: 100%;
min-height: 7em;
border: solid;
border-width: 1px;
border-color: lightgray;
}
.allele_info {
min-width: 100%;
min-height: 7em;
border: solid;
border-width: 1px;
border-color: lightgray;
}
.variant_info {
min-width: 100%;
min-height: 7em;
border: solid;
border-width: 1px;
border-color: lightgray;
}
.phenotype_ontology_ids {
min-width: 100%;
min-height: 7em;
border: solid;
border-width: 1px;
border-color: lightgray;
}
.attributes {
min-width: 100%;
min-height: 7em;
......@@ -105,7 +138,8 @@
.comments .dojoxGridHeader,
.pubmed_ids .dojoxGridHeader,
.go_ids .dojoxGridHeader {
.go_ids .dojoxGridHeader,
.phenotype_ontology_ids .dojoxGridHeader {
display: none;
}
......
@CHARSET "UTF-8";
.confirm_message {
.jbrowse .confirm_message {
}
.confirm_buttons {
.jbrowse .confirm_buttons {
margin-top: 0.5em;
width: 50%;
margin-left: auto;
margin-right: auto;
}
.confirm_button {
.jbrowse .confirm_button {
width: 5em;
margin: 0.4em;
}
......
.whatever-80pct,
.whatever-blue-80pct,
.whatever-blue-80pct {
.jbrowse .whatever-80pct,
.jbrowse .whatever-blue-80pct,
.jbrowse .whatever-blue-80pct {
background-color: blue;
height: 80%;
top: 10%;
}
.green-80pct,
.plus-green-80pct,
.minus-green-80pct {
.jbrowse .green-80pct,
.jbrowse .plus-green-80pct,
.jbrowse .minus-green-80pct {
background-color: green;
height: 80%;
top: 10%;
}
.blue-80pct,
.plus-blue-80pct,
.minus-blue-80pct {
.jbrowse .blue-80pct,
.jbrowse .plus-blue-80pct,
.jbrowse .minus-blue-80pct {
background-color: blue;
height: 80%;
top: 10%;
}
.purple-80pct,
.plus-purple-80pct,
.minus-purple-80pct {
.jbrowse .purple-80pct,
.jbrowse .plus-purple-80pct,
.jbrowse .minus-purple-80pct {
background-color: purple;
height: 80%;
top: 10%;
}
.springgreen-80pct,
.plus-springgreen-80pct,
.minus-springgreen-80pct {
.jbrowse .springgreen-80pct,
.jbrowse .plus-springgreen-80pct,
.jbrowse .minus-springgreen-80pct {
background-color: springgreen;
height: 80%;
top: 10%;
}
.blueviolet-80pct,
.plus-blueviolet-80pct,
.minus-blueviolet-80pct {
.jbrowse .blueviolet-80pct,
.jbrowse .plus-blueviolet-80pct,
.jbrowse .minus-blueviolet-80pct {
background-color: blueviolet;
height: 80%;
top: 10%;
}
.mediumpurple-80pct,
.plus-mediumpurple-80pct,
.minus-mediumpurple-80pct {
.jbrowse .mediumpurple-80pct,
.jbrowse .plus-mediumpurple-80pct,
.jbrowse .minus-mediumpurple-80pct {
background-color: mediumpurple;
height: 80%;
top: 10%;
}
.orange-80pct,
.plus-orange-80pct,
.minus-orange-80pct {
.jbrowse .orange-80pct,
.jbrowse .plus-orange-80pct,
.jbrowse .minus-orange-80pct {
background-color: rgb(255, 163, 0);
height: 80%;
top: 10%;
border: 1px solid gray;
}
.darkorange-60pct,
.plus-darkorange-60pct,
.minus-darkorange-60pct {
.jbrowse .darkorange-60pct,
.jbrowse .plus-darkorange-60pct,
.jbrowse .minus-darkorange-60pct {
background-color: rgb(214, 172, 121);
height: 60%;
top: 20%;
......
@CHARSET "UTF-8";
.comments {
.jbrowse .comments {
width: 58em;
}
.comment_header {
.jbrowse .comment_header {
font-size: 1.5em;
margin-bottom: 5px;
}
.comment_area {
.jbrowse .comment_area {
width: 40em;
height: 3.5em;
}
.comment_button {
.jbrowse .comment_button {
height: 2.5em;
}
.comment_add_button_div {
.jbrowse .comment_add_button_div {
margin-top: 5px;
}
.parent_comments_div {
.jbrowse .parent_comments_div {
margin-bottom: 10px;
border-bottom-style: dotted;
border-bottom-width: 2px;
......
@CHARSET "UTF-8";
.dbxrefs {
.jbrowse .dbxrefs {
width: 39em;
}
.dbxref_header {
.jbrowse .dbxref_header {
font-size: 1.5em;
margin-bottom: 5px;
}
.dbxref_table_header_field {
.jbrowse .dbxref_table_header_field {
margin-right:5em;
}
.dbxref_field {
.jbrowse .dbxref_field {
margin-right:3px;
margin-top: 0px;
margin-bottom: 0px;
}
.dbxref_button {
.jbrowse .dbxref_button {
}
.dbxref_add_button_div {
.jbrowse .dbxref_add_button_div {
margin-top: 5px;
}
.parent_dbxrefs_div {
.jbrowse .parent_dbxrefs_div {
margin-bottom: 10px;
border-bottom-style: dotted;
border-bottom-width: 2px;
......
@CHARSET "UTF-8";
.export_response {
.jbrowse .export_response {
width: 15em;
text-align: center;
}
.waiting_image {
.jbrowse .waiting_image {
display: block;
margin-left: auto;
margin-right: auto;
}
.export_response_iframe {
.jbrowse .export_response_iframe {
border: none;
text-align: center;
font-size: 12px;
......
......@@ -7,14 +7,14 @@
.gff3_area{
width: 50em;
height: 20em;
font-family: 'courier';
font-family: 'courier', monospace;
font-size: 1.0em;
}
.sequence_area {
width: 60em;
width: 100%;
height: 20em;
font-family: 'courier';
font-family: 'courier', monospace;;
font-size: 1.5em;
}
......