galaxy-commits
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 15302 discussions
commit/galaxy-central: natefoo: Merged in dannon/galaxy-central/stable (pull request #668)
by commits-noreply@bitbucket.org 12 Feb '15
by commits-noreply@bitbucket.org 12 Feb '15
12 Feb '15
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/a6e9a1d72674/
Changeset: a6e9a1d72674
Branch: stable
User: natefoo
Date: 2015-02-12 18:20:29+00:00
Summary: Merged in dannon/galaxy-central/stable (pull request #668)
[STABLE] Egg-fetching related bugfixes grafted from default.
Affected #: 26 files
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 lib/galaxy/eggs/__init__.py
--- a/lib/galaxy/eggs/__init__.py
+++ b/lib/galaxy/eggs/__init__.py
@@ -421,7 +421,7 @@
try:
for info in z.infolist():
name = info.filename
- perm = (info.external_attr >> 16L) & 0777
+ mode = (info.external_attr >> 16L) & 0777
# don't extract absolute paths or ones with .. in them
if name.startswith('/') or '..' in name:
continue
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/check_eggs.py
--- a/scripts/check_eggs.py
+++ b/scripts/check_eggs.py
@@ -37,7 +37,7 @@
config_arg = '-c %s' % config
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs import Crate
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/check_galaxy.py
--- a/scripts/check_galaxy.py
+++ b/scripts/check_galaxy.py
@@ -90,7 +90,7 @@
# find/import twill
lib_dir = os.path.join( scripts_dir, "..", "lib" )
-sys.path.append( lib_dir )
+sys.path.insert( 1, lib_dir )
from galaxy import eggs
import pkg_resources
pkg_resources.require( "twill" )
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/dist-scramble.py
--- a/scripts/dist-scramble.py
+++ b/scripts/dist-scramble.py
@@ -44,7 +44,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs.dist import DistScrambleCrate, ScrambleFailure
from galaxy.eggs import EggNotFetchable
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/fetch_eggs.py
--- a/scripts/fetch_eggs.py
+++ b/scripts/fetch_eggs.py
@@ -32,7 +32,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert(1, lib)
from galaxy.eggs import Crate, EggNotFetchable
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/get_platforms.py
--- a/scripts/get_platforms.py
+++ b/scripts/get_platforms.py
@@ -5,7 +5,7 @@
assert sys.version_info[:2] >= ( 2, 4 )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
import galaxy
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/helper.py
--- a/scripts/helper.py
+++ b/scripts/helper.py
@@ -26,7 +26,7 @@
sys.exit( 1 )
options.config = os.path.abspath( options.config )
-sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/make_egg_packager.py
--- a/scripts/make_egg_packager.py
+++ b/scripts/make_egg_packager.py
@@ -17,7 +17,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs import Crate, EggNotFetchable, py
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble.py
--- a/scripts/scramble.py
+++ b/scripts/scramble.py
@@ -15,7 +15,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs.scramble import ScrambleCrate, ScrambleFailure, EggNotFetchable
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/DRMAA_python-macosx.py
--- a/scripts/scramble/scripts/DRMAA_python-macosx.py
+++ b/scripts/scramble/scripts/DRMAA_python-macosx.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/DRMAA_python-solaris.py
--- a/scripts/scramble/scripts/DRMAA_python-solaris.py
+++ b/scripts/scramble/scripts/DRMAA_python-solaris.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/DRMAA_python.py
--- a/scripts/scramble/scripts/DRMAA_python.py
+++ b/scripts/scramble/scripts/DRMAA_python.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/MySQL_python-solaris.py
--- a/scripts/scramble/scripts/MySQL_python-solaris.py
+++ b/scripts/scramble/scripts/MySQL_python-solaris.py
@@ -50,7 +50,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/MySQL_python.py
--- a/scripts/scramble/scripts/MySQL_python.py
+++ b/scripts/scramble/scripts/MySQL_python.py
@@ -47,7 +47,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/PyRods.py
--- a/scripts/scramble/scripts/PyRods.py
+++ b/scripts/scramble/scripts/PyRods.py
@@ -6,7 +6,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/bx_python-solaris.py
--- a/scripts/scramble/scripts/bx_python-solaris.py
+++ b/scripts/scramble/scripts/bx_python-solaris.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/generic.py
--- a/scripts/scramble/scripts/generic.py
+++ b/scripts/scramble/scripts/generic.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/pbs_python.py
--- a/scripts/scramble/scripts/pbs_python.py
+++ b/scripts/scramble/scripts/pbs_python.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2-linux.py
--- a/scripts/scramble/scripts/psycopg2-linux.py
+++ b/scripts/scramble/scripts/psycopg2-linux.py
@@ -44,7 +44,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2-macosx.py
--- a/scripts/scramble/scripts/psycopg2-macosx.py
+++ b/scripts/scramble/scripts/psycopg2-macosx.py
@@ -50,7 +50,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2-solaris.py
--- a/scripts/scramble/scripts/psycopg2-solaris.py
+++ b/scripts/scramble/scripts/psycopg2-solaris.py
@@ -47,7 +47,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2.py
--- a/scripts/scramble/scripts/psycopg2.py
+++ b/scripts/scramble/scripts/psycopg2.py
@@ -44,7 +44,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/pysam-solaris.py
--- a/scripts/scramble/scripts/pysam-solaris.py
+++ b/scripts/scramble/scripts/pysam-solaris.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/pysqlite.py
--- a/scripts/scramble/scripts/pysqlite.py
+++ b/scripts/scramble/scripts/pysqlite.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/set_dataset_sizes.py
--- a/scripts/set_dataset_sizes.py
+++ b/scripts/set_dataset_sizes.py
@@ -13,7 +13,7 @@
def init():
options.config = os.path.abspath( options.config )
- sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+ sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/set_user_disk_usage.py
--- a/scripts/set_user_disk_usage.py
+++ b/scripts/set_user_disk_usage.py
@@ -21,7 +21,7 @@
if options.email == 'all':
options.email = None
- sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+ sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
4 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/6b07e029e315/
Changeset: 6b07e029e315
Branch: stable
User: dannon
Date: 2015-02-12 12:57:51+00:00
Summary: Fix at least one error with zipfile downloads and file permissions not being set correctly.
Affected #: 1 file
diff -r 1b96d3a4ff28da2bd547b65ad86c5ad5a9bbfb90 -r 6b07e029e315021aee7bcf032e51caf2e34faee2 lib/galaxy/eggs/__init__.py
--- a/lib/galaxy/eggs/__init__.py
+++ b/lib/galaxy/eggs/__init__.py
@@ -421,7 +421,7 @@
try:
for info in z.infolist():
name = info.filename
- perm = (info.external_attr >> 16L) & 0777
+ mode = (info.external_attr >> 16L) & 0777
# don't extract absolute paths or ones with .. in them
if name.startswith('/') or '..' in name:
continue
https://bitbucket.org/galaxy/galaxy-central/commits/1864b26da065/
Changeset: 1864b26da065
Branch: stable
User: dannon
Date: 2015-02-12 13:28:37+00:00
Summary: Fix path manipulation during fetch_eggs. This getting an external version of pkg_resources (and not ours in lib/) is what is causing the weird egg fetching errors. Newer versions of pkg_resources create a mangled distribution string for some eggs with nonstandard version identifiers.
Affected #: 1 file
diff -r 6b07e029e315021aee7bcf032e51caf2e34faee2 -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 scripts/fetch_eggs.py
--- a/scripts/fetch_eggs.py
+++ b/scripts/fetch_eggs.py
@@ -32,7 +32,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert(1, lib)
from galaxy.eggs import Crate, EggNotFetchable
import pkg_resources
https://bitbucket.org/galaxy/galaxy-central/commits/dd8c3520ccbe/
Changeset: dd8c3520ccbe
Branch: stable
User: dannon
Date: 2015-02-12 15:34:51+00:00
Summary: Fix path insertion vs appending of <galaxy>/lib for all scripts.
Affected #: 24 files
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/check_eggs.py
--- a/scripts/check_eggs.py
+++ b/scripts/check_eggs.py
@@ -37,7 +37,7 @@
config_arg = '-c %s' % config
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs import Crate
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/check_galaxy.py
--- a/scripts/check_galaxy.py
+++ b/scripts/check_galaxy.py
@@ -90,7 +90,7 @@
# find/import twill
lib_dir = os.path.join( scripts_dir, "..", "lib" )
-sys.path.append( lib_dir )
+sys.path.insert( 1, lib_dir )
from galaxy import eggs
import pkg_resources
pkg_resources.require( "twill" )
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/dist-scramble.py
--- a/scripts/dist-scramble.py
+++ b/scripts/dist-scramble.py
@@ -44,7 +44,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs.dist import DistScrambleCrate, ScrambleFailure
from galaxy.eggs import EggNotFetchable
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/get_platforms.py
--- a/scripts/get_platforms.py
+++ b/scripts/get_platforms.py
@@ -5,7 +5,7 @@
assert sys.version_info[:2] >= ( 2, 4 )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
import galaxy
import pkg_resources
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/helper.py
--- a/scripts/helper.py
+++ b/scripts/helper.py
@@ -26,7 +26,7 @@
sys.exit( 1 )
options.config = os.path.abspath( options.config )
-sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/make_egg_packager.py
--- a/scripts/make_egg_packager.py
+++ b/scripts/make_egg_packager.py
@@ -17,7 +17,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs import Crate, EggNotFetchable, py
import pkg_resources
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble.py
--- a/scripts/scramble.py
+++ b/scripts/scramble.py
@@ -15,7 +15,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs.scramble import ScrambleCrate, ScrambleFailure, EggNotFetchable
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/DRMAA_python-macosx.py
--- a/scripts/scramble/scripts/DRMAA_python-macosx.py
+++ b/scripts/scramble/scripts/DRMAA_python-macosx.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/DRMAA_python-solaris.py
--- a/scripts/scramble/scripts/DRMAA_python-solaris.py
+++ b/scripts/scramble/scripts/DRMAA_python-solaris.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/DRMAA_python.py
--- a/scripts/scramble/scripts/DRMAA_python.py
+++ b/scripts/scramble/scripts/DRMAA_python.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/MySQL_python-solaris.py
--- a/scripts/scramble/scripts/MySQL_python-solaris.py
+++ b/scripts/scramble/scripts/MySQL_python-solaris.py
@@ -50,7 +50,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/MySQL_python.py
--- a/scripts/scramble/scripts/MySQL_python.py
+++ b/scripts/scramble/scripts/MySQL_python.py
@@ -47,7 +47,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/PyRods.py
--- a/scripts/scramble/scripts/PyRods.py
+++ b/scripts/scramble/scripts/PyRods.py
@@ -6,7 +6,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/bx_python-solaris.py
--- a/scripts/scramble/scripts/bx_python-solaris.py
+++ b/scripts/scramble/scripts/bx_python-solaris.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/generic.py
--- a/scripts/scramble/scripts/generic.py
+++ b/scripts/scramble/scripts/generic.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/pbs_python.py
--- a/scripts/scramble/scripts/pbs_python.py
+++ b/scripts/scramble/scripts/pbs_python.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/psycopg2-linux.py
--- a/scripts/scramble/scripts/psycopg2-linux.py
+++ b/scripts/scramble/scripts/psycopg2-linux.py
@@ -44,7 +44,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/psycopg2-macosx.py
--- a/scripts/scramble/scripts/psycopg2-macosx.py
+++ b/scripts/scramble/scripts/psycopg2-macosx.py
@@ -50,7 +50,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/psycopg2-solaris.py
--- a/scripts/scramble/scripts/psycopg2-solaris.py
+++ b/scripts/scramble/scripts/psycopg2-solaris.py
@@ -47,7 +47,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/psycopg2.py
--- a/scripts/scramble/scripts/psycopg2.py
+++ b/scripts/scramble/scripts/psycopg2.py
@@ -44,7 +44,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/pysam-solaris.py
--- a/scripts/scramble/scripts/pysam-solaris.py
+++ b/scripts/scramble/scripts/pysam-solaris.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/scramble/scripts/pysqlite.py
--- a/scripts/scramble/scripts/pysqlite.py
+++ b/scripts/scramble/scripts/pysqlite.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/set_dataset_sizes.py
--- a/scripts/set_dataset_sizes.py
+++ b/scripts/set_dataset_sizes.py
@@ -13,7 +13,7 @@
def init():
options.config = os.path.abspath( options.config )
- sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+ sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
diff -r 1864b26da0656d7ccacaf24e578d3500d2e8fcf0 -r dd8c3520ccbe079cd25de04bcaf93241491b4e84 scripts/set_user_disk_usage.py
--- a/scripts/set_user_disk_usage.py
+++ b/scripts/set_user_disk_usage.py
@@ -21,7 +21,7 @@
if options.email == 'all':
options.email = None
- sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+ sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
https://bitbucket.org/galaxy/galaxy-central/commits/a6e9a1d72674/
Changeset: a6e9a1d72674
Branch: stable
User: natefoo
Date: 2015-02-12 18:20:29+00:00
Summary: Merged in dannon/galaxy-central/stable (pull request #668)
[STABLE] Egg-fetching related bugfixes grafted from default.
Affected #: 26 files
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 lib/galaxy/eggs/__init__.py
--- a/lib/galaxy/eggs/__init__.py
+++ b/lib/galaxy/eggs/__init__.py
@@ -421,7 +421,7 @@
try:
for info in z.infolist():
name = info.filename
- perm = (info.external_attr >> 16L) & 0777
+ mode = (info.external_attr >> 16L) & 0777
# don't extract absolute paths or ones with .. in them
if name.startswith('/') or '..' in name:
continue
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/check_eggs.py
--- a/scripts/check_eggs.py
+++ b/scripts/check_eggs.py
@@ -37,7 +37,7 @@
config_arg = '-c %s' % config
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs import Crate
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/check_galaxy.py
--- a/scripts/check_galaxy.py
+++ b/scripts/check_galaxy.py
@@ -90,7 +90,7 @@
# find/import twill
lib_dir = os.path.join( scripts_dir, "..", "lib" )
-sys.path.append( lib_dir )
+sys.path.insert( 1, lib_dir )
from galaxy import eggs
import pkg_resources
pkg_resources.require( "twill" )
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/dist-scramble.py
--- a/scripts/dist-scramble.py
+++ b/scripts/dist-scramble.py
@@ -44,7 +44,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs.dist import DistScrambleCrate, ScrambleFailure
from galaxy.eggs import EggNotFetchable
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/fetch_eggs.py
--- a/scripts/fetch_eggs.py
+++ b/scripts/fetch_eggs.py
@@ -32,7 +32,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert(1, lib)
from galaxy.eggs import Crate, EggNotFetchable
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/get_platforms.py
--- a/scripts/get_platforms.py
+++ b/scripts/get_platforms.py
@@ -5,7 +5,7 @@
assert sys.version_info[:2] >= ( 2, 4 )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
import galaxy
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/helper.py
--- a/scripts/helper.py
+++ b/scripts/helper.py
@@ -26,7 +26,7 @@
sys.exit( 1 )
options.config = os.path.abspath( options.config )
-sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/make_egg_packager.py
--- a/scripts/make_egg_packager.py
+++ b/scripts/make_egg_packager.py
@@ -17,7 +17,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs import Crate, EggNotFetchable, py
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble.py
--- a/scripts/scramble.py
+++ b/scripts/scramble.py
@@ -15,7 +15,7 @@
root.addHandler( logging.StreamHandler( sys.stdout ) )
lib = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "lib" ) )
-sys.path.append( lib )
+sys.path.insert( 1, lib )
from galaxy.eggs.scramble import ScrambleCrate, ScrambleFailure, EggNotFetchable
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/DRMAA_python-macosx.py
--- a/scripts/scramble/scripts/DRMAA_python-macosx.py
+++ b/scripts/scramble/scripts/DRMAA_python-macosx.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/DRMAA_python-solaris.py
--- a/scripts/scramble/scripts/DRMAA_python-solaris.py
+++ b/scripts/scramble/scripts/DRMAA_python-solaris.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/DRMAA_python.py
--- a/scripts/scramble/scripts/DRMAA_python.py
+++ b/scripts/scramble/scripts/DRMAA_python.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/MySQL_python-solaris.py
--- a/scripts/scramble/scripts/MySQL_python-solaris.py
+++ b/scripts/scramble/scripts/MySQL_python-solaris.py
@@ -50,7 +50,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/MySQL_python.py
--- a/scripts/scramble/scripts/MySQL_python.py
+++ b/scripts/scramble/scripts/MySQL_python.py
@@ -47,7 +47,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/PyRods.py
--- a/scripts/scramble/scripts/PyRods.py
+++ b/scripts/scramble/scripts/PyRods.py
@@ -6,7 +6,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/bx_python-solaris.py
--- a/scripts/scramble/scripts/bx_python-solaris.py
+++ b/scripts/scramble/scripts/bx_python-solaris.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/generic.py
--- a/scripts/scramble/scripts/generic.py
+++ b/scripts/scramble/scripts/generic.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/pbs_python.py
--- a/scripts/scramble/scripts/pbs_python.py
+++ b/scripts/scramble/scripts/pbs_python.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2-linux.py
--- a/scripts/scramble/scripts/psycopg2-linux.py
+++ b/scripts/scramble/scripts/psycopg2-linux.py
@@ -44,7 +44,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2-macosx.py
--- a/scripts/scramble/scripts/psycopg2-macosx.py
+++ b/scripts/scramble/scripts/psycopg2-macosx.py
@@ -50,7 +50,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2-solaris.py
--- a/scripts/scramble/scripts/psycopg2-solaris.py
+++ b/scripts/scramble/scripts/psycopg2-solaris.py
@@ -47,7 +47,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/psycopg2.py
--- a/scripts/scramble/scripts/psycopg2.py
+++ b/scripts/scramble/scripts/psycopg2.py
@@ -44,7 +44,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
- sys.path.append( os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
+ sys.path.insert( 1, os.path.abspath( os.path.join( '..', '..', '..', 'lib' ) ) )
from scramble_lib import *
tag = get_tag()
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/pysam-solaris.py
--- a/scripts/scramble/scripts/pysam-solaris.py
+++ b/scripts/scramble/scripts/pysam-solaris.py
@@ -5,7 +5,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/scramble/scripts/pysqlite.py
--- a/scripts/scramble/scripts/pysqlite.py
+++ b/scripts/scramble/scripts/pysqlite.py
@@ -10,7 +10,7 @@
os.chdir( os.path.dirname( sys.argv[0] ) )
# find setuptools
-sys.path.append( os.path.join( '..', '..', '..', 'lib' ) )
+sys.path.insert( 1, os.path.join( '..', '..', '..', 'lib' ) )
from scramble_lib import *
tag = get_tag() # get the tag
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/set_dataset_sizes.py
--- a/scripts/set_dataset_sizes.py
+++ b/scripts/set_dataset_sizes.py
@@ -13,7 +13,7 @@
def init():
options.config = os.path.abspath( options.config )
- sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+ sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
diff -r 71054665755b0b6c6348aedb56222b954fea3e7b -r a6e9a1d7267410f697f30102ed78317b08274026 scripts/set_user_disk_usage.py
--- a/scripts/set_user_disk_usage.py
+++ b/scripts/set_user_disk_usage.py
@@ -21,7 +21,7 @@
if options.email == 'all':
options.email = None
- sys.path.append( os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
+ sys.path.insert( 1, os.path.join( os.path.dirname( __file__ ), '..', 'lib' ) )
from galaxy import eggs
import pkg_resources
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: natefoo: So, you can put module source URLs right into a requirements.txt. Thanks John (and thanks for nothing, pip documentation).
by commits-noreply@bitbucket.org 12 Feb '15
by commits-noreply@bitbucket.org 12 Feb '15
12 Feb '15
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/82644ba2a73d/
Changeset: 82644ba2a73d
User: natefoo
Date: 2015-02-12 18:18:15+00:00
Summary: So, you can put module source URLs right into a requirements.txt. Thanks John (and thanks for nothing, pip documentation).
Affected #: 1 file
diff -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c -r 82644ba2a73d5e2b2f07975b39b6e70aefedff9b requirements.txt
--- a/requirements.txt
+++ b/requirements.txt
@@ -24,9 +24,6 @@
# are trying to move away from our strict version dependency policy and this
# would greatly help in our efforts.
-# not available in PyPI, must be installed by hand:
-#SVGFig
-
Paste
PasteDeploy
docutils
@@ -64,3 +61,5 @@
bioblend
Parsley
WebError
+http://svgfig.googlecode.com/files/svgfig-1.1.6.tgz
+
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: carlfeberhard: UI, history multi-view: move copy and delete into submenu
by commits-noreply@bitbucket.org 12 Feb '15
by commits-noreply@bitbucket.org 12 Feb '15
12 Feb '15
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/d86c3cbc6d90/
Changeset: d86c3cbc6d90
User: carlfeberhard
Date: 2015-02-12 18:07:31+00:00
Summary: UI, history multi-view: move copy and delete into submenu
Affected #: 7 files
diff -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c client/galaxy/scripts/mvc/history/history-panel-edit.js
--- a/client/galaxy/scripts/mvc/history/history-panel-edit.js
+++ b/client/galaxy/scripts/mvc/history/history-panel-edit.js
@@ -473,14 +473,13 @@
if( !this.dropTarget ){ return this; }
//this.log( 'dropTargetOff' );
this.dropTarget = false;
- //
- //var dropTarget = this.$( '.history-drop-target' ).get(0);
- //for( var evName in this._dropHandlers ){
- // if( this._dropHandlers.hasOwnProperty( evName ) ){
- // console.debug( evName, this._dropHandlers[ evName ] );
- // dropTarget.off( evName, this._dropHandlers[ evName ] );
- // }
- //}
+ var dropTarget = this.$( '.history-drop-target' ).get(0);
+ for( var evName in this._dropHandlers ){
+ if( this._dropHandlers.hasOwnProperty( evName ) ){
+ console.debug( evName, this._dropHandlers[ evName ] );
+ dropTarget.off( evName, this._dropHandlers[ evName ] );
+ }
+ }
this.$( '.history-drop-target' ).remove();
this.$( '.history-drop-target-help' ).remove();
return this;
diff -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c client/galaxy/scripts/mvc/history/multi-panel.js
--- a/client/galaxy/scripts/mvc/history/multi-panel.js
+++ b/client/galaxy/scripts/mvc/history/multi-panel.js
@@ -243,14 +243,9 @@
data = data || {};
var html = [
'<div class="panel-controls clear flex-row">',
- this.controlsLeftTemplate(),
+ this.controlsLeftTemplate( data ),
//'<button class="btn btn-default">Herp</button>',
- '<div class="pull-right">',
- '<button class="delete-history btn btn-default">',
- data.deleted? _l( 'Undelete' ): _l( 'Delete' ),
- '</button>',
- '<button class="copy-history btn btn-default">', _l( 'Copy' ), '</button>',
- '</div>',
+ this.controlsRightTemplate( data ),
'</div>',
'<div class="inner flex-row flex-column-container">',
'<div id="history-', data.id, '" class="history-column history-panel flex-column"></div>',
@@ -260,7 +255,7 @@
},
/** controls template displaying controls above the panel based on this.currentHistory */
- controlsLeftTemplate : function(){
+ controlsLeftTemplate : function( data ){
return ( this.currentHistory )?
[
'<div class="pull-left">',
@@ -274,6 +269,39 @@
].join( '' );
},
+ /** controls template displaying controls above the panel based on this.currentHistory */
+ controlsRightTemplate : _.template([
+ '<div class="pull-right">',
+ '<% if( !history.purged ){ %>',
+ '<div class="panel-menu order btn-group">',
+ '<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',
+ '<span class="caret"></span>',
+ '</button>',
+ '<ul class="dropdown-menu pull-right" role="menu">',
+ '<% if( !history.deleted ){ %>',
+ '<li><a href="javascript:void(0);" class="copy-history">',
+ _l( 'Copy' ),
+ '</a></li>',
+ //'<li><a href="javascript:void(0);" class="publish-history">',
+ // _l( 'Publish' ),
+ //'</a></li>',
+ '<li><a href="javascript:void(0);" class="delete-history">',
+ _l( 'Delete' ),
+ '</a></li>',
+ '<% } else /* if is deleted */ { %>',
+ '<li><a href="javascript:void(0);" class="undelete-history">',
+ _l( 'Undelete' ),
+ '</a></li>',
+ '<% } %>',
+ //'<li><a href="javascript:void(0);" class="purge-history">',
+ // _l( 'Purge' ),
+ //'</a></li>',
+ '</ul>',
+ '<% } %>',
+ '</div>',
+ '</div>'
+ ].join( '' ), { variable: 'history' }),
+
/** render the panel contained in the column using speed for fx speed */
renderPanel : function renderPanel( speed ){
speed = ( speed !== undefined )?( speed ):( 'fast' );
@@ -289,25 +317,41 @@
events : {
// will make this the current history
'click .switch-to.btn' : function(){ this.model.setAsCurrent(); },
- // toggles deleted here and on the server and re-renders
- 'click .delete-history.btn' : function(){
- var column = this,
- xhr;
- if( this.model.get( 'deleted' ) ){
- xhr = this.model.undelete();
- } else {
- xhr = this.model._delete();
- }
-//TODO: better error handler
- xhr.fail( function( xhr, status, error ){
+ //TODO: remove boiler plate from next 3
+ 'click .delete-history' : function(){
+ var column = this;
+ this.model._delete()
+ .fail( function( xhr, status, error ){
alert( _l( 'Could not delete the history' ) + ':\n' + error );
})
.done( function( data ){
column.render();
});
- },
+ },
+ 'click .undelete-history' : function(){
+ var column = this;
+ this.model.undelete()
+ .fail( function( xhr, status, error ){
+ alert( _l( 'Could not undelete the history' ) + ':\n' + error );
+ })
+ .done( function( data ){
+ column.render();
+ });
+ },
+ 'click .purge-history' : function(){
+ if( confirm( _l( 'This will permanently remove the data. Are you sure?' ) ) ){
+ var column = this;
+ this.model.purge()
+ .fail( function( xhr, status, error ){
+ alert( _l( 'Could not purge the history' ) + ':\n' + error );
+ })
+ .done( function( data ){
+ column.render();
+ });
+ }
+ },
// will copy this history and make the copy the current history
- 'click .copy-history.btn' : 'copy'
+ 'click .copy-history' : 'copy'
},
// ------------------------------------------------------------------------ non-current controls
@@ -1030,7 +1074,7 @@
_l( 'Include hidden datasets' ),
'</label></div>',
'</div>'
- ].join(''), { variable: 'view' }),
+ ].join(''), { variable: 'view' })
});
diff -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c static/scripts/mvc/history/history-panel-edit.js
--- a/static/scripts/mvc/history/history-panel-edit.js
+++ b/static/scripts/mvc/history/history-panel-edit.js
@@ -473,14 +473,13 @@
if( !this.dropTarget ){ return this; }
//this.log( 'dropTargetOff' );
this.dropTarget = false;
- //
- //var dropTarget = this.$( '.history-drop-target' ).get(0);
- //for( var evName in this._dropHandlers ){
- // if( this._dropHandlers.hasOwnProperty( evName ) ){
- // console.debug( evName, this._dropHandlers[ evName ] );
- // dropTarget.off( evName, this._dropHandlers[ evName ] );
- // }
- //}
+ var dropTarget = this.$( '.history-drop-target' ).get(0);
+ for( var evName in this._dropHandlers ){
+ if( this._dropHandlers.hasOwnProperty( evName ) ){
+ console.debug( evName, this._dropHandlers[ evName ] );
+ dropTarget.off( evName, this._dropHandlers[ evName ] );
+ }
+ }
this.$( '.history-drop-target' ).remove();
this.$( '.history-drop-target-help' ).remove();
return this;
diff -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c static/scripts/mvc/history/multi-panel.js
--- a/static/scripts/mvc/history/multi-panel.js
+++ b/static/scripts/mvc/history/multi-panel.js
@@ -243,14 +243,9 @@
data = data || {};
var html = [
'<div class="panel-controls clear flex-row">',
- this.controlsLeftTemplate(),
+ this.controlsLeftTemplate( data ),
//'<button class="btn btn-default">Herp</button>',
- '<div class="pull-right">',
- '<button class="delete-history btn btn-default">',
- data.deleted? _l( 'Undelete' ): _l( 'Delete' ),
- '</button>',
- '<button class="copy-history btn btn-default">', _l( 'Copy' ), '</button>',
- '</div>',
+ this.controlsRightTemplate( data ),
'</div>',
'<div class="inner flex-row flex-column-container">',
'<div id="history-', data.id, '" class="history-column history-panel flex-column"></div>',
@@ -260,7 +255,7 @@
},
/** controls template displaying controls above the panel based on this.currentHistory */
- controlsLeftTemplate : function(){
+ controlsLeftTemplate : function( data ){
return ( this.currentHistory )?
[
'<div class="pull-left">',
@@ -274,6 +269,39 @@
].join( '' );
},
+ /** controls template displaying controls above the panel based on this.currentHistory */
+ controlsRightTemplate : _.template([
+ '<div class="pull-right">',
+ '<% if( !history.purged ){ %>',
+ '<div class="panel-menu order btn-group">',
+ '<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',
+ '<span class="caret"></span>',
+ '</button>',
+ '<ul class="dropdown-menu pull-right" role="menu">',
+ '<% if( !history.deleted ){ %>',
+ '<li><a href="javascript:void(0);" class="copy-history">',
+ _l( 'Copy' ),
+ '</a></li>',
+ //'<li><a href="javascript:void(0);" class="publish-history">',
+ // _l( 'Publish' ),
+ //'</a></li>',
+ '<li><a href="javascript:void(0);" class="delete-history">',
+ _l( 'Delete' ),
+ '</a></li>',
+ '<% } else /* if is deleted */ { %>',
+ '<li><a href="javascript:void(0);" class="undelete-history">',
+ _l( 'Undelete' ),
+ '</a></li>',
+ '<% } %>',
+ //'<li><a href="javascript:void(0);" class="purge-history">',
+ // _l( 'Purge' ),
+ //'</a></li>',
+ '</ul>',
+ '<% } %>',
+ '</div>',
+ '</div>'
+ ].join( '' ), { variable: 'history' }),
+
/** render the panel contained in the column using speed for fx speed */
renderPanel : function renderPanel( speed ){
speed = ( speed !== undefined )?( speed ):( 'fast' );
@@ -289,25 +317,41 @@
events : {
// will make this the current history
'click .switch-to.btn' : function(){ this.model.setAsCurrent(); },
- // toggles deleted here and on the server and re-renders
- 'click .delete-history.btn' : function(){
- var column = this,
- xhr;
- if( this.model.get( 'deleted' ) ){
- xhr = this.model.undelete();
- } else {
- xhr = this.model._delete();
- }
-//TODO: better error handler
- xhr.fail( function( xhr, status, error ){
+ //TODO: remove boiler plate from next 3
+ 'click .delete-history' : function(){
+ var column = this;
+ this.model._delete()
+ .fail( function( xhr, status, error ){
alert( _l( 'Could not delete the history' ) + ':\n' + error );
})
.done( function( data ){
column.render();
});
- },
+ },
+ 'click .undelete-history' : function(){
+ var column = this;
+ this.model.undelete()
+ .fail( function( xhr, status, error ){
+ alert( _l( 'Could not undelete the history' ) + ':\n' + error );
+ })
+ .done( function( data ){
+ column.render();
+ });
+ },
+ 'click .purge-history' : function(){
+ if( confirm( _l( 'This will permanently remove the data. Are you sure?' ) ) ){
+ var column = this;
+ this.model.purge()
+ .fail( function( xhr, status, error ){
+ alert( _l( 'Could not purge the history' ) + ':\n' + error );
+ })
+ .done( function( data ){
+ column.render();
+ });
+ }
+ },
// will copy this history and make the copy the current history
- 'click .copy-history.btn' : 'copy'
+ 'click .copy-history' : 'copy'
},
// ------------------------------------------------------------------------ non-current controls
@@ -1030,7 +1074,7 @@
_l( 'Include hidden datasets' ),
'</label></div>',
'</div>'
- ].join(''), { variable: 'view' }),
+ ].join(''), { variable: 'view' })
});
diff -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c static/scripts/packed/mvc/history/history-panel-edit.js
--- a/static/scripts/packed/mvc/history/history-panel-edit.js
+++ b/static/scripts/packed/mvc/history/history-panel-edit.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-panel","mvc/history/history-contents","mvc/dataset/states","mvc/history/hda-model","mvc/history/hda-li-edit","mvc/history/hdca-li-edit","mvc/tags","mvc/annotations","ui/fa-icon-button","mvc/ui/popup-menu","utils/localization"],function(h,j,m,f,e,i,l,c,b,a,d){var k=h.HistoryPanel;var g=k.extend({HDAViewClass:e.HDAListItemEdit,HDCAViewClass:i.HDCAListItemEdit,initialize:function(n){n=n||{};k.prototype.initialize.call(this,n);this.tagsEditor=null;this.annotationEditor=null;this.purgeAllowed=n.purgeAllowed||false;this.annotationEditorShown=n.annotationEditorShown||false;this.tagsEditorShown=n.tagsEditorShown||false;this.multiselectActions=n.multiselectActions||this._getActions()},_setUpListeners:function(){var n=this;k.prototype._setUpListeners.call(n);n.on("drop",function(o,p){n.dataDropped(p);n.dropTargetOff()});n.on("view:attached view:removed",function(){n._renderCounts()},n)},_setUpCollectionListeners:function(){k.prototype._setUpCollectionListeners.call(this);this.collection.on("change:deleted",this._handleHdaDeletionChange,this);this.collection.on("change:visible",this._handleHdaVisibleChange,this);this.collection.on("change:purged",function(n){this.model.fetch()},this);return this},_setUpModelListeners:function(){k.prototype._setUpModelListeners.call(this);this.model.on("change:nice_size",this.updateHistoryDiskSize,this);return this},_buildNewRender:function(){var n=k.prototype._buildNewRender.call(this);if(!this.model){return n}if(Galaxy&&Galaxy.currUser&&Galaxy.currUser.id&&Galaxy.currUser.id===this.model.get("user_id")){this._renderTags(n);this._renderAnnotation(n)}return n},renderItems:function(o){var n=k.prototype.renderItems.call(this,o);this._renderCounts(o);return n},_renderCounts:function(p){function o(s,t){return['<a class="',s,'" href="javascript:void(0);">',t,"</a>"].join("")}p=p||this.$el;var n=this.collection.where({deleted:true}),r=this.collection.where({visible:false}),q=[];if(this.views.length){q.push([this.views.length,d("shown")].join(" "))}if(n.length){q.push((!this.showDeleted)?([n.length,o("toggle-deleted-link",d("deleted"))].join(" ")):(o("toggle-deleted-link",d("hide deleted"))))}if(r.length){q.push((!this.showHidden)?([r.length,o("toggle-hidden-link",d("hidden"))].join(" ")):(o("toggle-hidden-link",d("hide hidden"))))}return p.find("> .controls .subtitle").html(q.join(", "))},_renderTags:function(n){var o=this;this.tagsEditor=new l.TagsEditor({model:this.model,el:n.find(".controls .tags-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDATagEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDATagEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history tags"),classes:"history-tag-btn",faIcon:"fa-tags"}).appendTo(n.find(".controls .actions"))})},_renderAnnotation:function(n){var o=this;this.annotationEditor=new c.AnnotationEditor({model:this.model,el:n.find(".controls .annotation-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDAAnnotationEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDAAnnotationEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history annotation"),classes:"history-annotate-btn",faIcon:"fa-comment"}).appendTo(n.find(".controls .actions"))})},_setUpBehaviors:function(n){n=n||this.$el;k.prototype._setUpBehaviors.call(this,n);if(!this.model){return}if(this.multiselectActions.length){this.actionsPopup=new a(n.find(".list-action-popup-btn"),this.multiselectActions)}if((!Galaxy.currUser||Galaxy.currUser.isAnonymous())||(Galaxy.currUser.id!==this.model.get("user_id"))){return}var o=this,p=".controls .name";n.find(p).attr("title",d("Click to rename history")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(q){var r=o.model.get("name");if(q&&q!==r){o.$el.find(p).text(q);o.model.save({name:q}).fail(function(){o.$el.find(p).text(o.model.previous("name"))})}else{o.$el.find(p).text(r)}}})},_getActions:function(){var n=this,o=[{html:d("Hide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.hide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Unhide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.unhide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Delete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype["delete"];n.getSelectedModels().ajaxQueue(p)}},{html:d("Undelete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.undelete;n.getSelectedModels().ajaxQueue(p)}}];if(n.purgeAllowed){o.push({html:d("Permanently delete datasets"),func:function(){if(confirm(d("This will permanently remove the data in your datasets. Are you sure?"))){var p=f.HistoryDatasetAssociation.prototype.purge;n.getSelectedModels().ajaxQueue(p)}}})}o.push({html:d("Build Dataset List"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"list")}});o.push({html:d("Build Dataset Pair"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"paired")}});o.push({html:d("Build List of Dataset Pairs"),func:_.bind(n._showPairedCollectionModal,n)});return o},_showPairedCollectionModal:function(){var n=this,o=n.getSelectedModels().toJSON().filter(function(p){return p.history_content_type==="dataset"&&p.state===m.OK});if(o.length){require(["mvc/collection/paired-collection-creator"],function(p){window.creator=p.pairedCollectionCreatorModal(o,{historyId:n.model.id})})}else{Galaxy.modal.show({title:d("No valid datasets were selected"),body:d(["Use the checkboxes at the left of the dataset names to select them.","Selected datasets should be error-free and should have completed running."].join(" ")),buttons:{Ok:function(){Galaxy.modal.hide()}},closing_events:true})}},_attachItems:function(n){this.$list(n).append(this.views.reverse().map(function(o){return o.$el}));return this},_attachView:function(o){var n=this;n.views.unshift(o);n.$list().prepend(o.render(0).$el.hide());n.trigger("view:attached",o);o.$el.slideDown(n.fxSpeed,function(){n.trigger("view:attached:rendered")})},_getItemViewOptions:function(o){var n=k.prototype._getItemViewOptions.call(this,o);_.extend(n,{purgeAllowed:this.purgeAllowed,tagsEditorShown:(this.tagsEditor&&!this.tagsEditor.hidden),annotationEditorShown:(this.annotationEditor&&!this.annotationEditor.hidden)});return n},_handleHdaDeletionChange:function(n){if(n.get("deleted")&&!this.showDeleted){this.removeItemView(n)}this._renderCounts()},_handleHdaVisibleChange:function(n){if(n.hidden()&&!this.storage.showHidden){this.removeItemView(n)}this._renderCounts()},toggleHDATagEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.tagsEditor){p.tagsEditor.toggle.apply(p.tagsEditor,o)}})},toggleHDAAnnotationEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.annotationEditor){p.annotationEditor.toggle.apply(p.annotationEditor,o)}})},events:_.extend(_.clone(k.prototype.events),{"click .show-selectors-btn":"toggleSelectors","click .toggle-deleted-link":function(n){this.toggleShowDeleted()},"click .toggle-hidden-link":function(n){this.toggleShowHidden()}}),updateHistoryDiskSize:function(){this.$el.find(".history-size").text(this.model.get("nice_size"))},dropTargetOn:function(){if(this.dropTarget){return this}this.dropTarget=true;var o={dragenter:_.bind(this.dragenter,this),dragover:_.bind(this.dragover,this),dragleave:_.bind(this.dragleave,this),drop:_.bind(this.drop,this)};var p=this._renderDropTarget();this.$list().before([this._renderDropTargetHelp(),p]);for(var n in o){if(o.hasOwnProperty(n)){p.on(n,o[n])}}return this},_renderDropTarget:function(){this.$(".history-drop-target").remove();return $("<div/>").addClass("history-drop-target").css({height:"64px",margin:"0px 10px 10px 10px",border:"1px dashed black","border-radius":"3px"})},_renderDropTargetHelp:function(){this.$(".history-drop-target-help").remove();return $("<div/>").addClass("history-drop-target-help").css({margin:"10px 10px 4px 10px",color:"grey","font-size":"80%","font-style":"italic"}).text(d("Drag datasets here to copy them to the current history"))},dropTargetOff:function(){if(!this.dropTarget){return this}this.dropTarget=false;this.$(".history-drop-target").remove();this.$(".history-drop-target-help").remove();return this},dropTargetToggle:function(){if(this.dropTarget){this.dropTargetOff()}else{this.dropTargetOn()}return this},dragenter:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","2px solid black")},dragover:function(n){n.preventDefault();n.stopPropagation()},dragleave:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","1px dashed black")},drop:function(p){p.preventDefault();p.dataTransfer.dropEffect="move";var n=this,q=p.dataTransfer.getData("text");try{q=JSON.parse(q)}catch(o){this.warn("error parsing JSON from drop:",q)}this.trigger("droptarget:drop",p,q,n);return false},dataDropped:function(o){var n=this;if(_.isObject(o)&&o.model_class==="HistoryDatasetAssociation"&&o.id){return n.model.contents.copy(o.id)}return jQuery.when()},toString:function(){return"HistoryPanelEdit("+((this.model)?(this.model.get("name")):(""))+")"}});return{HistoryPanelEdit:g}});
\ No newline at end of file
+define(["mvc/history/history-panel","mvc/history/history-contents","mvc/dataset/states","mvc/history/hda-model","mvc/history/hda-li-edit","mvc/history/hdca-li-edit","mvc/tags","mvc/annotations","ui/fa-icon-button","mvc/ui/popup-menu","utils/localization"],function(h,j,m,f,e,i,l,c,b,a,d){var k=h.HistoryPanel;var g=k.extend({HDAViewClass:e.HDAListItemEdit,HDCAViewClass:i.HDCAListItemEdit,initialize:function(n){n=n||{};k.prototype.initialize.call(this,n);this.tagsEditor=null;this.annotationEditor=null;this.purgeAllowed=n.purgeAllowed||false;this.annotationEditorShown=n.annotationEditorShown||false;this.tagsEditorShown=n.tagsEditorShown||false;this.multiselectActions=n.multiselectActions||this._getActions()},_setUpListeners:function(){var n=this;k.prototype._setUpListeners.call(n);n.on("drop",function(o,p){n.dataDropped(p);n.dropTargetOff()});n.on("view:attached view:removed",function(){n._renderCounts()},n)},_setUpCollectionListeners:function(){k.prototype._setUpCollectionListeners.call(this);this.collection.on("change:deleted",this._handleHdaDeletionChange,this);this.collection.on("change:visible",this._handleHdaVisibleChange,this);this.collection.on("change:purged",function(n){this.model.fetch()},this);return this},_setUpModelListeners:function(){k.prototype._setUpModelListeners.call(this);this.model.on("change:nice_size",this.updateHistoryDiskSize,this);return this},_buildNewRender:function(){var n=k.prototype._buildNewRender.call(this);if(!this.model){return n}if(Galaxy&&Galaxy.currUser&&Galaxy.currUser.id&&Galaxy.currUser.id===this.model.get("user_id")){this._renderTags(n);this._renderAnnotation(n)}return n},renderItems:function(o){var n=k.prototype.renderItems.call(this,o);this._renderCounts(o);return n},_renderCounts:function(p){function o(s,t){return['<a class="',s,'" href="javascript:void(0);">',t,"</a>"].join("")}p=p||this.$el;var n=this.collection.where({deleted:true}),r=this.collection.where({visible:false}),q=[];if(this.views.length){q.push([this.views.length,d("shown")].join(" "))}if(n.length){q.push((!this.showDeleted)?([n.length,o("toggle-deleted-link",d("deleted"))].join(" ")):(o("toggle-deleted-link",d("hide deleted"))))}if(r.length){q.push((!this.showHidden)?([r.length,o("toggle-hidden-link",d("hidden"))].join(" ")):(o("toggle-hidden-link",d("hide hidden"))))}return p.find("> .controls .subtitle").html(q.join(", "))},_renderTags:function(n){var o=this;this.tagsEditor=new l.TagsEditor({model:this.model,el:n.find(".controls .tags-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDATagEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDATagEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history tags"),classes:"history-tag-btn",faIcon:"fa-tags"}).appendTo(n.find(".controls .actions"))})},_renderAnnotation:function(n){var o=this;this.annotationEditor=new c.AnnotationEditor({model:this.model,el:n.find(".controls .annotation-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDAAnnotationEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDAAnnotationEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history annotation"),classes:"history-annotate-btn",faIcon:"fa-comment"}).appendTo(n.find(".controls .actions"))})},_setUpBehaviors:function(n){n=n||this.$el;k.prototype._setUpBehaviors.call(this,n);if(!this.model){return}if(this.multiselectActions.length){this.actionsPopup=new a(n.find(".list-action-popup-btn"),this.multiselectActions)}if((!Galaxy.currUser||Galaxy.currUser.isAnonymous())||(Galaxy.currUser.id!==this.model.get("user_id"))){return}var o=this,p=".controls .name";n.find(p).attr("title",d("Click to rename history")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(q){var r=o.model.get("name");if(q&&q!==r){o.$el.find(p).text(q);o.model.save({name:q}).fail(function(){o.$el.find(p).text(o.model.previous("name"))})}else{o.$el.find(p).text(r)}}})},_getActions:function(){var n=this,o=[{html:d("Hide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.hide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Unhide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.unhide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Delete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype["delete"];n.getSelectedModels().ajaxQueue(p)}},{html:d("Undelete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.undelete;n.getSelectedModels().ajaxQueue(p)}}];if(n.purgeAllowed){o.push({html:d("Permanently delete datasets"),func:function(){if(confirm(d("This will permanently remove the data in your datasets. Are you sure?"))){var p=f.HistoryDatasetAssociation.prototype.purge;n.getSelectedModels().ajaxQueue(p)}}})}o.push({html:d("Build Dataset List"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"list")}});o.push({html:d("Build Dataset Pair"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"paired")}});o.push({html:d("Build List of Dataset Pairs"),func:_.bind(n._showPairedCollectionModal,n)});return o},_showPairedCollectionModal:function(){var n=this,o=n.getSelectedModels().toJSON().filter(function(p){return p.history_content_type==="dataset"&&p.state===m.OK});if(o.length){require(["mvc/collection/paired-collection-creator"],function(p){window.creator=p.pairedCollectionCreatorModal(o,{historyId:n.model.id})})}else{Galaxy.modal.show({title:d("No valid datasets were selected"),body:d(["Use the checkboxes at the left of the dataset names to select them.","Selected datasets should be error-free and should have completed running."].join(" ")),buttons:{Ok:function(){Galaxy.modal.hide()}},closing_events:true})}},_attachItems:function(n){this.$list(n).append(this.views.reverse().map(function(o){return o.$el}));return this},_attachView:function(o){var n=this;n.views.unshift(o);n.$list().prepend(o.render(0).$el.hide());n.trigger("view:attached",o);o.$el.slideDown(n.fxSpeed,function(){n.trigger("view:attached:rendered")})},_getItemViewOptions:function(o){var n=k.prototype._getItemViewOptions.call(this,o);_.extend(n,{purgeAllowed:this.purgeAllowed,tagsEditorShown:(this.tagsEditor&&!this.tagsEditor.hidden),annotationEditorShown:(this.annotationEditor&&!this.annotationEditor.hidden)});return n},_handleHdaDeletionChange:function(n){if(n.get("deleted")&&!this.showDeleted){this.removeItemView(n)}this._renderCounts()},_handleHdaVisibleChange:function(n){if(n.hidden()&&!this.storage.showHidden){this.removeItemView(n)}this._renderCounts()},toggleHDATagEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.tagsEditor){p.tagsEditor.toggle.apply(p.tagsEditor,o)}})},toggleHDAAnnotationEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.annotationEditor){p.annotationEditor.toggle.apply(p.annotationEditor,o)}})},events:_.extend(_.clone(k.prototype.events),{"click .show-selectors-btn":"toggleSelectors","click .toggle-deleted-link":function(n){this.toggleShowDeleted()},"click .toggle-hidden-link":function(n){this.toggleShowHidden()}}),updateHistoryDiskSize:function(){this.$el.find(".history-size").text(this.model.get("nice_size"))},dropTargetOn:function(){if(this.dropTarget){return this}this.dropTarget=true;var o={dragenter:_.bind(this.dragenter,this),dragover:_.bind(this.dragover,this),dragleave:_.bind(this.dragleave,this),drop:_.bind(this.drop,this)};var p=this._renderDropTarget();this.$list().before([this._renderDropTargetHelp(),p]);for(var n in o){if(o.hasOwnProperty(n)){p.on(n,o[n])}}return this},_renderDropTarget:function(){this.$(".history-drop-target").remove();return $("<div/>").addClass("history-drop-target").css({height:"64px",margin:"0px 10px 10px 10px",border:"1px dashed black","border-radius":"3px"})},_renderDropTargetHelp:function(){this.$(".history-drop-target-help").remove();return $("<div/>").addClass("history-drop-target-help").css({margin:"10px 10px 4px 10px",color:"grey","font-size":"80%","font-style":"italic"}).text(d("Drag datasets here to copy them to the current history"))},dropTargetOff:function(){if(!this.dropTarget){return this}this.dropTarget=false;var o=this.$(".history-drop-target").get(0);for(var n in this._dropHandlers){if(this._dropHandlers.hasOwnProperty(n)){console.debug(n,this._dropHandlers[n]);o.off(n,this._dropHandlers[n])}}this.$(".history-drop-target").remove();this.$(".history-drop-target-help").remove();return this},dropTargetToggle:function(){if(this.dropTarget){this.dropTargetOff()}else{this.dropTargetOn()}return this},dragenter:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","2px solid black")},dragover:function(n){n.preventDefault();n.stopPropagation()},dragleave:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","1px dashed black")},drop:function(p){p.preventDefault();p.dataTransfer.dropEffect="move";var n=this,q=p.dataTransfer.getData("text");try{q=JSON.parse(q)}catch(o){this.warn("error parsing JSON from drop:",q)}this.trigger("droptarget:drop",p,q,n);return false},dataDropped:function(o){var n=this;if(_.isObject(o)&&o.model_class==="HistoryDatasetAssociation"&&o.id){return n.model.contents.copy(o.id)}return jQuery.when()},toString:function(){return"HistoryPanelEdit("+((this.model)?(this.model.get("name")):(""))+")"}});return{HistoryPanelEdit:g}});
\ No newline at end of file
diff -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c static/scripts/packed/mvc/history/multi-panel.js
--- a/static/scripts/packed/mvc/history/multi-panel.js
+++ b/static/scripts/packed/mvc/history/multi-panel.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-model","mvc/history/history-panel-edit","mvc/base-mvc","utils/ajax-queue","ui/mode-button","ui/search-input"],function(d,l,z,a){function g(I,E){E=E||{};if(!(Galaxy&&Galaxy.modal)){return I.copy()}var F=I.get("name"),C="Copy of '"+F+"'";function D(K){if(!K){if(!Galaxy.modal.$("#invalid-title").size()){var J=$("<p/>").attr("id","invalid-title").css({color:"red","margin-top":"8px"}).addClass("bg-danger").text(_l("Please enter a valid history title"));Galaxy.modal.$(".modal-body").append(J)}return false}return K}function G(J){var K=$('<p><span class="fa fa-spinner fa-spin"></span> Copying history...</p>').css("margin-top","8px");Galaxy.modal.$(".modal-body").append(K);I.copy(true,J).fail(function(){alert(_l("History could not be copied. Please contact a Galaxy administrator"))}).always(function(){Galaxy.modal.hide()})}function H(){var J=Galaxy.modal.$("#copy-modal-title").val();if(!D(J)){return}G(J)}Galaxy.modal.show(_.extend({title:_l("Copying history")+' "'+F+'"',body:$(['<label for="copy-modal-title">',_l("Enter a title for the copied history"),":","</label><br />",'<input id="copy-modal-title" class="form-control" style="width: 100%" value="',C,'" />'].join("")),buttons:{Cancel:function(){Galaxy.modal.hide()},Copy:H}},E));$("#copy-modal-title").focus().select();$("#copy-modal-title").on("keydown",function(J){if(J.keyCode===13){H()}})}var B=Backbone.View.extend(z.LoggableMixin).extend({tagName:"div",className:"history-column flex-column flex-row-container",id:function q(){if(!this.model){return""}return"history-column-"+this.model.get("id")},initialize:function c(C){C=C||{};this.panel=C.panel||this.createPanel(C);this.setUpListeners()},createPanel:function u(D){D=_.extend({model:this.model,dragItems:true},D);var C=new l.HistoryPanelEdit(D);C._renderEmptyMessage=this.__patch_renderEmptyMessage;return C},__patch_renderEmptyMessage:function(E){var D=this,F=_.chain(this.model.get("state_ids")).values().flatten().value().length,C=D.$emptyMessage(E);if(!_.isEmpty(D.hdaViews)){C.hide()}else{if(F&&!this.model.contents.length){C.empty().append($('<span class="fa fa-spinner fa-spin"></span><i>loading datasets...</i>')).show()}else{if(D.searchFor){C.text(D.noneFoundMsg).show()}else{C.text(D.emptyMsg).show()}}}return C},setUpListeners:function f(){var C=this;this.once("rendered",function(){C.trigger("rendered:initial",C)});this.setUpPanelListeners()},setUpPanelListeners:function k(){var C=this;this.listenTo(this.panel,{rendered:function(){C.trigger("rendered",C)}},this)},inView:function(C,D){var F=this.$el.offset().left,E=F+this.$el.width();if(E<C){return false}if(F>D){return false}return true},$panel:function e(){return this.$(".history-panel")},render:function A(D){D=(D!==undefined)?(D):("fast");var C=this.model?this.model.toJSON():{};this.$el.html(this.template(C));this.renderPanel(D);this.setUpBehaviors();return this},setUpBehaviors:function v(){},template:function w(D){D=D||{};var C=['<div class="panel-controls clear flex-row">',this.controlsLeftTemplate(),'<div class="pull-right">','<button class="delete-history btn btn-default">',D.deleted?_l("Undelete"):_l("Delete"),"</button>",'<button class="copy-history btn btn-default">',_l("Copy"),"</button>","</div>","</div>",'<div class="inner flex-row flex-column-container">','<div id="history-',D.id,'" class="history-column history-panel flex-column"></div>',"</div>"].join("");return $(C)},controlsLeftTemplate:function(){return(this.currentHistory)?['<div class="pull-left">','<strong class="current-label">',_l("Current History"),"</strong>","</div>"].join(""):['<div class="pull-left">','<button class="switch-to btn btn-default">',_l("Switch to"),"</button>","</div>"].join("")},renderPanel:function h(C){C=(C!==undefined)?(C):("fast");this.panel.setElement(this.$panel()).render(C);if(this.currentHistory){this.panel.$list().before(this.panel._renderDropTargetHelp())}return this},events:{"click .switch-to.btn":function(){this.model.setAsCurrent()},"click .delete-history.btn":function(){var C=this,D;if(this.model.get("deleted")){D=this.model.undelete()}else{D=this.model._delete()}D.fail(function(G,E,F){alert(_l("Could not delete the history")+":\n"+F)}).done(function(E){C.render()})},"click .copy-history.btn":"copy"},copy:function s(){g(this.model)},toString:function(){return"HistoryPanelColumn("+(this.panel?this.panel:"")+")"}});var m=Backbone.View.extend(z.LoggableMixin).extend({className:"multi-history-columns",initialize:function c(C){C=C||{};this.log(this+".init",C);if(!C.currentHistoryId){throw new Error(this+" requires a currentHistoryId in the options")}this.currentHistoryId=C.currentHistoryId;this.options={columnWidth:312,borderWidth:1,columnGap:8,headerHeight:29,footerHeight:0,controlsHeight:20};this.order=C.order||"update";this.hdaQueue=new a.NamedAjaxQueue([],false);this.collection=null;this.setCollection(C.histories||[]);this.columnMap={};this.createColumns(C.columnOptions);this.setUpListeners()},setUpListeners:function f(){},setCollection:function y(D){var C=this;C.stopListening(C.collection);C.collection=D;C.sortCollection(C.order,{silent:true});C.setUpCollectionListeners();C.trigger("new-collection",C);return C},setUpCollectionListeners:function(){var C=this,D=C.collection;C.listenTo(D,{add:C.addAsCurrentColumn,"set-as-current":C.setCurrentHistory,"change:deleted":C.handleDeletedHistory,sort:function(){C.renderColumns(0)}})},setCurrentHistory:function p(D){var C=this.columnMap[this.currentHistoryId];if(C){C.currentHistory=false;C.$el.height("")}this.currentHistoryId=D.id;var E=this.columnMap[this.currentHistoryId];E.currentHistory=true;this.sortCollection();multipanel._recalcFirstColumnHeight();return E},handleDeletedHistory:function b(D){if(D.get("deleted")){this.log("handleDeletedHistory",this.collection.includeDeleted,D);var C=this;column=C.columnMap[D.id];if(!column){return}if(column.model.id===this.currentHistoryId){}else{if(!C.collection.includeDeleted){C.removeColumn(column)}}}},sortCollection:function(C,D){C=C||this.order;var E=this.currentHistoryId;switch(C){case"name":this.collection.comparator=function(F){return[F.id!==E,F.get("name").toLowerCase()]};break;case"size":this.collection.comparator=function(F){return[F.id!==E,F.get("size")]};break;default:this.collection.comparator=function(F){return[F.id!==E,Date(F.get("update_time"))]}}this.collection.sort(D);return this.collection},setOrder:function(C){if(["update","name","size"].indexOf(C)===-1){C="update"}this.order=C;this.trigger("order:change",C,this);this.$(".current-order").text(C);this.sortCollection();return this},create:function(C){return this.collection.create({current:true})},createColumns:function r(D){D=D||{};var C=this;this.columnMap={};C.collection.each(function(E,F){var G=C.createColumn(E,D);C.columnMap[E.id]=G})},createColumn:function t(E,C){C=_.extend({},C,{model:E});var D=new B(C);if(E.id===this.currentHistoryId){D.currentHistory=true}this.setUpColumnListeners(D);return D},sortedFilteredColumns:function(C){C=C||this.filters;if(!C||!C.length){return this.sortedColumns()}var D=this;return D.sortedColumns().filter(function(G,F){var E=G.currentHistory||_.every(C.map(function(H){return H.call(G)}));return E})},sortedColumns:function(){var D=this;var C=this.collection.map(function(F,E){return D.columnMap[F.id]});return C},addColumn:function o(E,C){C=C!==undefined?C:true;var D=this.createColumn(E);this.columnMap[E.id]=D;if(C){this.renderColumns()}return D},addAsCurrentColumn:function o(E){var D=this,C=this.addColumn(E,false);this.setCurrentHistory(E);C.once("rendered",function(){D.queueHdaFetch(C)});return C},removeColumn:function x(E,D){D=D!==undefined?D:true;this.log("removeColumn",E);if(!E){return}var F=this,C=this.options.columnWidth+this.options.columnGap;E.$el.fadeOut("fast",function(){if(D){$(this).remove();F.$(".middle").width(F.$(".middle").width()-C);F.checkColumnsInView();F._recalcFirstColumnHeight()}F.stopListening(E.panel);F.stopListening(E);delete F.columnMap[E.model.id];E.remove()})},setUpColumnListeners:function n(C){var D=this;D.listenTo(C,{"in-view":D.queueHdaFetch});D.listenTo(C.panel,{"view:draggable:dragstart":function(H,F,E,G){D._dropData=JSON.parse(H.dataTransfer.getData("text"));D.currentColumnDropTargetOn()},"view:draggable:dragend":function(H,F,E,G){D._dropData=null;D.currentColumnDropTargetOff()},"droptarget:drop":function(G,H,F){var I=D._dropData.filter(function(J){return(_.isObject(J)&&J.id&&J.model_class==="HistoryDatasetAssociation")});D._dropData=null;var E=new a.NamedAjaxQueue();I.forEach(function(J){E.add({name:"copy-"+J.id,fn:function(){return F.model.contents.copy(J.id)}})});E.start();E.done(function(J){F.model.fetch()})}})},columnMapLength:function(){return Object.keys(this.columnMap).length},render:function A(D){D=D!==undefined?D:this.fxSpeed;var C=this;C.log(C+".render");C.$el.html(C.mainTemplate(C));C.renderColumns(D);C.setUpBehaviors();C.trigger("rendered",C);return C},renderColumns:function j(F){F=F!==undefined?F:this.fxSpeed;var E=this,C=E.sortedFilteredColumns();E.$(".middle").width(C.length*(this.options.columnWidth+this.options.columnGap)+this.options.columnGap+16);var D=E.$(".middle");D.empty();C.forEach(function(H,G){H.$el.appendTo(D);H.delegateEvents();E.renderColumn(H,F)});if(this.searchFor&&C.length<=1){}else{E.checkColumnsInView();this._recalcFirstColumnHeight()}return C},renderColumn:function(C,D){D=D!==undefined?D:this.fxSpeed;return C.render(D)},queueHdaFetch:function i(E){if(E.model.contents.length===0&&!E.model.get("empty")){var C={},D=_.values(E.panel.storage.get("expandedIds")).join();if(D){C.dataset_details=D}this.hdaQueue.add({name:E.model.id,fn:function(){var F=E.model.contents.fetch({data:C,silent:true});return F.done(function(G){E.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},queueHdaFetchDetails:function(C){if((C.model.contents.length===0&&!C.model.get("empty"))||(!C.model.contents.haveDetails())){this.hdaQueue.add({name:C.model.id,fn:function(){var D=C.model.contents.fetch({data:{details:"all"},silent:true});return D.done(function(E){C.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},renderInfo:function(C){this.$(".header .header-info").text(C)},events:{"click .done.btn":"close","click .create-new.btn":"create","click #include-deleted":"_clickToggleDeletedHistories","click .order .order-update":function(C){this.setOrder("update")},"click .order .order-name":function(C){this.setOrder("name")},"click .order .order-size":function(C){this.setOrder("size")},"click #toggle-deleted":"_clickToggleDeletedDatasets","click #toggle-hidden":"_clickToggleHiddenDatasets"},close:function(D){var C="/";if(Galaxy&&Galaxy.options&&Galaxy.options.root){C=Galaxy.options.root}else{if(galaxy_config&&galaxy_config.root){C=galaxy_config.root}}window.location=C},_clickToggleDeletedHistories:function(C){return this.toggleDeletedHistories($(C.currentTarget).is(":checked"))},toggleDeletedHistories:function(C){if(C){window.location=Galaxy.options.root+"history/view_multiple?include_deleted_histories=True"}else{window.location=Galaxy.options.root+"history/view_multiple"}},_clickToggleDeletedDatasets:function(C){return this.toggleDeletedDatasets($(C.currentTarget).is(":checked"))},toggleDeletedDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowDeleted(C,false)},E*200)})},_clickToggleHiddenDatasets:function(C){return this.toggleHiddenDatasets($(C.currentTarget).is(":checked"))},toggleHiddenDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowHidden(C,false)},E*200)})},setUpBehaviors:function(){var D=this;D._moreOptionsPopover();D.$("#search-histories").searchInput({name:"search-histories",placeholder:_l("search histories"),onsearch:function(E){D.searchFor=E;D.filters=[function(){return this.model.matchesAll(D.searchFor)}];D.renderColumns(0)},onclear:function(E){D.searchFor=null;D.filters=[];D.renderColumns(0)}});D.$("#search-datasets").searchInput({name:"search-datasets",placeholder:_l("search all datasets"),onfirstsearch:function(E){D.hdaQueue.clear();D.$("#search-datasets").searchInput("toggle-loading");D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E);D.queueHdaFetchDetails(F)});D.hdaQueue.progress(function(F){D.renderInfo([_l("searching"),(F.curr+1),_l("of"),F.total].join(" "))});D.hdaQueue.deferred.done(function(){D.renderInfo("");D.$("#search-datasets").searchInput("toggle-loading")})},onsearch:function(E){D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E)})},onclear:function(E){D.searchFor=null;D.sortedFilteredColumns().forEach(function(F){F.panel.clearSearch()})}});$(window).resize(function(){D._recalcFirstColumnHeight()});var C=_.debounce(_.bind(this.checkColumnsInView,this),100);this.$(".middle").parent().scroll(C)},_moreOptionsPopover:function(){return this.$(".open-more-options.btn").popover({container:".header",placement:"bottom",html:true,content:$(this.optionsPopoverTemplate(this))})},_recalcFirstColumnHeight:function(){var C=this.$(".history-column").first(),E=this.$(".middle").height(),D=C.find(".panel-controls").height();C.height(E).find(".inner").height(E-D)},_viewport:function(){var C=this.$(".middle").parent().offset().left;return{left:C,right:C+this.$(".middle").parent().width()}},columnsInView:function(){var C=this._viewport();return this.sortedFilteredColumns().filter(function(D){return D.currentHistory||D.inView(C.left,C.right)})},checkColumnsInView:function(){this.columnsInView().forEach(function(C){C.trigger("in-view",C)})},currentColumnDropTargetOn:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=function(D){};C.panel.dropTargetOn()},currentColumnDropTargetOff:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=l.HistoryPanelEdit.prototype.dataDrop;C.panel.dropTarget=false;C.panel.$(".history-drop-target").remove()},toString:function(){return"MultiPanelColumns("+(this.columns?this.columns.length:0)+")"},mainTemplate:_.template(['<div class="header flex-column-container">','<div class="control-column control-column-left flex-column">','<button class="create-new btn btn-default">',_l("Create new"),"</button> ",'<div id="search-histories" class="search-control"></div>','<div id="search-datasets" class="search-control"></div>','<button class="open-more-options btn btn-default">','<span class="fa fa-ellipsis-h" title="More options"></span>',"</button>","</div>",'<div class="control-column control-column-center flex-column">','<div class="header-info">',"</div>","</div>",'<div class="control-column control-column-right flex-column">','<button class="done btn btn-default">',_l("Done"),"</button>","</div>","</div>",'<div class="outer-middle flex-row flex-row-container">','<div class="middle flex-column-container flex-row"></div>',"</div>",'<div class="footer flex-column-container">',"</div>"].join(""),{variable:"view"}),optionsPopoverTemplate:_.template(['<div class="more-options">','<div class="checkbox"><label><input id="include-deleted" type="checkbox"','<%= view.collection.includeDeleted? " checked" : "" %>>',_l("Include deleted histories"),"</label></div>",'<div class="order btn-group">','<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',_l("Order histories by")+" ",'<span class="current-order"><%= view.order %></span> ','<span class="caret"></span>',"</button>",'<ul class="dropdown-menu" role="menu">','<li><a href="javascript:void(0);" class="order-update">',_l("Time of last update"),"</a></li>",'<li><a href="javascript:void(0);" class="order-name">',_l("Name"),"</a></li>",'<li><a href="javascript:void(0);" class="order-size">',_l("Size"),"</a></li>","</ul>","</div>",'<div class="checkbox"><label><input id="toggle-deleted" type="checkbox">',_l("Include deleted datasets"),"</label></div>",'<div class="checkbox"><label><input id="toggle-hidden" type="checkbox">',_l("Include hidden datasets"),"</label></div>","</div>"].join(""),{variable:"view"}),});return{MultiPanelColumns:m}});
\ No newline at end of file
+define(["mvc/history/history-model","mvc/history/history-panel-edit","mvc/base-mvc","utils/ajax-queue","ui/mode-button","ui/search-input"],function(d,l,z,a){function g(I,E){E=E||{};if(!(Galaxy&&Galaxy.modal)){return I.copy()}var F=I.get("name"),C="Copy of '"+F+"'";function D(K){if(!K){if(!Galaxy.modal.$("#invalid-title").size()){var J=$("<p/>").attr("id","invalid-title").css({color:"red","margin-top":"8px"}).addClass("bg-danger").text(_l("Please enter a valid history title"));Galaxy.modal.$(".modal-body").append(J)}return false}return K}function G(J){var K=$('<p><span class="fa fa-spinner fa-spin"></span> Copying history...</p>').css("margin-top","8px");Galaxy.modal.$(".modal-body").append(K);I.copy(true,J).fail(function(){alert(_l("History could not be copied. Please contact a Galaxy administrator"))}).always(function(){Galaxy.modal.hide()})}function H(){var J=Galaxy.modal.$("#copy-modal-title").val();if(!D(J)){return}G(J)}Galaxy.modal.show(_.extend({title:_l("Copying history")+' "'+F+'"',body:$(['<label for="copy-modal-title">',_l("Enter a title for the copied history"),":","</label><br />",'<input id="copy-modal-title" class="form-control" style="width: 100%" value="',C,'" />'].join("")),buttons:{Cancel:function(){Galaxy.modal.hide()},Copy:H}},E));$("#copy-modal-title").focus().select();$("#copy-modal-title").on("keydown",function(J){if(J.keyCode===13){H()}})}var B=Backbone.View.extend(z.LoggableMixin).extend({tagName:"div",className:"history-column flex-column flex-row-container",id:function q(){if(!this.model){return""}return"history-column-"+this.model.get("id")},initialize:function c(C){C=C||{};this.panel=C.panel||this.createPanel(C);this.setUpListeners()},createPanel:function u(D){D=_.extend({model:this.model,dragItems:true},D);var C=new l.HistoryPanelEdit(D);C._renderEmptyMessage=this.__patch_renderEmptyMessage;return C},__patch_renderEmptyMessage:function(E){var D=this,F=_.chain(this.model.get("state_ids")).values().flatten().value().length,C=D.$emptyMessage(E);if(!_.isEmpty(D.hdaViews)){C.hide()}else{if(F&&!this.model.contents.length){C.empty().append($('<span class="fa fa-spinner fa-spin"></span><i>loading datasets...</i>')).show()}else{if(D.searchFor){C.text(D.noneFoundMsg).show()}else{C.text(D.emptyMsg).show()}}}return C},setUpListeners:function f(){var C=this;this.once("rendered",function(){C.trigger("rendered:initial",C)});this.setUpPanelListeners()},setUpPanelListeners:function k(){var C=this;this.listenTo(this.panel,{rendered:function(){C.trigger("rendered",C)}},this)},inView:function(C,D){var F=this.$el.offset().left,E=F+this.$el.width();if(E<C){return false}if(F>D){return false}return true},$panel:function e(){return this.$(".history-panel")},render:function A(D){D=(D!==undefined)?(D):("fast");var C=this.model?this.model.toJSON():{};this.$el.html(this.template(C));this.renderPanel(D);this.setUpBehaviors();return this},setUpBehaviors:function v(){},template:function w(D){D=D||{};var C=['<div class="panel-controls clear flex-row">',this.controlsLeftTemplate(D),this.controlsRightTemplate(D),"</div>",'<div class="inner flex-row flex-column-container">','<div id="history-',D.id,'" class="history-column history-panel flex-column"></div>',"</div>"].join("");return $(C)},controlsLeftTemplate:function(C){return(this.currentHistory)?['<div class="pull-left">','<strong class="current-label">',_l("Current History"),"</strong>","</div>"].join(""):['<div class="pull-left">','<button class="switch-to btn btn-default">',_l("Switch to"),"</button>","</div>"].join("")},controlsRightTemplate:_.template(['<div class="pull-right">',"<% if( !history.purged ){ %>",'<div class="panel-menu order btn-group">','<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">','<span class="caret"></span>',"</button>",'<ul class="dropdown-menu pull-right" role="menu">',"<% if( !history.deleted ){ %>",'<li><a href="javascript:void(0);" class="copy-history">',_l("Copy"),"</a></li>",'<li><a href="javascript:void(0);" class="delete-history">',_l("Delete"),"</a></li>","<% } else /* if is deleted */ { %>",'<li><a href="javascript:void(0);" class="undelete-history">',_l("Undelete"),"</a></li>","<% } %>","</ul>","<% } %>","</div>","</div>"].join(""),{variable:"history"}),renderPanel:function h(C){C=(C!==undefined)?(C):("fast");this.panel.setElement(this.$panel()).render(C);if(this.currentHistory){this.panel.$list().before(this.panel._renderDropTargetHelp())}return this},events:{"click .switch-to.btn":function(){this.model.setAsCurrent()},"click .delete-history":function(){var C=this;this.model._delete().fail(function(F,D,E){alert(_l("Could not delete the history")+":\n"+E)}).done(function(D){C.render()})},"click .undelete-history":function(){var C=this;this.model.undelete().fail(function(F,D,E){alert(_l("Could not undelete the history")+":\n"+E)}).done(function(D){C.render()})},"click .purge-history":function(){if(confirm(_l("This will permanently remove the data. Are you sure?"))){var C=this;this.model.purge().fail(function(F,D,E){alert(_l("Could not purge the history")+":\n"+E)}).done(function(D){C.render()})}},"click .copy-history":"copy"},copy:function s(){g(this.model)},toString:function(){return"HistoryPanelColumn("+(this.panel?this.panel:"")+")"}});var m=Backbone.View.extend(z.LoggableMixin).extend({className:"multi-history-columns",initialize:function c(C){C=C||{};this.log(this+".init",C);if(!C.currentHistoryId){throw new Error(this+" requires a currentHistoryId in the options")}this.currentHistoryId=C.currentHistoryId;this.options={columnWidth:312,borderWidth:1,columnGap:8,headerHeight:29,footerHeight:0,controlsHeight:20};this.order=C.order||"update";this.hdaQueue=new a.NamedAjaxQueue([],false);this.collection=null;this.setCollection(C.histories||[]);this.columnMap={};this.createColumns(C.columnOptions);this.setUpListeners()},setUpListeners:function f(){},setCollection:function y(D){var C=this;C.stopListening(C.collection);C.collection=D;C.sortCollection(C.order,{silent:true});C.setUpCollectionListeners();C.trigger("new-collection",C);return C},setUpCollectionListeners:function(){var C=this,D=C.collection;C.listenTo(D,{add:C.addAsCurrentColumn,"set-as-current":C.setCurrentHistory,"change:deleted":C.handleDeletedHistory,sort:function(){C.renderColumns(0)}})},setCurrentHistory:function p(D){var C=this.columnMap[this.currentHistoryId];if(C){C.currentHistory=false;C.$el.height("")}this.currentHistoryId=D.id;var E=this.columnMap[this.currentHistoryId];E.currentHistory=true;this.sortCollection();multipanel._recalcFirstColumnHeight();return E},handleDeletedHistory:function b(D){if(D.get("deleted")){this.log("handleDeletedHistory",this.collection.includeDeleted,D);var C=this;column=C.columnMap[D.id];if(!column){return}if(column.model.id===this.currentHistoryId){}else{if(!C.collection.includeDeleted){C.removeColumn(column)}}}},sortCollection:function(C,D){C=C||this.order;var E=this.currentHistoryId;switch(C){case"name":this.collection.comparator=function(F){return[F.id!==E,F.get("name").toLowerCase()]};break;case"size":this.collection.comparator=function(F){return[F.id!==E,F.get("size")]};break;default:this.collection.comparator=function(F){return[F.id!==E,Date(F.get("update_time"))]}}this.collection.sort(D);return this.collection},setOrder:function(C){if(["update","name","size"].indexOf(C)===-1){C="update"}this.order=C;this.trigger("order:change",C,this);this.$(".current-order").text(C);this.sortCollection();return this},create:function(C){return this.collection.create({current:true})},createColumns:function r(D){D=D||{};var C=this;this.columnMap={};C.collection.each(function(E,F){var G=C.createColumn(E,D);C.columnMap[E.id]=G})},createColumn:function t(E,C){C=_.extend({},C,{model:E});var D=new B(C);if(E.id===this.currentHistoryId){D.currentHistory=true}this.setUpColumnListeners(D);return D},sortedFilteredColumns:function(C){C=C||this.filters;if(!C||!C.length){return this.sortedColumns()}var D=this;return D.sortedColumns().filter(function(G,F){var E=G.currentHistory||_.every(C.map(function(H){return H.call(G)}));return E})},sortedColumns:function(){var D=this;var C=this.collection.map(function(F,E){return D.columnMap[F.id]});return C},addColumn:function o(E,C){C=C!==undefined?C:true;var D=this.createColumn(E);this.columnMap[E.id]=D;if(C){this.renderColumns()}return D},addAsCurrentColumn:function o(E){var D=this,C=this.addColumn(E,false);this.setCurrentHistory(E);C.once("rendered",function(){D.queueHdaFetch(C)});return C},removeColumn:function x(E,D){D=D!==undefined?D:true;this.log("removeColumn",E);if(!E){return}var F=this,C=this.options.columnWidth+this.options.columnGap;E.$el.fadeOut("fast",function(){if(D){$(this).remove();F.$(".middle").width(F.$(".middle").width()-C);F.checkColumnsInView();F._recalcFirstColumnHeight()}F.stopListening(E.panel);F.stopListening(E);delete F.columnMap[E.model.id];E.remove()})},setUpColumnListeners:function n(C){var D=this;D.listenTo(C,{"in-view":D.queueHdaFetch});D.listenTo(C.panel,{"view:draggable:dragstart":function(H,F,E,G){D._dropData=JSON.parse(H.dataTransfer.getData("text"));D.currentColumnDropTargetOn()},"view:draggable:dragend":function(H,F,E,G){D._dropData=null;D.currentColumnDropTargetOff()},"droptarget:drop":function(G,H,F){var I=D._dropData.filter(function(J){return(_.isObject(J)&&J.id&&J.model_class==="HistoryDatasetAssociation")});D._dropData=null;var E=new a.NamedAjaxQueue();I.forEach(function(J){E.add({name:"copy-"+J.id,fn:function(){return F.model.contents.copy(J.id)}})});E.start();E.done(function(J){F.model.fetch()})}})},columnMapLength:function(){return Object.keys(this.columnMap).length},render:function A(D){D=D!==undefined?D:this.fxSpeed;var C=this;C.log(C+".render");C.$el.html(C.mainTemplate(C));C.renderColumns(D);C.setUpBehaviors();C.trigger("rendered",C);return C},renderColumns:function j(F){F=F!==undefined?F:this.fxSpeed;var E=this,C=E.sortedFilteredColumns();E.$(".middle").width(C.length*(this.options.columnWidth+this.options.columnGap)+this.options.columnGap+16);var D=E.$(".middle");D.empty();C.forEach(function(H,G){H.$el.appendTo(D);H.delegateEvents();E.renderColumn(H,F)});if(this.searchFor&&C.length<=1){}else{E.checkColumnsInView();this._recalcFirstColumnHeight()}return C},renderColumn:function(C,D){D=D!==undefined?D:this.fxSpeed;return C.render(D)},queueHdaFetch:function i(E){if(E.model.contents.length===0&&!E.model.get("empty")){var C={},D=_.values(E.panel.storage.get("expandedIds")).join();if(D){C.dataset_details=D}this.hdaQueue.add({name:E.model.id,fn:function(){var F=E.model.contents.fetch({data:C,silent:true});return F.done(function(G){E.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},queueHdaFetchDetails:function(C){if((C.model.contents.length===0&&!C.model.get("empty"))||(!C.model.contents.haveDetails())){this.hdaQueue.add({name:C.model.id,fn:function(){var D=C.model.contents.fetch({data:{details:"all"},silent:true});return D.done(function(E){C.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},renderInfo:function(C){this.$(".header .header-info").text(C)},events:{"click .done.btn":"close","click .create-new.btn":"create","click #include-deleted":"_clickToggleDeletedHistories","click .order .order-update":function(C){this.setOrder("update")},"click .order .order-name":function(C){this.setOrder("name")},"click .order .order-size":function(C){this.setOrder("size")},"click #toggle-deleted":"_clickToggleDeletedDatasets","click #toggle-hidden":"_clickToggleHiddenDatasets"},close:function(D){var C="/";if(Galaxy&&Galaxy.options&&Galaxy.options.root){C=Galaxy.options.root}else{if(galaxy_config&&galaxy_config.root){C=galaxy_config.root}}window.location=C},_clickToggleDeletedHistories:function(C){return this.toggleDeletedHistories($(C.currentTarget).is(":checked"))},toggleDeletedHistories:function(C){if(C){window.location=Galaxy.options.root+"history/view_multiple?include_deleted_histories=True"}else{window.location=Galaxy.options.root+"history/view_multiple"}},_clickToggleDeletedDatasets:function(C){return this.toggleDeletedDatasets($(C.currentTarget).is(":checked"))},toggleDeletedDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowDeleted(C,false)},E*200)})},_clickToggleHiddenDatasets:function(C){return this.toggleHiddenDatasets($(C.currentTarget).is(":checked"))},toggleHiddenDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowHidden(C,false)},E*200)})},setUpBehaviors:function(){var D=this;D._moreOptionsPopover();D.$("#search-histories").searchInput({name:"search-histories",placeholder:_l("search histories"),onsearch:function(E){D.searchFor=E;D.filters=[function(){return this.model.matchesAll(D.searchFor)}];D.renderColumns(0)},onclear:function(E){D.searchFor=null;D.filters=[];D.renderColumns(0)}});D.$("#search-datasets").searchInput({name:"search-datasets",placeholder:_l("search all datasets"),onfirstsearch:function(E){D.hdaQueue.clear();D.$("#search-datasets").searchInput("toggle-loading");D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E);D.queueHdaFetchDetails(F)});D.hdaQueue.progress(function(F){D.renderInfo([_l("searching"),(F.curr+1),_l("of"),F.total].join(" "))});D.hdaQueue.deferred.done(function(){D.renderInfo("");D.$("#search-datasets").searchInput("toggle-loading")})},onsearch:function(E){D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E)})},onclear:function(E){D.searchFor=null;D.sortedFilteredColumns().forEach(function(F){F.panel.clearSearch()})}});$(window).resize(function(){D._recalcFirstColumnHeight()});var C=_.debounce(_.bind(this.checkColumnsInView,this),100);this.$(".middle").parent().scroll(C)},_moreOptionsPopover:function(){return this.$(".open-more-options.btn").popover({container:".header",placement:"bottom",html:true,content:$(this.optionsPopoverTemplate(this))})},_recalcFirstColumnHeight:function(){var C=this.$(".history-column").first(),E=this.$(".middle").height(),D=C.find(".panel-controls").height();C.height(E).find(".inner").height(E-D)},_viewport:function(){var C=this.$(".middle").parent().offset().left;return{left:C,right:C+this.$(".middle").parent().width()}},columnsInView:function(){var C=this._viewport();return this.sortedFilteredColumns().filter(function(D){return D.currentHistory||D.inView(C.left,C.right)})},checkColumnsInView:function(){this.columnsInView().forEach(function(C){C.trigger("in-view",C)})},currentColumnDropTargetOn:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=function(D){};C.panel.dropTargetOn()},currentColumnDropTargetOff:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=l.HistoryPanelEdit.prototype.dataDrop;C.panel.dropTarget=false;C.panel.$(".history-drop-target").remove()},toString:function(){return"MultiPanelColumns("+(this.columns?this.columns.length:0)+")"},mainTemplate:_.template(['<div class="header flex-column-container">','<div class="control-column control-column-left flex-column">','<button class="create-new btn btn-default">',_l("Create new"),"</button> ",'<div id="search-histories" class="search-control"></div>','<div id="search-datasets" class="search-control"></div>','<button class="open-more-options btn btn-default">','<span class="fa fa-ellipsis-h" title="More options"></span>',"</button>","</div>",'<div class="control-column control-column-center flex-column">','<div class="header-info">',"</div>","</div>",'<div class="control-column control-column-right flex-column">','<button class="done btn btn-default">',_l("Done"),"</button>","</div>","</div>",'<div class="outer-middle flex-row flex-row-container">','<div class="middle flex-column-container flex-row"></div>',"</div>",'<div class="footer flex-column-container">',"</div>"].join(""),{variable:"view"}),optionsPopoverTemplate:_.template(['<div class="more-options">','<div class="checkbox"><label><input id="include-deleted" type="checkbox"','<%= view.collection.includeDeleted? " checked" : "" %>>',_l("Include deleted histories"),"</label></div>",'<div class="order btn-group">','<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',_l("Order histories by")+" ",'<span class="current-order"><%= view.order %></span> ','<span class="caret"></span>',"</button>",'<ul class="dropdown-menu" role="menu">','<li><a href="javascript:void(0);" class="order-update">',_l("Time of last update"),"</a></li>",'<li><a href="javascript:void(0);" class="order-name">',_l("Name"),"</a></li>",'<li><a href="javascript:void(0);" class="order-size">',_l("Size"),"</a></li>","</ul>","</div>",'<div class="checkbox"><label><input id="toggle-deleted" type="checkbox">',_l("Include deleted datasets"),"</label></div>",'<div class="checkbox"><label><input id="toggle-hidden" type="checkbox">',_l("Include hidden datasets"),"</label></div>","</div>"].join(""),{variable:"view"})});return{MultiPanelColumns:m}});
\ No newline at end of file
diff -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 -r d86c3cbc6d9016e8511f36a2a1dd48efe4e0fe2c templates/webapps/galaxy/history/view_multiple.mako
--- a/templates/webapps/galaxy/history/view_multiple.mako
+++ b/templates/webapps/galaxy/history/view_multiple.mako
@@ -148,7 +148,7 @@
}
.open-more-options {
- padding: 0 4px 0 4px;
+ padding: 2px 6px 2px 6px;
font-size: 150%;
}
@@ -173,7 +173,7 @@
.panel-controls {
width: 100%;
- height: ${controls_height}px;
+ height: ${controls_height + 4}px;
border-radius: 3px;
background-color: white;
text-align: center;
@@ -203,6 +203,13 @@
.panel-controls .pull-right .btn {
margin-left: 4px;
}
+ .panel-controls .panel-menu {
+ z-index: 1;
+ }
+ .panel-controls .panel-menu .dropdown-menu a {
+ text-align: left;
+ }
+
/* ---------------------- footer */
.footer {
@@ -214,7 +221,6 @@
/* ---------------------- columns */
.history-panel {
width: 100%;
- margin-top: 4px;
border: ${border_width}px solid grey;
border-radius: 3px;
@@ -225,7 +231,7 @@
.history-column:first-child {
position: fixed;
- z-index : 1;
+ z-index : 2;
}
.history-column:first-child .history-panel {
border: 1px solid black;
@@ -236,22 +242,6 @@
margin-left: ${( column_width + column_gap )}px;
}
- .loading-overlay {
- display: none;
- position: absolute;
- height: 100%;
- width: 100%;
- background-color: red;
- opacity: 0.75;
- z-index: 2;
- text-align: center;
- }
- .loading-overlay-message {
- margin-top: 6px;
- font-style: italic;
- vertical-align: middle;
- }
-
.current-label {
display: inline-block;
color: grey;
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
3 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/e89af5d76371/
Changeset: e89af5d76371
User: natefoo
Date: 2015-02-12 17:13:24+00:00
Summary: Make it possible to disable egg fetching or the use of eggs entirely and provide a requirements.txt.
Affected #: 3 files
diff -r 93d2916499f4ddc3093adc65cb5718a25841aa15 -r e89af5d7637192c58d4ebde8986e627a9e07fb24 config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -125,6 +125,34 @@
# but prefixed with install_ are also available).
#install_database_connection = sqlite:///./database/universe.sqlite?isolation_level=IMMEDIATE
+# -- Galaxy framework dependencies (eggs)
+
+# Options in this section can also be provided as environment variables in the
+# form `GALAXY_<OPTION_NAME>`, e.g. `GALAXY_ENABLE_EGGS=False`, etc.
+# Environment variables override the settings in this config.
+
+# For more details, see the `requirements.txt` file at the root of the Galaxy
+# source distribution.
+
+# Galaxy manages all of its dependent Python modules by downloading Python eggs
+# from the Galaxy eggs distribution server at https://eggs.galaxyproject.org.
+# You may choose to disable this and attempt to install dependencies by hand
+# (e.g. with pip), but beware that this may cause problems due to version
+# incompatibilities between Galaxy and its dependencies. Do not do this unless
+# you know what you're doing.
+#enable_eggs = True
+
+# You may choose to keep eggs enabled but disable fetching them automatically.
+# (hint: To do a one-time fetch, you can disable here and then use
+# `GALAXY_ENABLE_EGG_FETCH=True python ./scripts/fetch_eggs.py` from the root
+# of the Galaxy source.
+#enable_egg_fetch = True
+
+# If you'd like to prefer any dependencies found in your local environment
+# before (fetching and) using Galaxy's egg of that dependency, you can enable
+# the following option:
+#try_dependencies_from_env = False
+
# -- Files and directories
# Dataset files are stored in this directory.
diff -r 93d2916499f4ddc3093adc65cb5718a25841aa15 -r e89af5d7637192c58d4ebde8986e627a9e07fb24 lib/galaxy/eggs/__init__.py
--- a/lib/galaxy/eggs/__init__.py
+++ b/lib/galaxy/eggs/__init__.py
@@ -61,6 +61,7 @@
self.distribution = None
self.dir = None
self.removed_location = None
+ self.enable_fetch = crate.galaxy_config.enable_egg_fetch
if self.name is not None and self.version is not None:
self.set_distribution()
@@ -191,7 +192,10 @@
try:
rval = []
# resolve this egg and its dependencies
- dists = pkg_resources.working_set.resolve( ( self.distribution.as_requirement(), ), env, self.fetch )
+ if self.enable_fetch:
+ dists = pkg_resources.working_set.resolve( ( self.distribution.as_requirement(), ), env, self.fetch )
+ else:
+ dists = pkg_resources.working_set.resolve( ( self.distribution.as_requirement(), ), env, lambda x: None )
for dist in dists:
# if any of the resolved dependencies should be managed eggs but are being pulled from the wrong path, fix them
if dist.project_name in self.crate.all_names and not os.path.realpath( dist.location ).startswith( os.path.realpath( self.dir ) ):
@@ -250,7 +254,10 @@
if egg:
# Store the removed path so the fetch method can use it
egg.removed_location = location
- r = pkg_resources.working_set.resolve( ( dist.as_requirement(), ), env, egg.fetch )
+ if self.enable_fetch:
+ r = pkg_resources.working_set.resolve( ( dist.as_requirement(), ), env, egg.fetch )
+ else:
+ r = pkg_resources.working_set.resolve( ( dist.as_requirement(), ), env, lambda x: None )
egg.removed_location = None
else:
r = pkg_resources.working_set.resolve( ( dist.as_requirement(), ), env )
@@ -374,31 +381,48 @@
"""
Try to resolve (e.g. fetch) all eggs in the crate.
"""
- if all:
- eggs = self.all_eggs
+ if self.galaxy_config.enable_eggs and not self.galaxy_config.try_dependencies_from_env:
+ if all:
+ eggs = self.all_eggs
+ else:
+ eggs = self.config_eggs
+ eggs = filter( lambda x: x.name not in self.no_auto, eggs )
+ missing = []
+ for egg in eggs:
+ try:
+ egg.resolve()
+ except EggNotFetchable:
+ missing.append( egg )
+ if missing:
+ raise EggNotFetchable( missing )
else:
- eggs = self.config_eggs
- eggs = filter( lambda x: x.name not in self.no_auto, eggs )
- missing = []
- for egg in eggs:
- try:
- egg.resolve()
- except EggNotFetchable:
- missing.append( egg )
- if missing:
- raise EggNotFetchable( missing )
+ log.info('Dependencies will attempt to be loaded from the environment')
class GalaxyConfig( object ):
always_conditional = ( 'pysam', 'ctypes', 'python_daemon' )
def __init__( self, config_file ):
+ self.enable_egg_fetch = False
+ self.enable_eggs = False
+ self.try_dependencies_from_env = False
if config_file is None:
self.config = None
else:
self.config = ConfigParser.ConfigParser()
if self.config.read( config_file ) == []:
raise Exception( "error: unable to read Galaxy config from %s" % config_file )
+ self.enable_egg_fetch = True
+ self.enable_eggs = True
+ for opt in ('enable_egg_fetch', 'enable_eggs', 'try_dependencies_from_env'):
+ try:
+ setattr(self, opt, string_as_bool(self.config.get('app:main', opt)))
+ except:
+ pass # use default
+ for opt in ('enable_egg_fetch', 'enable_eggs', 'try_dependencies_from_env'):
+ var = 'GALAXY_' + opt.upper()
+ if var in os.environ:
+ setattr(self, opt, string_as_bool(os.environ[var]))
def check_conditional( self, egg_name ):
def check_pysam():
@@ -435,6 +459,13 @@
return False
+
+def string_as_bool( string ):
+ if str( string ).lower() in ( 'true', 'yes', 'on' ):
+ return True
+ else:
+ return False
+
def get_env():
env = pkg_resources.Environment( search_path='', platform=pkg_resources.get_platform() )
for dist in pkg_resources.find_distributions( eggs_dir, False ):
@@ -446,6 +477,13 @@
def require( req_str ):
c = Crate( None )
req = pkg_resources.Requirement.parse( req_str )
+ if c.galaxy_config.try_dependencies_from_env or not c.galaxy_config.enable_eggs:
+ try:
+ return pkg_resources.working_set.require( req_str )
+ except Exception as exc:
+ if not c.galaxy_config.enable_eggs:
+ raise
+ log.info("%s not found in local environment, will try Galaxy egg: %s", (req_str, exc))
# TODO: This breaks egg version requirements. Not currently a problem, but
# it could become one.
try:
diff -r 93d2916499f4ddc3093adc65cb5718a25841aa15 -r e89af5d7637192c58d4ebde8986e627a9e07fb24 requirements.txt
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,66 @@
+#
+# Galaxy has traditionally managed all of its own dependencies (in the form of
+# precompiled Python eggs) for a few reasons:
+#
+# 1. We can ensure that Galaxy works with the versions of the dependencies that
+# we require.
+# 2. We can precompile them for numerous platforms, meaning that developers or
+# system administrators attempting to use Galaxy do not need to wait while
+# dependencies compile/install, nor do they need to have compilers or
+# various development libraries installed on their system.
+#
+# However, you may want to manage these dependencies on your own. If so, this
+# file can be used with pip to install all of the bare minimum dependencies for
+# starting a Galaxy server. Use this in conjunction with the
+# `enable_eggs = False` galaxy.ini option or `GALAXY_ENABLE_EGGS=False`
+# environment variable
+#
+# Note that except in the case of SQLAlchemy, all dependencies will be
+# installed at their newest versions. Galaxy has not been tested with these and
+# you may (likely?) run into problems! The Galaxy Team does not support using
+# Galaxy with dependency versions other than those in eggs.ini, however, if you
+# do find an incompatibility between Galaxy and the latest version, we would
+# appreciate if you would investigate and provide a code fix for the issue. We
+# are trying to move away from our strict version dependency policy and this
+# would greatly help in our efforts.
+
+# not available in PyPI, must be installed by hand:
+#SVGFig
+
+Paste
+PasteDeploy
+docutils
+wchartype
+pexpect
+amqp
+repoze.lru
+Routes
+WebOb
+SQLAlchemy<0.8
+Cheetah
+pycrypto
+MarkupSafe
+WebHelpers
+anyjson
+kombu
+numpy
+bx-python # bx must be installed after numpy!
+pysam
+Mako
+PyYAML
+mercurial
+pytz
+Babel
+decorator
+Tempita
+sqlalchemy-migrate
+Beaker
+Whoosh
+paramiko
+ssh
+Fabric
+boto
+simplejson
+bioblend
+Parsley
+WebError
https://bitbucket.org/galaxy/galaxy-central/commits/6b03101f9eb4/
Changeset: 6b03101f9eb4
User: natefoo
Date: 2015-02-12 17:31:58+00:00
Summary: Use GALAXY_CONFIG_ environment variables instead of GALAXY_ to fall in line with convention.
Affected #: 3 files
diff -r e89af5d7637192c58d4ebde8986e627a9e07fb24 -r 6b03101f9eb482477276e0c1b719964f02f51469 config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -128,8 +128,8 @@
# -- Galaxy framework dependencies (eggs)
# Options in this section can also be provided as environment variables in the
-# form `GALAXY_<OPTION_NAME>`, e.g. `GALAXY_ENABLE_EGGS=False`, etc.
-# Environment variables override the settings in this config.
+# form `GALAXY_CONFIG_<OPTION_NAME>`, e.g. `GALAXY_CONFIG_ENABLE_EGGS=False`,
+# etc. Environment variables override the settings in this config.
# For more details, see the `requirements.txt` file at the root of the Galaxy
# source distribution.
@@ -144,8 +144,8 @@
# You may choose to keep eggs enabled but disable fetching them automatically.
# (hint: To do a one-time fetch, you can disable here and then use
-# `GALAXY_ENABLE_EGG_FETCH=True python ./scripts/fetch_eggs.py` from the root
-# of the Galaxy source.
+# `GALAXY_CONFIG_ENABLE_EGG_FETCH=True python ./scripts/fetch_eggs.py` from the
+# root of the Galaxy source.
#enable_egg_fetch = True
# If you'd like to prefer any dependencies found in your local environment
diff -r e89af5d7637192c58d4ebde8986e627a9e07fb24 -r 6b03101f9eb482477276e0c1b719964f02f51469 lib/galaxy/eggs/__init__.py
--- a/lib/galaxy/eggs/__init__.py
+++ b/lib/galaxy/eggs/__init__.py
@@ -420,7 +420,7 @@
except:
pass # use default
for opt in ('enable_egg_fetch', 'enable_eggs', 'try_dependencies_from_env'):
- var = 'GALAXY_' + opt.upper()
+ var = 'GALAXY_CONFIG_' + opt.upper()
if var in os.environ:
setattr(self, opt, string_as_bool(os.environ[var]))
diff -r e89af5d7637192c58d4ebde8986e627a9e07fb24 -r 6b03101f9eb482477276e0c1b719964f02f51469 requirements.txt
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,7 +12,7 @@
# However, you may want to manage these dependencies on your own. If so, this
# file can be used with pip to install all of the bare minimum dependencies for
# starting a Galaxy server. Use this in conjunction with the
-# `enable_eggs = False` galaxy.ini option or `GALAXY_ENABLE_EGGS=False`
+# `enable_eggs = False` galaxy.ini option or `GALAXY_CONFIG_ENABLE_EGGS=False`
# environment variable
#
# Note that except in the case of SQLAlchemy, all dependencies will be
https://bitbucket.org/galaxy/galaxy-central/commits/b0452677a40f/
Changeset: b0452677a40f
User: natefoo
Date: 2015-02-12 17:39:27+00:00
Summary: Require Whoosh<2.5 as per Martin.
Affected #: 1 file
diff -r 6b03101f9eb482477276e0c1b719964f02f51469 -r b0452677a40f85d4b92cbcb1ebe4e137dbbfbec1 requirements.txt
--- a/requirements.txt
+++ b/requirements.txt
@@ -55,7 +55,7 @@
Tempita
sqlalchemy-migrate
Beaker
-Whoosh
+Whoosh<2.5
paramiko
ssh
Fabric
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: natefoo: Ensure the correct default Galaxy config file is found in common_startup.sh, it
by commits-noreply@bitbucket.org 12 Feb '15
by commits-noreply@bitbucket.org 12 Feb '15
12 Feb '15
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/93d2916499f4/
Changeset: 93d2916499f4
User: natefoo
Date: 2015-02-12 16:47:58+00:00
Summary: Ensure the correct default Galaxy config file is found in common_startup.sh, it
makes a difference for egg fetching since some eggs are conditional based on
config.
Affected #: 1 file
diff -r 51a3606fe3bdf21d663b35d41c886ff819fd234d -r 93d2916499f4ddc3093adc65cb5718a25841aa15 scripts/common_startup.sh
--- a/scripts/common_startup.sh
+++ b/scripts/common_startup.sh
@@ -34,7 +34,13 @@
done
fi
-: ${GALAXY_CONFIG_FILE:=config/galaxy.ini.sample}
+: ${GALAXY_CONFIG_FILE:=config/galaxy.ini}
+if [ ! -f $GALAXY_CONFIG_FILE ]; then
+ GALAXY_CONFIG_FILE=universe_wsgi.ini
+fi
+if [ ! -f $GALAXY_CONFIG_FILE ]; then
+ GALAXY_CONFIG_FILE=config/galaxy.ini.sample
+fi
if [ $FETCH_EGGS -eq 1 ]; then
python ./scripts/check_eggs.py -q -c $GALAXY_CONFIG_FILE
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: martenson: Merged in dan/galaxy-central-prs/stable (pull request #667)
by commits-noreply@bitbucket.org 12 Feb '15
by commits-noreply@bitbucket.org 12 Feb '15
12 Feb '15
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/71054665755b/
Changeset: 71054665755b
Branch: stable
User: martenson
Date: 2015-02-12 16:42:29+00:00
Summary: Merged in dan/galaxy-central-prs/stable (pull request #667)
[STABLE] Fixes for resetting metadata on ToolShed Repositories.
Affected #: 3 files
diff -r f1c89c016624edd48edf604b14745d2a85b8402a -r 71054665755b0b6c6348aedb56222b954fea3e7b lib/galaxy/webapps/tool_shed/controllers/repository.py
--- a/lib/galaxy/webapps/tool_shed/controllers/repository.py
+++ b/lib/galaxy/webapps/tool_shed/controllers/repository.py
@@ -2766,7 +2766,8 @@
repository = suc.get_repository_in_tool_shed( trans.app, id )
rmm = repository_metadata_manager.RepositoryMetadataManager( app=trans.app,
user=trans.user,
- repository=repository )
+ repository=repository,
+ resetting_all_metadata_on_repository=True )
rmm.reset_all_metadata_on_repository_in_tool_shed()
rmm_metadata_dict = rmm.get_metadata_dict()
rmm_invalid_file_tups = rmm.get_invalid_file_tups()
@@ -2787,7 +2788,7 @@
@web.expose
def reset_metadata_on_my_writable_repositories_in_tool_shed( self, trans, **kwd ):
- rmm = repository_metadata_manager.RepositoryMetadataManager( trans.app, trans.user )
+ rmm = repository_metadata_manager.RepositoryMetadataManager( trans.app, trans.user, resetting_all_metadata_on_repository=True )
if 'reset_metadata_on_selected_repositories_button' in kwd:
message, status = rmm.reset_metadata_on_selected_repositories( **kwd )
else:
diff -r f1c89c016624edd48edf604b14745d2a85b8402a -r 71054665755b0b6c6348aedb56222b954fea3e7b lib/tool_shed/metadata/metadata_generator.py
--- a/lib/tool_shed/metadata/metadata_generator.py
+++ b/lib/tool_shed/metadata/metadata_generator.py
@@ -853,7 +853,7 @@
if tool_path and relative_install_dir:
if relative_path_to_sample_file.startswith( os.path.join( tool_path, relative_install_dir ) ):
relative_path_to_sample_file = relative_path_to_sample_file[ len( tool_path ) + 1 :]
- sample_file_metadata_paths.append( relative_path_to_sample_file )
+ sample_file_metadata_paths.append( relative_path_to_sample_file )
return sample_file_metadata_paths, sample_file_copy_paths
def handle_repository_elem( self, repository_elem, only_if_compiling_contained_td=False ):
diff -r f1c89c016624edd48edf604b14745d2a85b8402a -r 71054665755b0b6c6348aedb56222b954fea3e7b lib/tool_shed/metadata/repository_metadata_manager.py
--- a/lib/tool_shed/metadata/repository_metadata_manager.py
+++ b/lib/tool_shed/metadata/repository_metadata_manager.py
@@ -834,7 +834,6 @@
if cloned_ok:
log.debug( "Generating metadata for changset revision: %s", str( ctx.rev() ) )
self.set_changeset_revision( str( repo.changectx( changeset ) ) )
- self.set_relative_install_dir( work_dir )
self.set_repository_files_dir( work_dir )
self.generate_metadata_for_changeset_revision()
if self.metadata_dict:
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
4 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/852e7e14fab2/
Changeset: 852e7e14fab2
Branch: stable
User: dan
Date: 2015-02-11 21:50:25+00:00
Summary: Fix for resetting repository metadata in the toolshed via UI (pass resetting_all_metadata_on_repository=True flag).
Affected #: 1 file
diff -r ca653e8d044d29e15d4ff3266e333aa75c09e5d7 -r 852e7e14fab21ac9bb2c4aa40840d054dddb6d91 lib/galaxy/webapps/tool_shed/controllers/repository.py
--- a/lib/galaxy/webapps/tool_shed/controllers/repository.py
+++ b/lib/galaxy/webapps/tool_shed/controllers/repository.py
@@ -2763,7 +2763,8 @@
repository = suc.get_repository_in_tool_shed( trans.app, id )
rmm = repository_metadata_manager.RepositoryMetadataManager( app=trans.app,
user=trans.user,
- repository=repository )
+ repository=repository,
+ resetting_all_metadata_on_repository=True )
rmm.reset_all_metadata_on_repository_in_tool_shed()
rmm_metadata_dict = rmm.get_metadata_dict()
rmm_invalid_file_tups = rmm.get_invalid_file_tups()
@@ -2784,7 +2785,7 @@
@web.expose
def reset_metadata_on_my_writable_repositories_in_tool_shed( self, trans, **kwd ):
- rmm = repository_metadata_manager.RepositoryMetadataManager( trans.app, trans.user )
+ rmm = repository_metadata_manager.RepositoryMetadataManager( trans.app, trans.user, resetting_all_metadata_on_repository=True )
if 'reset_metadata_on_selected_repositories_button' in kwd:
message, status = rmm.reset_metadata_on_selected_repositories( **kwd )
else:
https://bitbucket.org/galaxy/galaxy-central/commits/8e264f9103b5/
Changeset: 8e264f9103b5
Branch: stable
User: dan
Date: 2015-02-11 22:31:49+00:00
Summary: Always add sample file info to metadata, not only during initial creation..
Affected #: 1 file
diff -r 852e7e14fab21ac9bb2c4aa40840d054dddb6d91 -r 8e264f9103b568eed5c7df899f749443b18e0954 lib/tool_shed/metadata/metadata_generator.py
--- a/lib/tool_shed/metadata/metadata_generator.py
+++ b/lib/tool_shed/metadata/metadata_generator.py
@@ -853,7 +853,7 @@
if tool_path and relative_install_dir:
if relative_path_to_sample_file.startswith( os.path.join( tool_path, relative_install_dir ) ):
relative_path_to_sample_file = relative_path_to_sample_file[ len( tool_path ) + 1 :]
- sample_file_metadata_paths.append( relative_path_to_sample_file )
+ sample_file_metadata_paths.append( relative_path_to_sample_file )
return sample_file_metadata_paths, sample_file_copy_paths
def handle_repository_elem( self, repository_elem, only_if_compiling_contained_td=False ):
https://bitbucket.org/galaxy/galaxy-central/commits/81fc2eddcad8/
Changeset: 81fc2eddcad8
Branch: stable
User: dan
Date: 2015-02-11 22:36:05+00:00
Summary: When resetting repository metadata in the toolshed, don't overwrite the already set relative_install_dir.
Affected #: 1 file
diff -r 8e264f9103b568eed5c7df899f749443b18e0954 -r 81fc2eddcad807ef6eac5e9eb42e2cb8b9e39b22 lib/tool_shed/metadata/repository_metadata_manager.py
--- a/lib/tool_shed/metadata/repository_metadata_manager.py
+++ b/lib/tool_shed/metadata/repository_metadata_manager.py
@@ -834,7 +834,6 @@
if cloned_ok:
log.debug( "Generating metadata for changset revision: %s", str( ctx.rev() ) )
self.set_changeset_revision( str( repo.changectx( changeset ) ) )
- self.set_relative_install_dir( work_dir )
self.set_repository_files_dir( work_dir )
self.generate_metadata_for_changeset_revision()
if self.metadata_dict:
https://bitbucket.org/galaxy/galaxy-central/commits/71054665755b/
Changeset: 71054665755b
Branch: stable
User: martenson
Date: 2015-02-12 16:42:29+00:00
Summary: Merged in dan/galaxy-central-prs/stable (pull request #667)
[STABLE] Fixes for resetting metadata on ToolShed Repositories.
Affected #: 3 files
diff -r f1c89c016624edd48edf604b14745d2a85b8402a -r 71054665755b0b6c6348aedb56222b954fea3e7b lib/galaxy/webapps/tool_shed/controllers/repository.py
--- a/lib/galaxy/webapps/tool_shed/controllers/repository.py
+++ b/lib/galaxy/webapps/tool_shed/controllers/repository.py
@@ -2766,7 +2766,8 @@
repository = suc.get_repository_in_tool_shed( trans.app, id )
rmm = repository_metadata_manager.RepositoryMetadataManager( app=trans.app,
user=trans.user,
- repository=repository )
+ repository=repository,
+ resetting_all_metadata_on_repository=True )
rmm.reset_all_metadata_on_repository_in_tool_shed()
rmm_metadata_dict = rmm.get_metadata_dict()
rmm_invalid_file_tups = rmm.get_invalid_file_tups()
@@ -2787,7 +2788,7 @@
@web.expose
def reset_metadata_on_my_writable_repositories_in_tool_shed( self, trans, **kwd ):
- rmm = repository_metadata_manager.RepositoryMetadataManager( trans.app, trans.user )
+ rmm = repository_metadata_manager.RepositoryMetadataManager( trans.app, trans.user, resetting_all_metadata_on_repository=True )
if 'reset_metadata_on_selected_repositories_button' in kwd:
message, status = rmm.reset_metadata_on_selected_repositories( **kwd )
else:
diff -r f1c89c016624edd48edf604b14745d2a85b8402a -r 71054665755b0b6c6348aedb56222b954fea3e7b lib/tool_shed/metadata/metadata_generator.py
--- a/lib/tool_shed/metadata/metadata_generator.py
+++ b/lib/tool_shed/metadata/metadata_generator.py
@@ -853,7 +853,7 @@
if tool_path and relative_install_dir:
if relative_path_to_sample_file.startswith( os.path.join( tool_path, relative_install_dir ) ):
relative_path_to_sample_file = relative_path_to_sample_file[ len( tool_path ) + 1 :]
- sample_file_metadata_paths.append( relative_path_to_sample_file )
+ sample_file_metadata_paths.append( relative_path_to_sample_file )
return sample_file_metadata_paths, sample_file_copy_paths
def handle_repository_elem( self, repository_elem, only_if_compiling_contained_td=False ):
diff -r f1c89c016624edd48edf604b14745d2a85b8402a -r 71054665755b0b6c6348aedb56222b954fea3e7b lib/tool_shed/metadata/repository_metadata_manager.py
--- a/lib/tool_shed/metadata/repository_metadata_manager.py
+++ b/lib/tool_shed/metadata/repository_metadata_manager.py
@@ -834,7 +834,6 @@
if cloned_ok:
log.debug( "Generating metadata for changset revision: %s", str( ctx.rev() ) )
self.set_changeset_revision( str( repo.changectx( changeset ) ) )
- self.set_relative_install_dir( work_dir )
self.set_repository_files_dir( work_dir )
self.generate_metadata_for_changeset_revision()
if self.metadata_dict:
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/a03ff352f393/
Changeset: a03ff352f393
User: carlfeberhard
Date: 2015-02-12 16:18:21+00:00
Summary: UI, history multi-view: render and keep drag help text on current histry as an affordance for drag-to-copy
Affected #: 8 files
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 client/galaxy/scripts/mvc/history/history-panel-edit.js
--- a/client/galaxy/scripts/mvc/history/history-panel-edit.js
+++ b/client/galaxy/scripts/mvc/history/history-panel-edit.js
@@ -445,6 +445,7 @@
/** */
_renderDropTarget : function(){
+ this.$( '.history-drop-target' ).remove();
return $( '<div/>' ).addClass( 'history-drop-target' )
.css({
'height': '64px',
@@ -456,6 +457,7 @@
/** */
_renderDropTargetHelp : function(){
+ this.$( '.history-drop-target-help' ).remove();
return $( '<div/>' ).addClass( 'history-drop-target-help' )
.css({
'margin' : '10px 10px 4px 10px',
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 client/galaxy/scripts/mvc/history/multi-panel.js
--- a/client/galaxy/scripts/mvc/history/multi-panel.js
+++ b/client/galaxy/scripts/mvc/history/multi-panel.js
@@ -278,6 +278,9 @@
renderPanel : function renderPanel( speed ){
speed = ( speed !== undefined )?( speed ):( 'fast' );
this.panel.setElement( this.$panel() ).render( speed );
+ if( this.currentHistory ){
+ this.panel.$list().before( this.panel._renderDropTargetHelp() );
+ }
return this;
},
@@ -953,7 +956,9 @@
var currentColumn = this.columnMap[ this.currentHistoryId ];
if( !currentColumn ){ return; }
currentColumn.panel.dataDropped = HPANEL_EDIT.HistoryPanelEdit.prototype.dataDrop;
- currentColumn.panel.dropTargetOff();
+ // slight override of dropTargetOff to not erase drop-target-help
+ currentColumn.panel.dropTarget = false;
+ currentColumn.panel.$( '.history-drop-target' ).remove();
},
// ------------------------------------------------------------------------ misc
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 client/galaxy/scripts/mvc/list/list-panel.js
--- a/client/galaxy/scripts/mvc/list/list-panel.js
+++ b/client/galaxy/scripts/mvc/list/list-panel.js
@@ -399,7 +399,7 @@
panel.trigger.apply( panel, args );
});
- // drag multiple - hijack ev.setData to add all selected datasets
+ // drag multiple - hijack ev.setData to add all selected items
view.on( 'draggable:dragstart', function( ev, v ){
//TODO: set multiple drag data here
var json = {},
@@ -410,6 +410,7 @@
json = [ v.model.toJSON() ];
}
ev.dataTransfer.setData( 'text', JSON.stringify( json ) );
+ //ev.dataTransfer.setDragImage( v.el, 60, 60 );
}, this );
// debugging
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 static/scripts/mvc/history/history-panel-edit.js
--- a/static/scripts/mvc/history/history-panel-edit.js
+++ b/static/scripts/mvc/history/history-panel-edit.js
@@ -445,6 +445,7 @@
/** */
_renderDropTarget : function(){
+ this.$( '.history-drop-target' ).remove();
return $( '<div/>' ).addClass( 'history-drop-target' )
.css({
'height': '64px',
@@ -456,6 +457,7 @@
/** */
_renderDropTargetHelp : function(){
+ this.$( '.history-drop-target-help' ).remove();
return $( '<div/>' ).addClass( 'history-drop-target-help' )
.css({
'margin' : '10px 10px 4px 10px',
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 static/scripts/mvc/history/multi-panel.js
--- a/static/scripts/mvc/history/multi-panel.js
+++ b/static/scripts/mvc/history/multi-panel.js
@@ -278,6 +278,9 @@
renderPanel : function renderPanel( speed ){
speed = ( speed !== undefined )?( speed ):( 'fast' );
this.panel.setElement( this.$panel() ).render( speed );
+ if( this.currentHistory ){
+ this.panel.$list().before( this.panel._renderDropTargetHelp() );
+ }
return this;
},
@@ -953,7 +956,9 @@
var currentColumn = this.columnMap[ this.currentHistoryId ];
if( !currentColumn ){ return; }
currentColumn.panel.dataDropped = HPANEL_EDIT.HistoryPanelEdit.prototype.dataDrop;
- currentColumn.panel.dropTargetOff();
+ // slight override of dropTargetOff to not erase drop-target-help
+ currentColumn.panel.dropTarget = false;
+ currentColumn.panel.$( '.history-drop-target' ).remove();
},
// ------------------------------------------------------------------------ misc
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 static/scripts/mvc/list/list-panel.js
--- a/static/scripts/mvc/list/list-panel.js
+++ b/static/scripts/mvc/list/list-panel.js
@@ -399,7 +399,7 @@
panel.trigger.apply( panel, args );
});
- // drag multiple - hijack ev.setData to add all selected datasets
+ // drag multiple - hijack ev.setData to add all selected items
view.on( 'draggable:dragstart', function( ev, v ){
//TODO: set multiple drag data here
var json = {},
@@ -410,6 +410,7 @@
json = [ v.model.toJSON() ];
}
ev.dataTransfer.setData( 'text', JSON.stringify( json ) );
+ //ev.dataTransfer.setDragImage( v.el, 60, 60 );
}, this );
// debugging
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 static/scripts/packed/mvc/history/history-panel-edit.js
--- a/static/scripts/packed/mvc/history/history-panel-edit.js
+++ b/static/scripts/packed/mvc/history/history-panel-edit.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-panel","mvc/history/history-contents","mvc/dataset/states","mvc/history/hda-model","mvc/history/hda-li-edit","mvc/history/hdca-li-edit","mvc/tags","mvc/annotations","ui/fa-icon-button","mvc/ui/popup-menu","utils/localization"],function(h,j,m,f,e,i,l,c,b,a,d){var k=h.HistoryPanel;var g=k.extend({HDAViewClass:e.HDAListItemEdit,HDCAViewClass:i.HDCAListItemEdit,initialize:function(n){n=n||{};k.prototype.initialize.call(this,n);this.tagsEditor=null;this.annotationEditor=null;this.purgeAllowed=n.purgeAllowed||false;this.annotationEditorShown=n.annotationEditorShown||false;this.tagsEditorShown=n.tagsEditorShown||false;this.multiselectActions=n.multiselectActions||this._getActions()},_setUpListeners:function(){var n=this;k.prototype._setUpListeners.call(n);n.on("drop",function(o,p){n.dataDropped(p);n.dropTargetOff()});n.on("view:attached view:removed",function(){n._renderCounts()},n)},_setUpCollectionListeners:function(){k.prototype._setUpCollectionListeners.call(this);this.collection.on("change:deleted",this._handleHdaDeletionChange,this);this.collection.on("change:visible",this._handleHdaVisibleChange,this);this.collection.on("change:purged",function(n){this.model.fetch()},this);return this},_setUpModelListeners:function(){k.prototype._setUpModelListeners.call(this);this.model.on("change:nice_size",this.updateHistoryDiskSize,this);return this},_buildNewRender:function(){var n=k.prototype._buildNewRender.call(this);if(!this.model){return n}if(Galaxy&&Galaxy.currUser&&Galaxy.currUser.id&&Galaxy.currUser.id===this.model.get("user_id")){this._renderTags(n);this._renderAnnotation(n)}return n},renderItems:function(o){var n=k.prototype.renderItems.call(this,o);this._renderCounts(o);return n},_renderCounts:function(p){function o(s,t){return['<a class="',s,'" href="javascript:void(0);">',t,"</a>"].join("")}p=p||this.$el;var n=this.collection.where({deleted:true}),r=this.collection.where({visible:false}),q=[];if(this.views.length){q.push([this.views.length,d("shown")].join(" "))}if(n.length){q.push((!this.showDeleted)?([n.length,o("toggle-deleted-link",d("deleted"))].join(" ")):(o("toggle-deleted-link",d("hide deleted"))))}if(r.length){q.push((!this.showHidden)?([r.length,o("toggle-hidden-link",d("hidden"))].join(" ")):(o("toggle-hidden-link",d("hide hidden"))))}return p.find("> .controls .subtitle").html(q.join(", "))},_renderTags:function(n){var o=this;this.tagsEditor=new l.TagsEditor({model:this.model,el:n.find(".controls .tags-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDATagEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDATagEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history tags"),classes:"history-tag-btn",faIcon:"fa-tags"}).appendTo(n.find(".controls .actions"))})},_renderAnnotation:function(n){var o=this;this.annotationEditor=new c.AnnotationEditor({model:this.model,el:n.find(".controls .annotation-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDAAnnotationEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDAAnnotationEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history annotation"),classes:"history-annotate-btn",faIcon:"fa-comment"}).appendTo(n.find(".controls .actions"))})},_setUpBehaviors:function(n){n=n||this.$el;k.prototype._setUpBehaviors.call(this,n);if(!this.model){return}if(this.multiselectActions.length){this.actionsPopup=new a(n.find(".list-action-popup-btn"),this.multiselectActions)}if((!Galaxy.currUser||Galaxy.currUser.isAnonymous())||(Galaxy.currUser.id!==this.model.get("user_id"))){return}var o=this,p=".controls .name";n.find(p).attr("title",d("Click to rename history")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(q){var r=o.model.get("name");if(q&&q!==r){o.$el.find(p).text(q);o.model.save({name:q}).fail(function(){o.$el.find(p).text(o.model.previous("name"))})}else{o.$el.find(p).text(r)}}})},_getActions:function(){var n=this,o=[{html:d("Hide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.hide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Unhide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.unhide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Delete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype["delete"];n.getSelectedModels().ajaxQueue(p)}},{html:d("Undelete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.undelete;n.getSelectedModels().ajaxQueue(p)}}];if(n.purgeAllowed){o.push({html:d("Permanently delete datasets"),func:function(){if(confirm(d("This will permanently remove the data in your datasets. Are you sure?"))){var p=f.HistoryDatasetAssociation.prototype.purge;n.getSelectedModels().ajaxQueue(p)}}})}o.push({html:d("Build Dataset List"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"list")}});o.push({html:d("Build Dataset Pair"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"paired")}});o.push({html:d("Build List of Dataset Pairs"),func:_.bind(n._showPairedCollectionModal,n)});return o},_showPairedCollectionModal:function(){var n=this,o=n.getSelectedModels().toJSON().filter(function(p){return p.history_content_type==="dataset"&&p.state===m.OK});if(o.length){require(["mvc/collection/paired-collection-creator"],function(p){window.creator=p.pairedCollectionCreatorModal(o,{historyId:n.model.id})})}else{Galaxy.modal.show({title:d("No valid datasets were selected"),body:d(["Use the checkboxes at the left of the dataset names to select them.","Selected datasets should be error-free and should have completed running."].join(" ")),buttons:{Ok:function(){Galaxy.modal.hide()}},closing_events:true})}},_attachItems:function(n){this.$list(n).append(this.views.reverse().map(function(o){return o.$el}));return this},_attachView:function(o){var n=this;n.views.unshift(o);n.$list().prepend(o.render(0).$el.hide());n.trigger("view:attached",o);o.$el.slideDown(n.fxSpeed,function(){n.trigger("view:attached:rendered")})},_getItemViewOptions:function(o){var n=k.prototype._getItemViewOptions.call(this,o);_.extend(n,{purgeAllowed:this.purgeAllowed,tagsEditorShown:(this.tagsEditor&&!this.tagsEditor.hidden),annotationEditorShown:(this.annotationEditor&&!this.annotationEditor.hidden)});return n},_handleHdaDeletionChange:function(n){if(n.get("deleted")&&!this.showDeleted){this.removeItemView(n)}this._renderCounts()},_handleHdaVisibleChange:function(n){if(n.hidden()&&!this.storage.showHidden){this.removeItemView(n)}this._renderCounts()},toggleHDATagEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.tagsEditor){p.tagsEditor.toggle.apply(p.tagsEditor,o)}})},toggleHDAAnnotationEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.annotationEditor){p.annotationEditor.toggle.apply(p.annotationEditor,o)}})},events:_.extend(_.clone(k.prototype.events),{"click .show-selectors-btn":"toggleSelectors","click .toggle-deleted-link":function(n){this.toggleShowDeleted()},"click .toggle-hidden-link":function(n){this.toggleShowHidden()}}),updateHistoryDiskSize:function(){this.$el.find(".history-size").text(this.model.get("nice_size"))},dropTargetOn:function(){if(this.dropTarget){return this}this.dropTarget=true;var o={dragenter:_.bind(this.dragenter,this),dragover:_.bind(this.dragover,this),dragleave:_.bind(this.dragleave,this),drop:_.bind(this.drop,this)};var p=this._renderDropTarget();this.$list().before([this._renderDropTargetHelp(),p]);for(var n in o){if(o.hasOwnProperty(n)){p.on(n,o[n])}}return this},_renderDropTarget:function(){return $("<div/>").addClass("history-drop-target").css({height:"64px",margin:"0px 10px 10px 10px",border:"1px dashed black","border-radius":"3px"})},_renderDropTargetHelp:function(){return $("<div/>").addClass("history-drop-target-help").css({margin:"10px 10px 4px 10px",color:"grey","font-size":"80%","font-style":"italic"}).text(d("Drag datasets here to copy them to the current history"))},dropTargetOff:function(){if(!this.dropTarget){return this}this.dropTarget=false;this.$(".history-drop-target").remove();this.$(".history-drop-target-help").remove();return this},dropTargetToggle:function(){if(this.dropTarget){this.dropTargetOff()}else{this.dropTargetOn()}return this},dragenter:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","2px solid black")},dragover:function(n){n.preventDefault();n.stopPropagation()},dragleave:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","1px dashed black")},drop:function(p){p.preventDefault();p.dataTransfer.dropEffect="move";var n=this,q=p.dataTransfer.getData("text");try{q=JSON.parse(q)}catch(o){this.warn("error parsing JSON from drop:",q)}this.trigger("droptarget:drop",p,q,n);return false},dataDropped:function(o){var n=this;if(_.isObject(o)&&o.model_class==="HistoryDatasetAssociation"&&o.id){return n.model.contents.copy(o.id)}return jQuery.when()},toString:function(){return"HistoryPanelEdit("+((this.model)?(this.model.get("name")):(""))+")"}});return{HistoryPanelEdit:g}});
\ No newline at end of file
+define(["mvc/history/history-panel","mvc/history/history-contents","mvc/dataset/states","mvc/history/hda-model","mvc/history/hda-li-edit","mvc/history/hdca-li-edit","mvc/tags","mvc/annotations","ui/fa-icon-button","mvc/ui/popup-menu","utils/localization"],function(h,j,m,f,e,i,l,c,b,a,d){var k=h.HistoryPanel;var g=k.extend({HDAViewClass:e.HDAListItemEdit,HDCAViewClass:i.HDCAListItemEdit,initialize:function(n){n=n||{};k.prototype.initialize.call(this,n);this.tagsEditor=null;this.annotationEditor=null;this.purgeAllowed=n.purgeAllowed||false;this.annotationEditorShown=n.annotationEditorShown||false;this.tagsEditorShown=n.tagsEditorShown||false;this.multiselectActions=n.multiselectActions||this._getActions()},_setUpListeners:function(){var n=this;k.prototype._setUpListeners.call(n);n.on("drop",function(o,p){n.dataDropped(p);n.dropTargetOff()});n.on("view:attached view:removed",function(){n._renderCounts()},n)},_setUpCollectionListeners:function(){k.prototype._setUpCollectionListeners.call(this);this.collection.on("change:deleted",this._handleHdaDeletionChange,this);this.collection.on("change:visible",this._handleHdaVisibleChange,this);this.collection.on("change:purged",function(n){this.model.fetch()},this);return this},_setUpModelListeners:function(){k.prototype._setUpModelListeners.call(this);this.model.on("change:nice_size",this.updateHistoryDiskSize,this);return this},_buildNewRender:function(){var n=k.prototype._buildNewRender.call(this);if(!this.model){return n}if(Galaxy&&Galaxy.currUser&&Galaxy.currUser.id&&Galaxy.currUser.id===this.model.get("user_id")){this._renderTags(n);this._renderAnnotation(n)}return n},renderItems:function(o){var n=k.prototype.renderItems.call(this,o);this._renderCounts(o);return n},_renderCounts:function(p){function o(s,t){return['<a class="',s,'" href="javascript:void(0);">',t,"</a>"].join("")}p=p||this.$el;var n=this.collection.where({deleted:true}),r=this.collection.where({visible:false}),q=[];if(this.views.length){q.push([this.views.length,d("shown")].join(" "))}if(n.length){q.push((!this.showDeleted)?([n.length,o("toggle-deleted-link",d("deleted"))].join(" ")):(o("toggle-deleted-link",d("hide deleted"))))}if(r.length){q.push((!this.showHidden)?([r.length,o("toggle-hidden-link",d("hidden"))].join(" ")):(o("toggle-hidden-link",d("hide hidden"))))}return p.find("> .controls .subtitle").html(q.join(", "))},_renderTags:function(n){var o=this;this.tagsEditor=new l.TagsEditor({model:this.model,el:n.find(".controls .tags-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDATagEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDATagEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history tags"),classes:"history-tag-btn",faIcon:"fa-tags"}).appendTo(n.find(".controls .actions"))})},_renderAnnotation:function(n){var o=this;this.annotationEditor=new c.AnnotationEditor({model:this.model,el:n.find(".controls .annotation-display"),onshowFirstTime:function(){this.render()},onshow:function(){o.toggleHDAAnnotationEditors(true,o.fxSpeed)},onhide:function(){o.toggleHDAAnnotationEditors(false,o.fxSpeed)},$activator:b({title:d("Edit history annotation"),classes:"history-annotate-btn",faIcon:"fa-comment"}).appendTo(n.find(".controls .actions"))})},_setUpBehaviors:function(n){n=n||this.$el;k.prototype._setUpBehaviors.call(this,n);if(!this.model){return}if(this.multiselectActions.length){this.actionsPopup=new a(n.find(".list-action-popup-btn"),this.multiselectActions)}if((!Galaxy.currUser||Galaxy.currUser.isAnonymous())||(Galaxy.currUser.id!==this.model.get("user_id"))){return}var o=this,p=".controls .name";n.find(p).attr("title",d("Click to rename history")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(q){var r=o.model.get("name");if(q&&q!==r){o.$el.find(p).text(q);o.model.save({name:q}).fail(function(){o.$el.find(p).text(o.model.previous("name"))})}else{o.$el.find(p).text(r)}}})},_getActions:function(){var n=this,o=[{html:d("Hide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.hide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Unhide datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.unhide;n.getSelectedModels().ajaxQueue(p)}},{html:d("Delete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype["delete"];n.getSelectedModels().ajaxQueue(p)}},{html:d("Undelete datasets"),func:function(){var p=f.HistoryDatasetAssociation.prototype.undelete;n.getSelectedModels().ajaxQueue(p)}}];if(n.purgeAllowed){o.push({html:d("Permanently delete datasets"),func:function(){if(confirm(d("This will permanently remove the data in your datasets. Are you sure?"))){var p=f.HistoryDatasetAssociation.prototype.purge;n.getSelectedModels().ajaxQueue(p)}}})}o.push({html:d("Build Dataset List"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"list")}});o.push({html:d("Build Dataset Pair"),func:function(){n.getSelectedModels().promoteToHistoryDatasetCollection(n.model,"paired")}});o.push({html:d("Build List of Dataset Pairs"),func:_.bind(n._showPairedCollectionModal,n)});return o},_showPairedCollectionModal:function(){var n=this,o=n.getSelectedModels().toJSON().filter(function(p){return p.history_content_type==="dataset"&&p.state===m.OK});if(o.length){require(["mvc/collection/paired-collection-creator"],function(p){window.creator=p.pairedCollectionCreatorModal(o,{historyId:n.model.id})})}else{Galaxy.modal.show({title:d("No valid datasets were selected"),body:d(["Use the checkboxes at the left of the dataset names to select them.","Selected datasets should be error-free and should have completed running."].join(" ")),buttons:{Ok:function(){Galaxy.modal.hide()}},closing_events:true})}},_attachItems:function(n){this.$list(n).append(this.views.reverse().map(function(o){return o.$el}));return this},_attachView:function(o){var n=this;n.views.unshift(o);n.$list().prepend(o.render(0).$el.hide());n.trigger("view:attached",o);o.$el.slideDown(n.fxSpeed,function(){n.trigger("view:attached:rendered")})},_getItemViewOptions:function(o){var n=k.prototype._getItemViewOptions.call(this,o);_.extend(n,{purgeAllowed:this.purgeAllowed,tagsEditorShown:(this.tagsEditor&&!this.tagsEditor.hidden),annotationEditorShown:(this.annotationEditor&&!this.annotationEditor.hidden)});return n},_handleHdaDeletionChange:function(n){if(n.get("deleted")&&!this.showDeleted){this.removeItemView(n)}this._renderCounts()},_handleHdaVisibleChange:function(n){if(n.hidden()&&!this.storage.showHidden){this.removeItemView(n)}this._renderCounts()},toggleHDATagEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.tagsEditor){p.tagsEditor.toggle.apply(p.tagsEditor,o)}})},toggleHDAAnnotationEditors:function(n){var o=Array.prototype.slice.call(arguments,1);_.each(this.views,function(p){if(p.annotationEditor){p.annotationEditor.toggle.apply(p.annotationEditor,o)}})},events:_.extend(_.clone(k.prototype.events),{"click .show-selectors-btn":"toggleSelectors","click .toggle-deleted-link":function(n){this.toggleShowDeleted()},"click .toggle-hidden-link":function(n){this.toggleShowHidden()}}),updateHistoryDiskSize:function(){this.$el.find(".history-size").text(this.model.get("nice_size"))},dropTargetOn:function(){if(this.dropTarget){return this}this.dropTarget=true;var o={dragenter:_.bind(this.dragenter,this),dragover:_.bind(this.dragover,this),dragleave:_.bind(this.dragleave,this),drop:_.bind(this.drop,this)};var p=this._renderDropTarget();this.$list().before([this._renderDropTargetHelp(),p]);for(var n in o){if(o.hasOwnProperty(n)){p.on(n,o[n])}}return this},_renderDropTarget:function(){this.$(".history-drop-target").remove();return $("<div/>").addClass("history-drop-target").css({height:"64px",margin:"0px 10px 10px 10px",border:"1px dashed black","border-radius":"3px"})},_renderDropTargetHelp:function(){this.$(".history-drop-target-help").remove();return $("<div/>").addClass("history-drop-target-help").css({margin:"10px 10px 4px 10px",color:"grey","font-size":"80%","font-style":"italic"}).text(d("Drag datasets here to copy them to the current history"))},dropTargetOff:function(){if(!this.dropTarget){return this}this.dropTarget=false;this.$(".history-drop-target").remove();this.$(".history-drop-target-help").remove();return this},dropTargetToggle:function(){if(this.dropTarget){this.dropTargetOff()}else{this.dropTargetOn()}return this},dragenter:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","2px solid black")},dragover:function(n){n.preventDefault();n.stopPropagation()},dragleave:function(n){n.preventDefault();n.stopPropagation();this.$(".history-drop-target").css("border","1px dashed black")},drop:function(p){p.preventDefault();p.dataTransfer.dropEffect="move";var n=this,q=p.dataTransfer.getData("text");try{q=JSON.parse(q)}catch(o){this.warn("error parsing JSON from drop:",q)}this.trigger("droptarget:drop",p,q,n);return false},dataDropped:function(o){var n=this;if(_.isObject(o)&&o.model_class==="HistoryDatasetAssociation"&&o.id){return n.model.contents.copy(o.id)}return jQuery.when()},toString:function(){return"HistoryPanelEdit("+((this.model)?(this.model.get("name")):(""))+")"}});return{HistoryPanelEdit:g}});
\ No newline at end of file
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r a03ff352f39379b231da22259b9bde89ac7f6340 static/scripts/packed/mvc/history/multi-panel.js
--- a/static/scripts/packed/mvc/history/multi-panel.js
+++ b/static/scripts/packed/mvc/history/multi-panel.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-model","mvc/history/history-panel-edit","mvc/base-mvc","utils/ajax-queue","ui/mode-button","ui/search-input"],function(d,l,z,a){function g(I,E){E=E||{};if(!(Galaxy&&Galaxy.modal)){return I.copy()}var F=I.get("name"),C="Copy of '"+F+"'";function D(K){if(!K){if(!Galaxy.modal.$("#invalid-title").size()){var J=$("<p/>").attr("id","invalid-title").css({color:"red","margin-top":"8px"}).addClass("bg-danger").text(_l("Please enter a valid history title"));Galaxy.modal.$(".modal-body").append(J)}return false}return K}function G(J){var K=$('<p><span class="fa fa-spinner fa-spin"></span> Copying history...</p>').css("margin-top","8px");Galaxy.modal.$(".modal-body").append(K);I.copy(true,J).fail(function(){alert(_l("History could not be copied. Please contact a Galaxy administrator"))}).always(function(){Galaxy.modal.hide()})}function H(){var J=Galaxy.modal.$("#copy-modal-title").val();if(!D(J)){return}G(J)}Galaxy.modal.show(_.extend({title:_l("Copying history")+' "'+F+'"',body:$(['<label for="copy-modal-title">',_l("Enter a title for the copied history"),":","</label><br />",'<input id="copy-modal-title" class="form-control" style="width: 100%" value="',C,'" />'].join("")),buttons:{Cancel:function(){Galaxy.modal.hide()},Copy:H}},E));$("#copy-modal-title").focus().select();$("#copy-modal-title").on("keydown",function(J){if(J.keyCode===13){H()}})}var B=Backbone.View.extend(z.LoggableMixin).extend({tagName:"div",className:"history-column flex-column flex-row-container",id:function q(){if(!this.model){return""}return"history-column-"+this.model.get("id")},initialize:function c(C){C=C||{};this.panel=C.panel||this.createPanel(C);this.setUpListeners()},createPanel:function u(D){D=_.extend({model:this.model,dragItems:true},D);var C=new l.HistoryPanelEdit(D);C._renderEmptyMessage=this.__patch_renderEmptyMessage;return C},__patch_renderEmptyMessage:function(E){var D=this,F=_.chain(this.model.get("state_ids")).values().flatten().value().length,C=D.$emptyMessage(E);if(!_.isEmpty(D.hdaViews)){C.hide()}else{if(F&&!this.model.contents.length){C.empty().append($('<span class="fa fa-spinner fa-spin"></span><i>loading datasets...</i>')).show()}else{if(D.searchFor){C.text(D.noneFoundMsg).show()}else{C.text(D.emptyMsg).show()}}}return C},setUpListeners:function f(){var C=this;this.once("rendered",function(){C.trigger("rendered:initial",C)});this.setUpPanelListeners()},setUpPanelListeners:function k(){var C=this;this.listenTo(this.panel,{rendered:function(){C.trigger("rendered",C)}},this)},inView:function(C,D){var F=this.$el.offset().left,E=F+this.$el.width();if(E<C){return false}if(F>D){return false}return true},$panel:function e(){return this.$(".history-panel")},render:function A(D){D=(D!==undefined)?(D):("fast");var C=this.model?this.model.toJSON():{};this.$el.html(this.template(C));this.renderPanel(D);this.setUpBehaviors();return this},setUpBehaviors:function v(){},template:function w(D){D=D||{};var C=['<div class="panel-controls clear flex-row">',this.controlsLeftTemplate(),'<div class="pull-right">','<button class="delete-history btn btn-default">',D.deleted?_l("Undelete"):_l("Delete"),"</button>",'<button class="copy-history btn btn-default">',_l("Copy"),"</button>","</div>","</div>",'<div class="inner flex-row flex-column-container">','<div id="history-',D.id,'" class="history-column history-panel flex-column"></div>',"</div>"].join("");return $(C)},controlsLeftTemplate:function(){return(this.currentHistory)?['<div class="pull-left">','<strong class="current-label">',_l("Current History"),"</strong>","</div>"].join(""):['<div class="pull-left">','<button class="switch-to btn btn-default">',_l("Switch to"),"</button>","</div>"].join("")},renderPanel:function h(C){C=(C!==undefined)?(C):("fast");this.panel.setElement(this.$panel()).render(C);return this},events:{"click .switch-to.btn":function(){this.model.setAsCurrent()},"click .delete-history.btn":function(){var C=this,D;if(this.model.get("deleted")){D=this.model.undelete()}else{D=this.model._delete()}D.fail(function(G,E,F){alert(_l("Could not delete the history")+":\n"+F)}).done(function(E){C.render()})},"click .copy-history.btn":"copy"},copy:function s(){g(this.model)},toString:function(){return"HistoryPanelColumn("+(this.panel?this.panel:"")+")"}});var m=Backbone.View.extend(z.LoggableMixin).extend({className:"multi-history-columns",initialize:function c(C){C=C||{};this.log(this+".init",C);if(!C.currentHistoryId){throw new Error(this+" requires a currentHistoryId in the options")}this.currentHistoryId=C.currentHistoryId;this.options={columnWidth:312,borderWidth:1,columnGap:8,headerHeight:29,footerHeight:0,controlsHeight:20};this.order=C.order||"update";this.hdaQueue=new a.NamedAjaxQueue([],false);this.collection=null;this.setCollection(C.histories||[]);this.columnMap={};this.createColumns(C.columnOptions);this.setUpListeners()},setUpListeners:function f(){},setCollection:function y(D){var C=this;C.stopListening(C.collection);C.collection=D;C.sortCollection(C.order,{silent:true});C.setUpCollectionListeners();C.trigger("new-collection",C);return C},setUpCollectionListeners:function(){var C=this,D=C.collection;C.listenTo(D,{add:C.addAsCurrentColumn,"set-as-current":C.setCurrentHistory,"change:deleted":C.handleDeletedHistory,sort:function(){C.renderColumns(0)}})},setCurrentHistory:function p(D){var C=this.columnMap[this.currentHistoryId];if(C){C.currentHistory=false;C.$el.height("")}this.currentHistoryId=D.id;var E=this.columnMap[this.currentHistoryId];E.currentHistory=true;this.sortCollection();multipanel._recalcFirstColumnHeight();return E},handleDeletedHistory:function b(D){if(D.get("deleted")){this.log("handleDeletedHistory",this.collection.includeDeleted,D);var C=this;column=C.columnMap[D.id];if(!column){return}if(column.model.id===this.currentHistoryId){}else{if(!C.collection.includeDeleted){C.removeColumn(column)}}}},sortCollection:function(C,D){C=C||this.order;var E=this.currentHistoryId;switch(C){case"name":this.collection.comparator=function(F){return[F.id!==E,F.get("name").toLowerCase()]};break;case"size":this.collection.comparator=function(F){return[F.id!==E,F.get("size")]};break;default:this.collection.comparator=function(F){return[F.id!==E,Date(F.get("update_time"))]}}this.collection.sort(D);return this.collection},setOrder:function(C){if(["update","name","size"].indexOf(C)===-1){C="update"}this.order=C;this.trigger("order:change",C,this);this.$(".current-order").text(C);this.sortCollection();return this},create:function(C){return this.collection.create({current:true})},createColumns:function r(D){D=D||{};var C=this;this.columnMap={};C.collection.each(function(E,F){var G=C.createColumn(E,D);C.columnMap[E.id]=G})},createColumn:function t(E,C){C=_.extend({},C,{model:E});var D=new B(C);if(E.id===this.currentHistoryId){D.currentHistory=true}this.setUpColumnListeners(D);return D},sortedFilteredColumns:function(C){C=C||this.filters;if(!C||!C.length){return this.sortedColumns()}var D=this;return D.sortedColumns().filter(function(G,F){var E=G.currentHistory||_.every(C.map(function(H){return H.call(G)}));return E})},sortedColumns:function(){var D=this;var C=this.collection.map(function(F,E){return D.columnMap[F.id]});return C},addColumn:function o(E,C){C=C!==undefined?C:true;var D=this.createColumn(E);this.columnMap[E.id]=D;if(C){this.renderColumns()}return D},addAsCurrentColumn:function o(E){var D=this,C=this.addColumn(E,false);this.setCurrentHistory(E);C.once("rendered",function(){D.queueHdaFetch(C)});return C},removeColumn:function x(E,D){D=D!==undefined?D:true;this.log("removeColumn",E);if(!E){return}var F=this,C=this.options.columnWidth+this.options.columnGap;E.$el.fadeOut("fast",function(){if(D){$(this).remove();F.$(".middle").width(F.$(".middle").width()-C);F.checkColumnsInView();F._recalcFirstColumnHeight()}F.stopListening(E.panel);F.stopListening(E);delete F.columnMap[E.model.id];E.remove()})},setUpColumnListeners:function n(C){var D=this;D.listenTo(C,{"in-view":D.queueHdaFetch});D.listenTo(C.panel,{"view:draggable:dragstart":function(H,F,E,G){D._dropData=JSON.parse(H.dataTransfer.getData("text"));D.currentColumnDropTargetOn()},"view:draggable:dragend":function(H,F,E,G){D._dropData=null;D.currentColumnDropTargetOff()},"droptarget:drop":function(G,H,F){var I=D._dropData.filter(function(J){return(_.isObject(J)&&J.id&&J.model_class==="HistoryDatasetAssociation")});D._dropData=null;var E=new a.NamedAjaxQueue();I.forEach(function(J){E.add({name:"copy-"+J.id,fn:function(){return F.model.contents.copy(J.id)}})});E.start();E.done(function(J){F.model.fetch()})}})},columnMapLength:function(){return Object.keys(this.columnMap).length},render:function A(D){D=D!==undefined?D:this.fxSpeed;var C=this;C.log(C+".render");C.$el.html(C.mainTemplate(C));C.renderColumns(D);C.setUpBehaviors();C.trigger("rendered",C);return C},renderColumns:function j(F){F=F!==undefined?F:this.fxSpeed;var E=this,C=E.sortedFilteredColumns();E.$(".middle").width(C.length*(this.options.columnWidth+this.options.columnGap)+this.options.columnGap+16);var D=E.$(".middle");D.empty();C.forEach(function(H,G){H.$el.appendTo(D);H.delegateEvents();E.renderColumn(H,F)});if(this.searchFor&&C.length<=1){}else{E.checkColumnsInView();this._recalcFirstColumnHeight()}return C},renderColumn:function(C,D){D=D!==undefined?D:this.fxSpeed;return C.render(D)},queueHdaFetch:function i(E){if(E.model.contents.length===0&&!E.model.get("empty")){var C={},D=_.values(E.panel.storage.get("expandedIds")).join();if(D){C.dataset_details=D}this.hdaQueue.add({name:E.model.id,fn:function(){var F=E.model.contents.fetch({data:C,silent:true});return F.done(function(G){E.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},queueHdaFetchDetails:function(C){if((C.model.contents.length===0&&!C.model.get("empty"))||(!C.model.contents.haveDetails())){this.hdaQueue.add({name:C.model.id,fn:function(){var D=C.model.contents.fetch({data:{details:"all"},silent:true});return D.done(function(E){C.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},renderInfo:function(C){this.$(".header .header-info").text(C)},events:{"click .done.btn":"close","click .create-new.btn":"create","click #include-deleted":"_clickToggleDeletedHistories","click .order .order-update":function(C){this.setOrder("update")},"click .order .order-name":function(C){this.setOrder("name")},"click .order .order-size":function(C){this.setOrder("size")},"click #toggle-deleted":"_clickToggleDeletedDatasets","click #toggle-hidden":"_clickToggleHiddenDatasets"},close:function(D){var C="/";if(Galaxy&&Galaxy.options&&Galaxy.options.root){C=Galaxy.options.root}else{if(galaxy_config&&galaxy_config.root){C=galaxy_config.root}}window.location=C},_clickToggleDeletedHistories:function(C){return this.toggleDeletedHistories($(C.currentTarget).is(":checked"))},toggleDeletedHistories:function(C){if(C){window.location=Galaxy.options.root+"history/view_multiple?include_deleted_histories=True"}else{window.location=Galaxy.options.root+"history/view_multiple"}},_clickToggleDeletedDatasets:function(C){return this.toggleDeletedDatasets($(C.currentTarget).is(":checked"))},toggleDeletedDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowDeleted(C,false)},E*200)})},_clickToggleHiddenDatasets:function(C){return this.toggleHiddenDatasets($(C.currentTarget).is(":checked"))},toggleHiddenDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowHidden(C,false)},E*200)})},setUpBehaviors:function(){var D=this;D._moreOptionsPopover();D.$("#search-histories").searchInput({name:"search-histories",placeholder:_l("search histories"),onsearch:function(E){D.searchFor=E;D.filters=[function(){return this.model.matchesAll(D.searchFor)}];D.renderColumns(0)},onclear:function(E){D.searchFor=null;D.filters=[];D.renderColumns(0)}});D.$("#search-datasets").searchInput({name:"search-datasets",placeholder:_l("search all datasets"),onfirstsearch:function(E){D.hdaQueue.clear();D.$("#search-datasets").searchInput("toggle-loading");D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E);D.queueHdaFetchDetails(F)});D.hdaQueue.progress(function(F){D.renderInfo([_l("searching"),(F.curr+1),_l("of"),F.total].join(" "))});D.hdaQueue.deferred.done(function(){D.renderInfo("");D.$("#search-datasets").searchInput("toggle-loading")})},onsearch:function(E){D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E)})},onclear:function(E){D.searchFor=null;D.sortedFilteredColumns().forEach(function(F){F.panel.clearSearch()})}});$(window).resize(function(){D._recalcFirstColumnHeight()});var C=_.debounce(_.bind(this.checkColumnsInView,this),100);this.$(".middle").parent().scroll(C)},_moreOptionsPopover:function(){return this.$(".open-more-options.btn").popover({container:".header",placement:"bottom",html:true,content:$(this.optionsPopoverTemplate(this))})},_recalcFirstColumnHeight:function(){var C=this.$(".history-column").first(),E=this.$(".middle").height(),D=C.find(".panel-controls").height();C.height(E).find(".inner").height(E-D)},_viewport:function(){var C=this.$(".middle").parent().offset().left;return{left:C,right:C+this.$(".middle").parent().width()}},columnsInView:function(){var C=this._viewport();return this.sortedFilteredColumns().filter(function(D){return D.currentHistory||D.inView(C.left,C.right)})},checkColumnsInView:function(){this.columnsInView().forEach(function(C){C.trigger("in-view",C)})},currentColumnDropTargetOn:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=function(D){};C.panel.dropTargetOn()},currentColumnDropTargetOff:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=l.HistoryPanelEdit.prototype.dataDrop;C.panel.dropTargetOff()},toString:function(){return"MultiPanelColumns("+(this.columns?this.columns.length:0)+")"},mainTemplate:_.template(['<div class="header flex-column-container">','<div class="control-column control-column-left flex-column">','<button class="create-new btn btn-default">',_l("Create new"),"</button> ",'<div id="search-histories" class="search-control"></div>','<div id="search-datasets" class="search-control"></div>','<button class="open-more-options btn btn-default">','<span class="fa fa-ellipsis-h" title="More options"></span>',"</button>","</div>",'<div class="control-column control-column-center flex-column">','<div class="header-info">',"</div>","</div>",'<div class="control-column control-column-right flex-column">','<button class="done btn btn-default">',_l("Done"),"</button>","</div>","</div>",'<div class="outer-middle flex-row flex-row-container">','<div class="middle flex-column-container flex-row"></div>',"</div>",'<div class="footer flex-column-container">',"</div>"].join(""),{variable:"view"}),optionsPopoverTemplate:_.template(['<div class="more-options">','<div class="checkbox"><label><input id="include-deleted" type="checkbox"','<%= view.collection.includeDeleted? " checked" : "" %>>',_l("Include deleted histories"),"</label></div>",'<div class="order btn-group">','<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',_l("Order histories by")+" ",'<span class="current-order"><%= view.order %></span> ','<span class="caret"></span>',"</button>",'<ul class="dropdown-menu" role="menu">','<li><a href="javascript:void(0);" class="order-update">',_l("Time of last update"),"</a></li>",'<li><a href="javascript:void(0);" class="order-name">',_l("Name"),"</a></li>",'<li><a href="javascript:void(0);" class="order-size">',_l("Size"),"</a></li>","</ul>","</div>",'<div class="checkbox"><label><input id="toggle-deleted" type="checkbox">',_l("Include deleted datasets"),"</label></div>",'<div class="checkbox"><label><input id="toggle-hidden" type="checkbox">',_l("Include hidden datasets"),"</label></div>","</div>"].join(""),{variable:"view"}),});return{MultiPanelColumns:m}});
\ No newline at end of file
+define(["mvc/history/history-model","mvc/history/history-panel-edit","mvc/base-mvc","utils/ajax-queue","ui/mode-button","ui/search-input"],function(d,l,z,a){function g(I,E){E=E||{};if(!(Galaxy&&Galaxy.modal)){return I.copy()}var F=I.get("name"),C="Copy of '"+F+"'";function D(K){if(!K){if(!Galaxy.modal.$("#invalid-title").size()){var J=$("<p/>").attr("id","invalid-title").css({color:"red","margin-top":"8px"}).addClass("bg-danger").text(_l("Please enter a valid history title"));Galaxy.modal.$(".modal-body").append(J)}return false}return K}function G(J){var K=$('<p><span class="fa fa-spinner fa-spin"></span> Copying history...</p>').css("margin-top","8px");Galaxy.modal.$(".modal-body").append(K);I.copy(true,J).fail(function(){alert(_l("History could not be copied. Please contact a Galaxy administrator"))}).always(function(){Galaxy.modal.hide()})}function H(){var J=Galaxy.modal.$("#copy-modal-title").val();if(!D(J)){return}G(J)}Galaxy.modal.show(_.extend({title:_l("Copying history")+' "'+F+'"',body:$(['<label for="copy-modal-title">',_l("Enter a title for the copied history"),":","</label><br />",'<input id="copy-modal-title" class="form-control" style="width: 100%" value="',C,'" />'].join("")),buttons:{Cancel:function(){Galaxy.modal.hide()},Copy:H}},E));$("#copy-modal-title").focus().select();$("#copy-modal-title").on("keydown",function(J){if(J.keyCode===13){H()}})}var B=Backbone.View.extend(z.LoggableMixin).extend({tagName:"div",className:"history-column flex-column flex-row-container",id:function q(){if(!this.model){return""}return"history-column-"+this.model.get("id")},initialize:function c(C){C=C||{};this.panel=C.panel||this.createPanel(C);this.setUpListeners()},createPanel:function u(D){D=_.extend({model:this.model,dragItems:true},D);var C=new l.HistoryPanelEdit(D);C._renderEmptyMessage=this.__patch_renderEmptyMessage;return C},__patch_renderEmptyMessage:function(E){var D=this,F=_.chain(this.model.get("state_ids")).values().flatten().value().length,C=D.$emptyMessage(E);if(!_.isEmpty(D.hdaViews)){C.hide()}else{if(F&&!this.model.contents.length){C.empty().append($('<span class="fa fa-spinner fa-spin"></span><i>loading datasets...</i>')).show()}else{if(D.searchFor){C.text(D.noneFoundMsg).show()}else{C.text(D.emptyMsg).show()}}}return C},setUpListeners:function f(){var C=this;this.once("rendered",function(){C.trigger("rendered:initial",C)});this.setUpPanelListeners()},setUpPanelListeners:function k(){var C=this;this.listenTo(this.panel,{rendered:function(){C.trigger("rendered",C)}},this)},inView:function(C,D){var F=this.$el.offset().left,E=F+this.$el.width();if(E<C){return false}if(F>D){return false}return true},$panel:function e(){return this.$(".history-panel")},render:function A(D){D=(D!==undefined)?(D):("fast");var C=this.model?this.model.toJSON():{};this.$el.html(this.template(C));this.renderPanel(D);this.setUpBehaviors();return this},setUpBehaviors:function v(){},template:function w(D){D=D||{};var C=['<div class="panel-controls clear flex-row">',this.controlsLeftTemplate(),'<div class="pull-right">','<button class="delete-history btn btn-default">',D.deleted?_l("Undelete"):_l("Delete"),"</button>",'<button class="copy-history btn btn-default">',_l("Copy"),"</button>","</div>","</div>",'<div class="inner flex-row flex-column-container">','<div id="history-',D.id,'" class="history-column history-panel flex-column"></div>',"</div>"].join("");return $(C)},controlsLeftTemplate:function(){return(this.currentHistory)?['<div class="pull-left">','<strong class="current-label">',_l("Current History"),"</strong>","</div>"].join(""):['<div class="pull-left">','<button class="switch-to btn btn-default">',_l("Switch to"),"</button>","</div>"].join("")},renderPanel:function h(C){C=(C!==undefined)?(C):("fast");this.panel.setElement(this.$panel()).render(C);if(this.currentHistory){this.panel.$list().before(this.panel._renderDropTargetHelp())}return this},events:{"click .switch-to.btn":function(){this.model.setAsCurrent()},"click .delete-history.btn":function(){var C=this,D;if(this.model.get("deleted")){D=this.model.undelete()}else{D=this.model._delete()}D.fail(function(G,E,F){alert(_l("Could not delete the history")+":\n"+F)}).done(function(E){C.render()})},"click .copy-history.btn":"copy"},copy:function s(){g(this.model)},toString:function(){return"HistoryPanelColumn("+(this.panel?this.panel:"")+")"}});var m=Backbone.View.extend(z.LoggableMixin).extend({className:"multi-history-columns",initialize:function c(C){C=C||{};this.log(this+".init",C);if(!C.currentHistoryId){throw new Error(this+" requires a currentHistoryId in the options")}this.currentHistoryId=C.currentHistoryId;this.options={columnWidth:312,borderWidth:1,columnGap:8,headerHeight:29,footerHeight:0,controlsHeight:20};this.order=C.order||"update";this.hdaQueue=new a.NamedAjaxQueue([],false);this.collection=null;this.setCollection(C.histories||[]);this.columnMap={};this.createColumns(C.columnOptions);this.setUpListeners()},setUpListeners:function f(){},setCollection:function y(D){var C=this;C.stopListening(C.collection);C.collection=D;C.sortCollection(C.order,{silent:true});C.setUpCollectionListeners();C.trigger("new-collection",C);return C},setUpCollectionListeners:function(){var C=this,D=C.collection;C.listenTo(D,{add:C.addAsCurrentColumn,"set-as-current":C.setCurrentHistory,"change:deleted":C.handleDeletedHistory,sort:function(){C.renderColumns(0)}})},setCurrentHistory:function p(D){var C=this.columnMap[this.currentHistoryId];if(C){C.currentHistory=false;C.$el.height("")}this.currentHistoryId=D.id;var E=this.columnMap[this.currentHistoryId];E.currentHistory=true;this.sortCollection();multipanel._recalcFirstColumnHeight();return E},handleDeletedHistory:function b(D){if(D.get("deleted")){this.log("handleDeletedHistory",this.collection.includeDeleted,D);var C=this;column=C.columnMap[D.id];if(!column){return}if(column.model.id===this.currentHistoryId){}else{if(!C.collection.includeDeleted){C.removeColumn(column)}}}},sortCollection:function(C,D){C=C||this.order;var E=this.currentHistoryId;switch(C){case"name":this.collection.comparator=function(F){return[F.id!==E,F.get("name").toLowerCase()]};break;case"size":this.collection.comparator=function(F){return[F.id!==E,F.get("size")]};break;default:this.collection.comparator=function(F){return[F.id!==E,Date(F.get("update_time"))]}}this.collection.sort(D);return this.collection},setOrder:function(C){if(["update","name","size"].indexOf(C)===-1){C="update"}this.order=C;this.trigger("order:change",C,this);this.$(".current-order").text(C);this.sortCollection();return this},create:function(C){return this.collection.create({current:true})},createColumns:function r(D){D=D||{};var C=this;this.columnMap={};C.collection.each(function(E,F){var G=C.createColumn(E,D);C.columnMap[E.id]=G})},createColumn:function t(E,C){C=_.extend({},C,{model:E});var D=new B(C);if(E.id===this.currentHistoryId){D.currentHistory=true}this.setUpColumnListeners(D);return D},sortedFilteredColumns:function(C){C=C||this.filters;if(!C||!C.length){return this.sortedColumns()}var D=this;return D.sortedColumns().filter(function(G,F){var E=G.currentHistory||_.every(C.map(function(H){return H.call(G)}));return E})},sortedColumns:function(){var D=this;var C=this.collection.map(function(F,E){return D.columnMap[F.id]});return C},addColumn:function o(E,C){C=C!==undefined?C:true;var D=this.createColumn(E);this.columnMap[E.id]=D;if(C){this.renderColumns()}return D},addAsCurrentColumn:function o(E){var D=this,C=this.addColumn(E,false);this.setCurrentHistory(E);C.once("rendered",function(){D.queueHdaFetch(C)});return C},removeColumn:function x(E,D){D=D!==undefined?D:true;this.log("removeColumn",E);if(!E){return}var F=this,C=this.options.columnWidth+this.options.columnGap;E.$el.fadeOut("fast",function(){if(D){$(this).remove();F.$(".middle").width(F.$(".middle").width()-C);F.checkColumnsInView();F._recalcFirstColumnHeight()}F.stopListening(E.panel);F.stopListening(E);delete F.columnMap[E.model.id];E.remove()})},setUpColumnListeners:function n(C){var D=this;D.listenTo(C,{"in-view":D.queueHdaFetch});D.listenTo(C.panel,{"view:draggable:dragstart":function(H,F,E,G){D._dropData=JSON.parse(H.dataTransfer.getData("text"));D.currentColumnDropTargetOn()},"view:draggable:dragend":function(H,F,E,G){D._dropData=null;D.currentColumnDropTargetOff()},"droptarget:drop":function(G,H,F){var I=D._dropData.filter(function(J){return(_.isObject(J)&&J.id&&J.model_class==="HistoryDatasetAssociation")});D._dropData=null;var E=new a.NamedAjaxQueue();I.forEach(function(J){E.add({name:"copy-"+J.id,fn:function(){return F.model.contents.copy(J.id)}})});E.start();E.done(function(J){F.model.fetch()})}})},columnMapLength:function(){return Object.keys(this.columnMap).length},render:function A(D){D=D!==undefined?D:this.fxSpeed;var C=this;C.log(C+".render");C.$el.html(C.mainTemplate(C));C.renderColumns(D);C.setUpBehaviors();C.trigger("rendered",C);return C},renderColumns:function j(F){F=F!==undefined?F:this.fxSpeed;var E=this,C=E.sortedFilteredColumns();E.$(".middle").width(C.length*(this.options.columnWidth+this.options.columnGap)+this.options.columnGap+16);var D=E.$(".middle");D.empty();C.forEach(function(H,G){H.$el.appendTo(D);H.delegateEvents();E.renderColumn(H,F)});if(this.searchFor&&C.length<=1){}else{E.checkColumnsInView();this._recalcFirstColumnHeight()}return C},renderColumn:function(C,D){D=D!==undefined?D:this.fxSpeed;return C.render(D)},queueHdaFetch:function i(E){if(E.model.contents.length===0&&!E.model.get("empty")){var C={},D=_.values(E.panel.storage.get("expandedIds")).join();if(D){C.dataset_details=D}this.hdaQueue.add({name:E.model.id,fn:function(){var F=E.model.contents.fetch({data:C,silent:true});return F.done(function(G){E.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},queueHdaFetchDetails:function(C){if((C.model.contents.length===0&&!C.model.get("empty"))||(!C.model.contents.haveDetails())){this.hdaQueue.add({name:C.model.id,fn:function(){var D=C.model.contents.fetch({data:{details:"all"},silent:true});return D.done(function(E){C.panel.renderItems()})}});if(!this.hdaQueue.running){this.hdaQueue.start()}}},renderInfo:function(C){this.$(".header .header-info").text(C)},events:{"click .done.btn":"close","click .create-new.btn":"create","click #include-deleted":"_clickToggleDeletedHistories","click .order .order-update":function(C){this.setOrder("update")},"click .order .order-name":function(C){this.setOrder("name")},"click .order .order-size":function(C){this.setOrder("size")},"click #toggle-deleted":"_clickToggleDeletedDatasets","click #toggle-hidden":"_clickToggleHiddenDatasets"},close:function(D){var C="/";if(Galaxy&&Galaxy.options&&Galaxy.options.root){C=Galaxy.options.root}else{if(galaxy_config&&galaxy_config.root){C=galaxy_config.root}}window.location=C},_clickToggleDeletedHistories:function(C){return this.toggleDeletedHistories($(C.currentTarget).is(":checked"))},toggleDeletedHistories:function(C){if(C){window.location=Galaxy.options.root+"history/view_multiple?include_deleted_histories=True"}else{window.location=Galaxy.options.root+"history/view_multiple"}},_clickToggleDeletedDatasets:function(C){return this.toggleDeletedDatasets($(C.currentTarget).is(":checked"))},toggleDeletedDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowDeleted(C,false)},E*200)})},_clickToggleHiddenDatasets:function(C){return this.toggleHiddenDatasets($(C.currentTarget).is(":checked"))},toggleHiddenDatasets:function(C){C=C!==undefined?C:false;var D=this;D.sortedFilteredColumns().forEach(function(F,E){_.delay(function(){F.panel.toggleShowHidden(C,false)},E*200)})},setUpBehaviors:function(){var D=this;D._moreOptionsPopover();D.$("#search-histories").searchInput({name:"search-histories",placeholder:_l("search histories"),onsearch:function(E){D.searchFor=E;D.filters=[function(){return this.model.matchesAll(D.searchFor)}];D.renderColumns(0)},onclear:function(E){D.searchFor=null;D.filters=[];D.renderColumns(0)}});D.$("#search-datasets").searchInput({name:"search-datasets",placeholder:_l("search all datasets"),onfirstsearch:function(E){D.hdaQueue.clear();D.$("#search-datasets").searchInput("toggle-loading");D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E);D.queueHdaFetchDetails(F)});D.hdaQueue.progress(function(F){D.renderInfo([_l("searching"),(F.curr+1),_l("of"),F.total].join(" "))});D.hdaQueue.deferred.done(function(){D.renderInfo("");D.$("#search-datasets").searchInput("toggle-loading")})},onsearch:function(E){D.searchFor=E;D.sortedFilteredColumns().forEach(function(F){F.panel.searchItems(E)})},onclear:function(E){D.searchFor=null;D.sortedFilteredColumns().forEach(function(F){F.panel.clearSearch()})}});$(window).resize(function(){D._recalcFirstColumnHeight()});var C=_.debounce(_.bind(this.checkColumnsInView,this),100);this.$(".middle").parent().scroll(C)},_moreOptionsPopover:function(){return this.$(".open-more-options.btn").popover({container:".header",placement:"bottom",html:true,content:$(this.optionsPopoverTemplate(this))})},_recalcFirstColumnHeight:function(){var C=this.$(".history-column").first(),E=this.$(".middle").height(),D=C.find(".panel-controls").height();C.height(E).find(".inner").height(E-D)},_viewport:function(){var C=this.$(".middle").parent().offset().left;return{left:C,right:C+this.$(".middle").parent().width()}},columnsInView:function(){var C=this._viewport();return this.sortedFilteredColumns().filter(function(D){return D.currentHistory||D.inView(C.left,C.right)})},checkColumnsInView:function(){this.columnsInView().forEach(function(C){C.trigger("in-view",C)})},currentColumnDropTargetOn:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=function(D){};C.panel.dropTargetOn()},currentColumnDropTargetOff:function(){var C=this.columnMap[this.currentHistoryId];if(!C){return}C.panel.dataDropped=l.HistoryPanelEdit.prototype.dataDrop;C.panel.dropTarget=false;C.panel.$(".history-drop-target").remove()},toString:function(){return"MultiPanelColumns("+(this.columns?this.columns.length:0)+")"},mainTemplate:_.template(['<div class="header flex-column-container">','<div class="control-column control-column-left flex-column">','<button class="create-new btn btn-default">',_l("Create new"),"</button> ",'<div id="search-histories" class="search-control"></div>','<div id="search-datasets" class="search-control"></div>','<button class="open-more-options btn btn-default">','<span class="fa fa-ellipsis-h" title="More options"></span>',"</button>","</div>",'<div class="control-column control-column-center flex-column">','<div class="header-info">',"</div>","</div>",'<div class="control-column control-column-right flex-column">','<button class="done btn btn-default">',_l("Done"),"</button>","</div>","</div>",'<div class="outer-middle flex-row flex-row-container">','<div class="middle flex-column-container flex-row"></div>',"</div>",'<div class="footer flex-column-container">',"</div>"].join(""),{variable:"view"}),optionsPopoverTemplate:_.template(['<div class="more-options">','<div class="checkbox"><label><input id="include-deleted" type="checkbox"','<%= view.collection.includeDeleted? " checked" : "" %>>',_l("Include deleted histories"),"</label></div>",'<div class="order btn-group">','<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',_l("Order histories by")+" ",'<span class="current-order"><%= view.order %></span> ','<span class="caret"></span>',"</button>",'<ul class="dropdown-menu" role="menu">','<li><a href="javascript:void(0);" class="order-update">',_l("Time of last update"),"</a></li>",'<li><a href="javascript:void(0);" class="order-name">',_l("Name"),"</a></li>",'<li><a href="javascript:void(0);" class="order-size">',_l("Size"),"</a></li>","</ul>","</div>",'<div class="checkbox"><label><input id="toggle-deleted" type="checkbox">',_l("Include deleted datasets"),"</label></div>",'<div class="checkbox"><label><input id="toggle-hidden" type="checkbox">',_l("Include hidden datasets"),"</label></div>","</div>"].join(""),{variable:"view"}),});return{MultiPanelColumns:m}});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/51a3606fe3bd/
Changeset: 51a3606fe3bd
User: carlfeberhard
Date: 2015-02-12 16:18:40+00:00
Summary: Merge
Affected #: 6 files
diff -r a03ff352f39379b231da22259b9bde89ac7f6340 -r 51a3606fe3bdf21d663b35d41c886ff819fd234d client/galaxy/scripts/mvc/tools/tools-parameters.js
--- /dev/null
+++ b/client/galaxy/scripts/mvc/tools/tools-parameters.js
@@ -0,0 +1,247 @@
+/**
+ This class creates input elements. New input parameter types should be added to the types dictionary.
+*/
+define(['utils/utils','mvc/ui/ui-misc', 'mvc/tools/tools-select-content'],
+ function(Utils, Ui, SelectContent) {
+
+ // create form view
+ return Backbone.Model.extend({
+ /** Available parameter types */
+ types: {
+ 'text' : '_fieldText',
+ 'select' : '_fieldSelect',
+ 'data_column' : '_fieldSelect',
+ 'genomebuild' : '_fieldSelect',
+ 'data' : '_fieldData',
+ 'data_collection' : '_fieldData',
+ 'integer' : '_fieldSlider',
+ 'float' : '_fieldSlider',
+ 'boolean' : '_fieldBoolean',
+ 'drill_down' : '_fieldDrilldown',
+ 'hidden' : '_fieldHidden',
+ 'hidden_data' : '_fieldHidden',
+ 'baseurl' : '_fieldHidden'
+ },
+
+ // initialize
+ initialize: function(app, options) {
+ this.app = app;
+ },
+
+ /** Returns an input field for a given field type
+ */
+ create: function(input_def) {
+ // add regular/default value if missing
+ if (input_def.value === undefined) {
+ input_def.value = null;
+ }
+ if (input_def.default_value === undefined) {
+ input_def.default_value = input_def.value;
+ }
+
+ // field wrapper
+ var field = null;
+
+ // get field class
+ var fieldClass = this.types[input_def.type];
+ if (fieldClass && typeof(this[fieldClass]) === 'function') {
+ field = this[fieldClass].call(this, input_def);
+ }
+
+ // identify field type
+ if (!field) {
+ // flag
+ this.app.incompatible = true;
+
+ // with or without options
+ if (input_def.options) {
+ // assign select field
+ field = this._fieldSelect(input_def);
+ } else {
+ // assign text field
+ field = this._fieldText(input_def);
+ }
+
+ // log
+ console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
+ }
+
+ // set field value
+ if (input_def.value !== undefined) {
+ field.value(input_def.value);
+ }
+
+ // return field element
+ return field;
+ },
+
+ /** Data input field
+ */
+ _fieldData : function(input_def) {
+ if (!this.app.options.is_dynamic) {
+ input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
+ input_def.value = null;
+ return this._fieldHidden(input_def);
+ }
+ var self = this;
+ return new SelectContent.View(this.app, {
+ id : 'field-' + input_def.id,
+ extensions : input_def.extensions,
+ optional : input_def.optional,
+ multiple : input_def.multiple,
+ type : input_def.type,
+ data : input_def.options,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Select/Checkbox/Radio options field
+ */
+ _fieldSelect : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // customize properties
+ if (input_def.type == 'data_column') {
+ input_def.error_text = 'Missing columns in referenced dataset.'
+ }
+ if (input_def.type == 'genomebuild') {
+ input_def.searchable = true;
+ }
+
+ // configure options fields
+ var options = [];
+ for (var i in input_def.options) {
+ var option = input_def.options[i];
+ options.push({
+ label: option[0],
+ value: option[1]
+ });
+ }
+
+ // identify display type
+ var SelectClass = Ui.Select;
+ switch (input_def.display) {
+ case 'checkboxes':
+ SelectClass = Ui.Checkbox;
+ break;
+ case 'radio':
+ SelectClass = Ui.Radio;
+ break;
+ }
+
+ // select field
+ var self = this;
+ return new SelectClass.View({
+ id : 'field-' + input_def.id,
+ data : options,
+ error_text : input_def.error_text || 'No options available',
+ multiple : input_def.multiple,
+ searchable : input_def.searchable,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Drill down options field
+ */
+ _fieldDrilldown : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // create drill down field
+ var self = this;
+ return new Ui.Drilldown.View({
+ id : 'field-' + input_def.id,
+ data : input_def.options,
+ display : input_def.display,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Text input field
+ */
+ _fieldText : function(input_def) {
+ // field replaces e.g. a select field
+ if (input_def.options) {
+ // show text area if selecting multiple entries is allowed
+ input_def.area = input_def.multiple;
+
+ // validate value
+ if (!Utils.validate(input_def.value)) {
+ input_def.value = '';
+ } else {
+ if (input_def.value instanceof Array) {
+ input_def.value = value.toString();
+ } else {
+ input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
+ if (input_def.multiple) {
+ input_def.value = input_def.value.replace(/,/g, '\n');
+ }
+ }
+ }
+ }
+
+ // create input element
+ var self = this;
+ return new Ui.Input({
+ id : 'field-' + input_def.id,
+ area : input_def.area,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Slider field
+ */
+ _fieldSlider: function(input_def) {
+ var self = this;
+ return new Ui.Slider.View({
+ id : 'field-' + input_def.id,
+ precise : input_def.type == 'float',
+ min : input_def.min,
+ max : input_def.max,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Hidden field
+ */
+ _fieldHidden : function(input_def) {
+ return new Ui.Hidden({
+ id : 'field-' + input_def.id,
+ info : input_def.info
+ });
+ },
+
+ /** Boolean field
+ */
+ _fieldBoolean : function(input_def) {
+ var self = this;
+ return new Ui.RadioButton.View({
+ id : 'field-' + input_def.id,
+ data : [ { label : 'Yes', value : 'true' },
+ { label : 'No', value : 'false' }],
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ }
+ });
+
+ return {
+ View: View
+ };
+});
diff -r a03ff352f39379b231da22259b9bde89ac7f6340 -r 51a3606fe3bdf21d663b35d41c886ff819fd234d client/galaxy/scripts/mvc/tools/tools-section.js
--- a/client/galaxy/scripts/mvc/tools/tools-section.js
+++ b/client/galaxy/scripts/mvc/tools/tools-section.js
@@ -1,8 +1,14 @@
/**
- This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections. New input elements can be plugged in by adding cases to the switch block defined in the _createField() function.
+ This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.
*/
-define(['utils/utils', 'mvc/ui/ui-table', 'mvc/ui/ui-misc', 'mvc/ui/ui-portlet', 'mvc/tools/tools-repeat', 'mvc/tools/tools-select-content', 'mvc/tools/tools-input'],
- function(Utils, Table, Ui, Portlet, Repeat, SelectContent, InputElement) {
+define(['utils/utils',
+ 'mvc/ui/ui-table',
+ 'mvc/ui/ui-misc',
+ 'mvc/ui/ui-portlet',
+ 'mvc/tools/tools-repeat',
+ 'mvc/tools/tools-input',
+ 'mvc/tools/tools-parameters'],
+ function(Utils, Table, Ui, Portlet, Repeat, InputElement, Parameters) {
// create form view
var View = Backbone.View.extend({
@@ -23,6 +29,9 @@
// create table
this.table = new Table.View(options);
+
+ // create parameter handler
+ this.parameters = new Parameters(app, options);
// configure portlet and form table
this.setElement(this.table.$el);
@@ -294,16 +303,8 @@
// get id
var id = input_def.id;
- // add regular/default value if missing
- if (input_def.value === undefined) {
- input_def.value = null;
- }
- if (input_def.default_value === undefined) {
- input_def.default_value = input_def.value;
- }
-
// create input field
- var field = this._createField(input_def);
+ var field = this.parameters.create(input_def);
// add to field list
this.app.field_list[id] = field;
@@ -333,265 +334,6 @@
// return created field
return field;
- },
-
- /** Returns an input field for a given field type
- */
- _createField: function(input_def) {
- // field wrapper
- var field = null;
-
- // identify field type
- switch(input_def.type) {
- // text input field
- case 'text' :
- field = this._fieldText(input_def);
- break;
-
- // select field
- case 'select' :
- field = this._fieldSelect(input_def);
- break;
-
- // data selector
- case 'data':
- field = this._fieldData(input_def);
- break;
-
- // collection selector
- case 'data_collection':
- field = this._fieldData(input_def);
- break;
-
- // data column
- case 'data_column':
- input_def.error_text = 'Missing columns in referenced dataset.';
- field = this._fieldSelect(input_def);
- break;
-
- // hidden field
- case 'hidden':
- field = this._fieldHidden(input_def);
- break;
-
- // hidden data field
- case 'hidden_data':
- field = this._fieldHidden(input_def);
- break;
-
- // integer field
- case 'integer':
- field = this._fieldSlider(input_def);
- break;
-
- // float field
- case 'float':
- field = this._fieldSlider(input_def);
- break;
-
- // boolean field
- case 'boolean':
- field = this._fieldBoolean(input_def);
- break;
-
- // genome field
- case 'genomebuild':
- input_def.searchable = true;
- field = this._fieldSelect(input_def);
- break;
-
- // drill down field
- case 'drill_down':
- field = this._fieldDrilldown(input_def);
- break;
-
- // base url field
- case 'baseurl':
- field = this._fieldHidden(input_def);
- break;
-
- // field not found
- default:
- // flag
- this.app.incompatible = true;
-
- // with or without options
- if (input_def.options) {
- // assign select field
- field = this._fieldSelect(input_def);
- } else {
- // assign text field
- field = this._fieldText(input_def);
- }
-
- // log
- console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
- }
-
- // set field value
- if (input_def.value !== undefined) {
- field.value(input_def.value);
- }
-
- // return field element
- return field;
- },
-
- /** Data input field
- */
- _fieldData : function(input_def) {
- if (!this.app.options.is_dynamic) {
- input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
- input_def.value = null;
- return this._fieldHidden(input_def);
- }
- var self = this;
- return new SelectContent.View(this.app, {
- id : 'field-' + input_def.id,
- extensions : input_def.extensions,
- optional : input_def.optional,
- multiple : input_def.multiple,
- type : input_def.type,
- data : input_def.options,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Select/Checkbox/Radio options field
- */
- _fieldSelect : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // configure options fields
- var options = [];
- for (var i in input_def.options) {
- var option = input_def.options[i];
- options.push({
- label: option[0],
- value: option[1]
- });
- }
-
- // identify display type
- var SelectClass = Ui.Select;
- switch (input_def.display) {
- case 'checkboxes':
- SelectClass = Ui.Checkbox;
- break;
- case 'radio':
- SelectClass = Ui.Radio;
- break;
- }
-
- // select field
- var self = this;
- return new SelectClass.View({
- id : 'field-' + input_def.id,
- data : options,
- error_text : input_def.error_text || 'No options available',
- multiple : input_def.multiple,
- searchable : input_def.searchable,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Drill down options field
- */
- _fieldDrilldown : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // create drill down field
- var self = this;
- return new Ui.Drilldown.View({
- id : 'field-' + input_def.id,
- data : input_def.options,
- display : input_def.display,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Text input field
- */
- _fieldText : function(input_def) {
- // field replaces e.g. a select field
- if (input_def.options) {
- // show text area if selecting multiple entries is allowed
- input_def.area = input_def.multiple;
-
- // validate value
- if (!Utils.validate(input_def.value)) {
- input_def.value = '';
- } else {
- if (input_def.value instanceof Array) {
- input_def.value = value.toString();
- } else {
- input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
- if (input_def.multiple) {
- input_def.value = input_def.value.replace(/,/g, '\n');
- }
- }
- }
- }
-
- // create input element
- var self = this;
- return new Ui.Input({
- id : 'field-' + input_def.id,
- area : input_def.area,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Slider field
- */
- _fieldSlider: function(input_def) {
- var self = this;
- return new Ui.Slider.View({
- id : 'field-' + input_def.id,
- precise : input_def.type == 'float',
- min : input_def.min,
- max : input_def.max,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Hidden field
- */
- _fieldHidden : function(input_def) {
- return new Ui.Hidden({
- id : 'field-' + input_def.id,
- info : input_def.info
- });
- },
-
- /** Boolean field
- */
- _fieldBoolean : function(input_def) {
- var self = this;
- return new Ui.RadioButton.View({
- id : 'field-' + input_def.id,
- data : [ { label : 'Yes', value : 'true' },
- { label : 'No', value : 'false' }],
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
}
});
diff -r a03ff352f39379b231da22259b9bde89ac7f6340 -r 51a3606fe3bdf21d663b35d41c886ff819fd234d static/scripts/mvc/tools/tools-parameters.js
--- /dev/null
+++ b/static/scripts/mvc/tools/tools-parameters.js
@@ -0,0 +1,247 @@
+/**
+ This class creates input elements. New input parameter types should be added to the types dictionary.
+*/
+define(['utils/utils','mvc/ui/ui-misc', 'mvc/tools/tools-select-content'],
+ function(Utils, Ui, SelectContent) {
+
+ // create form view
+ return Backbone.Model.extend({
+ /** Available parameter types */
+ types: {
+ 'text' : '_fieldText',
+ 'select' : '_fieldSelect',
+ 'data_column' : '_fieldSelect',
+ 'genomebuild' : '_fieldSelect',
+ 'data' : '_fieldData',
+ 'data_collection' : '_fieldData',
+ 'integer' : '_fieldSlider',
+ 'float' : '_fieldSlider',
+ 'boolean' : '_fieldBoolean',
+ 'drill_down' : '_fieldDrilldown',
+ 'hidden' : '_fieldHidden',
+ 'hidden_data' : '_fieldHidden',
+ 'baseurl' : '_fieldHidden'
+ },
+
+ // initialize
+ initialize: function(app, options) {
+ this.app = app;
+ },
+
+ /** Returns an input field for a given field type
+ */
+ create: function(input_def) {
+ // add regular/default value if missing
+ if (input_def.value === undefined) {
+ input_def.value = null;
+ }
+ if (input_def.default_value === undefined) {
+ input_def.default_value = input_def.value;
+ }
+
+ // field wrapper
+ var field = null;
+
+ // get field class
+ var fieldClass = this.types[input_def.type];
+ if (fieldClass && typeof(this[fieldClass]) === 'function') {
+ field = this[fieldClass].call(this, input_def);
+ }
+
+ // identify field type
+ if (!field) {
+ // flag
+ this.app.incompatible = true;
+
+ // with or without options
+ if (input_def.options) {
+ // assign select field
+ field = this._fieldSelect(input_def);
+ } else {
+ // assign text field
+ field = this._fieldText(input_def);
+ }
+
+ // log
+ console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
+ }
+
+ // set field value
+ if (input_def.value !== undefined) {
+ field.value(input_def.value);
+ }
+
+ // return field element
+ return field;
+ },
+
+ /** Data input field
+ */
+ _fieldData : function(input_def) {
+ if (!this.app.options.is_dynamic) {
+ input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
+ input_def.value = null;
+ return this._fieldHidden(input_def);
+ }
+ var self = this;
+ return new SelectContent.View(this.app, {
+ id : 'field-' + input_def.id,
+ extensions : input_def.extensions,
+ optional : input_def.optional,
+ multiple : input_def.multiple,
+ type : input_def.type,
+ data : input_def.options,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Select/Checkbox/Radio options field
+ */
+ _fieldSelect : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // customize properties
+ if (input_def.type == 'data_column') {
+ input_def.error_text = 'Missing columns in referenced dataset.'
+ }
+ if (input_def.type == 'genomebuild') {
+ input_def.searchable = true;
+ }
+
+ // configure options fields
+ var options = [];
+ for (var i in input_def.options) {
+ var option = input_def.options[i];
+ options.push({
+ label: option[0],
+ value: option[1]
+ });
+ }
+
+ // identify display type
+ var SelectClass = Ui.Select;
+ switch (input_def.display) {
+ case 'checkboxes':
+ SelectClass = Ui.Checkbox;
+ break;
+ case 'radio':
+ SelectClass = Ui.Radio;
+ break;
+ }
+
+ // select field
+ var self = this;
+ return new SelectClass.View({
+ id : 'field-' + input_def.id,
+ data : options,
+ error_text : input_def.error_text || 'No options available',
+ multiple : input_def.multiple,
+ searchable : input_def.searchable,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Drill down options field
+ */
+ _fieldDrilldown : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // create drill down field
+ var self = this;
+ return new Ui.Drilldown.View({
+ id : 'field-' + input_def.id,
+ data : input_def.options,
+ display : input_def.display,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Text input field
+ */
+ _fieldText : function(input_def) {
+ // field replaces e.g. a select field
+ if (input_def.options) {
+ // show text area if selecting multiple entries is allowed
+ input_def.area = input_def.multiple;
+
+ // validate value
+ if (!Utils.validate(input_def.value)) {
+ input_def.value = '';
+ } else {
+ if (input_def.value instanceof Array) {
+ input_def.value = value.toString();
+ } else {
+ input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
+ if (input_def.multiple) {
+ input_def.value = input_def.value.replace(/,/g, '\n');
+ }
+ }
+ }
+ }
+
+ // create input element
+ var self = this;
+ return new Ui.Input({
+ id : 'field-' + input_def.id,
+ area : input_def.area,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Slider field
+ */
+ _fieldSlider: function(input_def) {
+ var self = this;
+ return new Ui.Slider.View({
+ id : 'field-' + input_def.id,
+ precise : input_def.type == 'float',
+ min : input_def.min,
+ max : input_def.max,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Hidden field
+ */
+ _fieldHidden : function(input_def) {
+ return new Ui.Hidden({
+ id : 'field-' + input_def.id,
+ info : input_def.info
+ });
+ },
+
+ /** Boolean field
+ */
+ _fieldBoolean : function(input_def) {
+ var self = this;
+ return new Ui.RadioButton.View({
+ id : 'field-' + input_def.id,
+ data : [ { label : 'Yes', value : 'true' },
+ { label : 'No', value : 'false' }],
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ }
+ });
+
+ return {
+ View: View
+ };
+});
diff -r a03ff352f39379b231da22259b9bde89ac7f6340 -r 51a3606fe3bdf21d663b35d41c886ff819fd234d static/scripts/mvc/tools/tools-section.js
--- a/static/scripts/mvc/tools/tools-section.js
+++ b/static/scripts/mvc/tools/tools-section.js
@@ -1,8 +1,14 @@
/**
- This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections. New input elements can be plugged in by adding cases to the switch block defined in the _createField() function.
+ This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.
*/
-define(['utils/utils', 'mvc/ui/ui-table', 'mvc/ui/ui-misc', 'mvc/ui/ui-portlet', 'mvc/tools/tools-repeat', 'mvc/tools/tools-select-content', 'mvc/tools/tools-input'],
- function(Utils, Table, Ui, Portlet, Repeat, SelectContent, InputElement) {
+define(['utils/utils',
+ 'mvc/ui/ui-table',
+ 'mvc/ui/ui-misc',
+ 'mvc/ui/ui-portlet',
+ 'mvc/tools/tools-repeat',
+ 'mvc/tools/tools-input',
+ 'mvc/tools/tools-parameters'],
+ function(Utils, Table, Ui, Portlet, Repeat, InputElement, Parameters) {
// create form view
var View = Backbone.View.extend({
@@ -23,6 +29,9 @@
// create table
this.table = new Table.View(options);
+
+ // create parameter handler
+ this.parameters = new Parameters(app, options);
// configure portlet and form table
this.setElement(this.table.$el);
@@ -294,16 +303,8 @@
// get id
var id = input_def.id;
- // add regular/default value if missing
- if (input_def.value === undefined) {
- input_def.value = null;
- }
- if (input_def.default_value === undefined) {
- input_def.default_value = input_def.value;
- }
-
// create input field
- var field = this._createField(input_def);
+ var field = this.parameters.create(input_def);
// add to field list
this.app.field_list[id] = field;
@@ -333,265 +334,6 @@
// return created field
return field;
- },
-
- /** Returns an input field for a given field type
- */
- _createField: function(input_def) {
- // field wrapper
- var field = null;
-
- // identify field type
- switch(input_def.type) {
- // text input field
- case 'text' :
- field = this._fieldText(input_def);
- break;
-
- // select field
- case 'select' :
- field = this._fieldSelect(input_def);
- break;
-
- // data selector
- case 'data':
- field = this._fieldData(input_def);
- break;
-
- // collection selector
- case 'data_collection':
- field = this._fieldData(input_def);
- break;
-
- // data column
- case 'data_column':
- input_def.error_text = 'Missing columns in referenced dataset.';
- field = this._fieldSelect(input_def);
- break;
-
- // hidden field
- case 'hidden':
- field = this._fieldHidden(input_def);
- break;
-
- // hidden data field
- case 'hidden_data':
- field = this._fieldHidden(input_def);
- break;
-
- // integer field
- case 'integer':
- field = this._fieldSlider(input_def);
- break;
-
- // float field
- case 'float':
- field = this._fieldSlider(input_def);
- break;
-
- // boolean field
- case 'boolean':
- field = this._fieldBoolean(input_def);
- break;
-
- // genome field
- case 'genomebuild':
- input_def.searchable = true;
- field = this._fieldSelect(input_def);
- break;
-
- // drill down field
- case 'drill_down':
- field = this._fieldDrilldown(input_def);
- break;
-
- // base url field
- case 'baseurl':
- field = this._fieldHidden(input_def);
- break;
-
- // field not found
- default:
- // flag
- this.app.incompatible = true;
-
- // with or without options
- if (input_def.options) {
- // assign select field
- field = this._fieldSelect(input_def);
- } else {
- // assign text field
- field = this._fieldText(input_def);
- }
-
- // log
- console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
- }
-
- // set field value
- if (input_def.value !== undefined) {
- field.value(input_def.value);
- }
-
- // return field element
- return field;
- },
-
- /** Data input field
- */
- _fieldData : function(input_def) {
- if (!this.app.options.is_dynamic) {
- input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
- input_def.value = null;
- return this._fieldHidden(input_def);
- }
- var self = this;
- return new SelectContent.View(this.app, {
- id : 'field-' + input_def.id,
- extensions : input_def.extensions,
- optional : input_def.optional,
- multiple : input_def.multiple,
- type : input_def.type,
- data : input_def.options,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Select/Checkbox/Radio options field
- */
- _fieldSelect : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // configure options fields
- var options = [];
- for (var i in input_def.options) {
- var option = input_def.options[i];
- options.push({
- label: option[0],
- value: option[1]
- });
- }
-
- // identify display type
- var SelectClass = Ui.Select;
- switch (input_def.display) {
- case 'checkboxes':
- SelectClass = Ui.Checkbox;
- break;
- case 'radio':
- SelectClass = Ui.Radio;
- break;
- }
-
- // select field
- var self = this;
- return new SelectClass.View({
- id : 'field-' + input_def.id,
- data : options,
- error_text : input_def.error_text || 'No options available',
- multiple : input_def.multiple,
- searchable : input_def.searchable,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Drill down options field
- */
- _fieldDrilldown : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // create drill down field
- var self = this;
- return new Ui.Drilldown.View({
- id : 'field-' + input_def.id,
- data : input_def.options,
- display : input_def.display,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Text input field
- */
- _fieldText : function(input_def) {
- // field replaces e.g. a select field
- if (input_def.options) {
- // show text area if selecting multiple entries is allowed
- input_def.area = input_def.multiple;
-
- // validate value
- if (!Utils.validate(input_def.value)) {
- input_def.value = '';
- } else {
- if (input_def.value instanceof Array) {
- input_def.value = value.toString();
- } else {
- input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
- if (input_def.multiple) {
- input_def.value = input_def.value.replace(/,/g, '\n');
- }
- }
- }
- }
-
- // create input element
- var self = this;
- return new Ui.Input({
- id : 'field-' + input_def.id,
- area : input_def.area,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Slider field
- */
- _fieldSlider: function(input_def) {
- var self = this;
- return new Ui.Slider.View({
- id : 'field-' + input_def.id,
- precise : input_def.type == 'float',
- min : input_def.min,
- max : input_def.max,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Hidden field
- */
- _fieldHidden : function(input_def) {
- return new Ui.Hidden({
- id : 'field-' + input_def.id,
- info : input_def.info
- });
- },
-
- /** Boolean field
- */
- _fieldBoolean : function(input_def) {
- var self = this;
- return new Ui.RadioButton.View({
- id : 'field-' + input_def.id,
- data : [ { label : 'Yes', value : 'true' },
- { label : 'No', value : 'false' }],
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
}
});
diff -r a03ff352f39379b231da22259b9bde89ac7f6340 -r 51a3606fe3bdf21d663b35d41c886ff819fd234d static/scripts/packed/mvc/tools/tools-parameters.js
--- /dev/null
+++ b/static/scripts/packed/mvc/tools/tools-parameters.js
@@ -0,0 +1,1 @@
+define(["utils/utils","mvc/ui/ui-misc","mvc/tools/tools-select-content"],function(b,c,a){return Backbone.Model.extend({types:{text:"_fieldText",select:"_fieldSelect",data_column:"_fieldSelect",genomebuild:"_fieldSelect",data:"_fieldData",data_collection:"_fieldData",integer:"_fieldSlider","float":"_fieldSlider","boolean":"_fieldBoolean",drill_down:"_fieldDrilldown",hidden:"_fieldHidden",hidden_data:"_fieldHidden",baseurl:"_fieldHidden"},initialize:function(e,d){this.app=e},create:function(d){if(d.value===undefined){d.value=null}if(d.default_value===undefined){d.default_value=d.value}var f=null;var e=this.types[d.type];if(e&&typeof(this[e])==="function"){f=this[e].call(this,d)}if(!f){this.app.incompatible=true;if(d.options){f=this._fieldSelect(d)}else{f=this._fieldText(d)}console.debug("tools-form::_addRow() : Auto matched field type ("+d.type+").")}if(d.value!==undefined){f.value(d.value)}return f},_fieldData:function(d){if(!this.app.options.is_dynamic){d.info="Data input '"+d.name+"' ("+b.textify(d.extensions.toString())+")";d.value=null;return this._fieldHidden(d)}var e=this;return new a.View(this.app,{id:"field-"+d.id,extensions:d.extensions,optional:d.optional,multiple:d.multiple,type:d.type,data:d.options,onchange:function(){e.app.trigger("refresh")}})},_fieldSelect:function(d){if(!this.app.options.is_dynamic&&d.is_dynamic){return this._fieldText(d)}if(d.type=="data_column"){d.error_text="Missing columns in referenced dataset."}if(d.type=="genomebuild"){d.searchable=true}var f=[];for(var g in d.options){var h=d.options[g];f.push({label:h[0],value:h[1]})}var j=c.Select;switch(d.display){case"checkboxes":j=c.Checkbox;break;case"radio":j=c.Radio;break}var e=this;return new j.View({id:"field-"+d.id,data:f,error_text:d.error_text||"No options available",multiple:d.multiple,searchable:d.searchable,onchange:function(){e.app.trigger("refresh")}})},_fieldDrilldown:function(d){if(!this.app.options.is_dynamic&&d.is_dynamic){return this._fieldText(d)}var e=this;return new c.Drilldown.View({id:"field-"+d.id,data:d.options,display:d.display,onchange:function(){e.app.trigger("refresh")}})},_fieldText:function(d){if(d.options){d.area=d.multiple;if(!b.validate(d.value)){d.value=""}else{if(d.value instanceof Array){d.value=value.toString()}else{d.value=String(d.value).replace(/[\[\]'"\s]/g,"");if(d.multiple){d.value=d.value.replace(/,/g,"\n")}}}}var e=this;return new c.Input({id:"field-"+d.id,area:d.area,onchange:function(){e.app.trigger("refresh")}})},_fieldSlider:function(d){var e=this;return new c.Slider.View({id:"field-"+d.id,precise:d.type=="float",min:d.min,max:d.max,onchange:function(){e.app.trigger("refresh")}})},_fieldHidden:function(d){return new c.Hidden({id:"field-"+d.id,info:d.info})},_fieldBoolean:function(d){var e=this;return new c.RadioButton.View({id:"field-"+d.id,data:[{label:"Yes",value:"true"},{label:"No",value:"false"}],onchange:function(){e.app.trigger("refresh")}})}});return{View:View}});
\ No newline at end of file
diff -r a03ff352f39379b231da22259b9bde89ac7f6340 -r 51a3606fe3bdf21d663b35d41c886ff819fd234d static/scripts/packed/mvc/tools/tools-section.js
--- a/static/scripts/packed/mvc/tools/tools-section.js
+++ b/static/scripts/packed/mvc/tools/tools-section.js
@@ -1,1 +1,1 @@
-define(["utils/utils","mvc/ui/ui-table","mvc/ui/ui-misc","mvc/ui/ui-portlet","mvc/tools/tools-repeat","mvc/tools/tools-select-content","mvc/tools/tools-input"],function(e,b,h,d,c,a,f){var g=Backbone.View.extend({initialize:function(j,i){this.app=j;this.inputs=i.inputs;i.cls="ui-table-plain";i.cls_tr="section-row";this.table=new b.View(i);this.setElement(this.table.$el);this.render()},render:function(){this.table.delAll();for(var j in this.inputs){this.add(this.inputs[j])}},add:function(k){var j=this;var i=jQuery.extend(true,{},k);i.id=k.id=e.uuid();this.app.input_list[i.id]=i;var l=i.type;switch(l){case"conditional":this._addConditional(i);break;case"repeat":this._addRepeat(i);break;case"section":this._addSection(i);break;default:this._addRow(i)}},_addConditional:function(j){var k=this;j.test_param.id=j.id;var n=this._addRow(j.test_param);n.options.onchange=function(w){var v=k.app.tree.matchCase(j,w);for(var u in j.cases){var q=j.cases[u];var t=j.id+"-section-"+u;var p=k.table.get(t);var s=false;for(var r in q.inputs){if(!q.inputs[r].hidden){s=true;break}}if(u==v&&s){p.fadeIn("fast")}else{p.hide()}}k.app.trigger("refresh")};for(var m in j.cases){var l=j.id+"-section-"+m;var o=new g(this.app,{inputs:j.cases[m].inputs});o.$el.addClass("ui-table-section");this.table.add(o.$el);this.table.append(l)}n.trigger("change")},_addRepeat:function(p){var s=this;var q=0;var l=new c.View({title:p.title,title_new:p.title,min:p.min,max:p.max,onnew:function(){n(p.inputs);s.app.trigger("refresh")}});function n(i){var t=p.id+"-section-"+(q++);var u=new g(s.app,{inputs:i});l.add({id:t,$el:u.$el,ondel:function(){l.del(t);s.app.trigger("refresh")}})}var j=p.min;var r=_.size(p.cache);for(var m=0;m<Math.max(r,j);m++){var o=null;if(m<r){o=p.cache[m]}else{o=p.inputs}n(o)}var k=new f(this.app,{label:p.title,help:p.help,field:l});this.table.add(k.$el);this.table.append(p.id)},_addSection:function(i){var j=this;var n=new g(j.app,{inputs:i.inputs});var m=new h.ButtonIcon({icon:"fa-eye-slash",tooltip:"Show/hide section",cls:"ui-button-icon-plain"});var l=new d.View({title:i.label,cls:"ui-portlet-section",operations:{button_visible:m}});l.append(n.$el);l.append($("<div/>").addClass("ui-table-form-info").html(i.help));var k=false;l.$content.hide();l.$header.css("cursor","pointer");l.$header.on("click",function(){if(k){k=false;l.$content.hide();m.setIcon("fa-eye-slash")}else{k=true;l.$content.fadeIn("fast");m.setIcon("fa-eye")}});if(i.expand){l.$header.trigger("click")}this.table.add(l.$el);this.table.append(i.id)},_addRow:function(i){var l=i.id;if(i.value===undefined){i.value=null}if(i.default_value===undefined){i.default_value=i.value}var j=this._createField(i);this.app.field_list[l]=j;var k=new f(this.app,{label:i.label,default_value:i.default_value,optional:i.optional,help:i.help,field:j});this.app.element_list[l]=k;this.table.add(k.$el);this.table.append(l);if(i.hidden){this.table.get(l).hide()}return j},_createField:function(i){var j=null;switch(i.type){case"text":j=this._fieldText(i);break;case"select":j=this._fieldSelect(i);break;case"data":j=this._fieldData(i);break;case"data_collection":j=this._fieldData(i);break;case"data_column":i.error_text="Missing columns in referenced dataset.";j=this._fieldSelect(i);break;case"hidden":j=this._fieldHidden(i);break;case"hidden_data":j=this._fieldHidden(i);break;case"integer":j=this._fieldSlider(i);break;case"float":j=this._fieldSlider(i);break;case"boolean":j=this._fieldBoolean(i);break;case"genomebuild":i.searchable=true;j=this._fieldSelect(i);break;case"drill_down":j=this._fieldDrilldown(i);break;case"baseurl":j=this._fieldHidden(i);break;default:this.app.incompatible=true;if(i.options){j=this._fieldSelect(i)}else{j=this._fieldText(i)}console.debug("tools-form::_addRow() : Auto matched field type ("+i.type+").")}if(i.value!==undefined){j.value(i.value)}return j},_fieldData:function(i){if(!this.app.options.is_dynamic){i.info="Data input '"+i.name+"' ("+e.textify(i.extensions.toString())+")";i.value=null;return this._fieldHidden(i)}var j=this;return new a.View(this.app,{id:"field-"+i.id,extensions:i.extensions,optional:i.optional,multiple:i.multiple,type:i.type,data:i.options,onchange:function(){j.app.trigger("refresh")}})},_fieldSelect:function(j){if(!this.app.options.is_dynamic&&j.is_dynamic){return this._fieldText(j)}var l=[];for(var m in j.options){var n=j.options[m];l.push({label:n[0],value:n[1]})}var o=h.Select;switch(j.display){case"checkboxes":o=h.Checkbox;break;case"radio":o=h.Radio;break}var k=this;return new o.View({id:"field-"+j.id,data:l,error_text:j.error_text||"No options available",multiple:j.multiple,searchable:j.searchable,onchange:function(){k.app.trigger("refresh")}})},_fieldDrilldown:function(i){if(!this.app.options.is_dynamic&&i.is_dynamic){return this._fieldText(i)}var j=this;return new h.Drilldown.View({id:"field-"+i.id,data:i.options,display:i.display,onchange:function(){j.app.trigger("refresh")}})},_fieldText:function(i){if(i.options){i.area=i.multiple;if(!e.validate(i.value)){i.value=""}else{if(i.value instanceof Array){i.value=value.toString()}else{i.value=String(i.value).replace(/[\[\]'"\s]/g,"");if(i.multiple){i.value=i.value.replace(/,/g,"\n")}}}}var j=this;return new h.Input({id:"field-"+i.id,area:i.area,onchange:function(){j.app.trigger("refresh")}})},_fieldSlider:function(i){var j=this;return new h.Slider.View({id:"field-"+i.id,precise:i.type=="float",min:i.min,max:i.max,onchange:function(){j.app.trigger("refresh")}})},_fieldHidden:function(i){return new h.Hidden({id:"field-"+i.id,info:i.info})},_fieldBoolean:function(i){var j=this;return new h.RadioButton.View({id:"field-"+i.id,data:[{label:"Yes",value:"true"},{label:"No",value:"false"}],onchange:function(){j.app.trigger("refresh")}})}});return{View:g}});
\ No newline at end of file
+define(["utils/utils","mvc/ui/ui-table","mvc/ui/ui-misc","mvc/ui/ui-portlet","mvc/tools/tools-repeat","mvc/tools/tools-input","mvc/tools/tools-parameters"],function(e,a,h,d,c,f,b){var g=Backbone.View.extend({initialize:function(j,i){this.app=j;this.inputs=i.inputs;i.cls="ui-table-plain";i.cls_tr="section-row";this.table=new a.View(i);this.parameters=new b(j,i);this.setElement(this.table.$el);this.render()},render:function(){this.table.delAll();for(var j in this.inputs){this.add(this.inputs[j])}},add:function(k){var j=this;var i=jQuery.extend(true,{},k);i.id=k.id=e.uuid();this.app.input_list[i.id]=i;var l=i.type;switch(l){case"conditional":this._addConditional(i);break;case"repeat":this._addRepeat(i);break;case"section":this._addSection(i);break;default:this._addRow(i)}},_addConditional:function(j){var k=this;j.test_param.id=j.id;var n=this._addRow(j.test_param);n.options.onchange=function(w){var v=k.app.tree.matchCase(j,w);for(var u in j.cases){var q=j.cases[u];var t=j.id+"-section-"+u;var p=k.table.get(t);var s=false;for(var r in q.inputs){if(!q.inputs[r].hidden){s=true;break}}if(u==v&&s){p.fadeIn("fast")}else{p.hide()}}k.app.trigger("refresh")};for(var m in j.cases){var l=j.id+"-section-"+m;var o=new g(this.app,{inputs:j.cases[m].inputs});o.$el.addClass("ui-table-section");this.table.add(o.$el);this.table.append(l)}n.trigger("change")},_addRepeat:function(p){var s=this;var q=0;var l=new c.View({title:p.title,title_new:p.title,min:p.min,max:p.max,onnew:function(){n(p.inputs);s.app.trigger("refresh")}});function n(i){var t=p.id+"-section-"+(q++);var u=new g(s.app,{inputs:i});l.add({id:t,$el:u.$el,ondel:function(){l.del(t);s.app.trigger("refresh")}})}var j=p.min;var r=_.size(p.cache);for(var m=0;m<Math.max(r,j);m++){var o=null;if(m<r){o=p.cache[m]}else{o=p.inputs}n(o)}var k=new f(this.app,{label:p.title,help:p.help,field:l});this.table.add(k.$el);this.table.append(p.id)},_addSection:function(i){var j=this;var n=new g(j.app,{inputs:i.inputs});var m=new h.ButtonIcon({icon:"fa-eye-slash",tooltip:"Show/hide section",cls:"ui-button-icon-plain"});var l=new d.View({title:i.label,cls:"ui-portlet-section",operations:{button_visible:m}});l.append(n.$el);l.append($("<div/>").addClass("ui-table-form-info").html(i.help));var k=false;l.$content.hide();l.$header.css("cursor","pointer");l.$header.on("click",function(){if(k){k=false;l.$content.hide();m.setIcon("fa-eye-slash")}else{k=true;l.$content.fadeIn("fast");m.setIcon("fa-eye")}});if(i.expand){l.$header.trigger("click")}this.table.add(l.$el);this.table.append(i.id)},_addRow:function(i){var l=i.id;var j=this.parameters.create(i);this.app.field_list[l]=j;var k=new f(this.app,{label:i.label,default_value:i.default_value,optional:i.optional,help:i.help,field:j});this.app.element_list[l]=k;this.table.add(k.$el);this.table.append(l);if(i.hidden){this.table.get(l).hide()}return j}});return{View:g}});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: guerler: ToolForm: Separate tool parameters from sections
by commits-noreply@bitbucket.org 12 Feb '15
by commits-noreply@bitbucket.org 12 Feb '15
12 Feb '15
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/f8012e167c9d/
Changeset: f8012e167c9d
User: guerler
Date: 2015-02-12 16:10:14+00:00
Summary: ToolForm: Separate tool parameters from sections
Affected #: 6 files
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r f8012e167c9d569cd06140d28e3def5135ba3ed9 client/galaxy/scripts/mvc/tools/tools-parameters.js
--- /dev/null
+++ b/client/galaxy/scripts/mvc/tools/tools-parameters.js
@@ -0,0 +1,247 @@
+/**
+ This class creates input elements. New input parameter types should be added to the types dictionary.
+*/
+define(['utils/utils','mvc/ui/ui-misc', 'mvc/tools/tools-select-content'],
+ function(Utils, Ui, SelectContent) {
+
+ // create form view
+ return Backbone.Model.extend({
+ /** Available parameter types */
+ types: {
+ 'text' : '_fieldText',
+ 'select' : '_fieldSelect',
+ 'data_column' : '_fieldSelect',
+ 'genomebuild' : '_fieldSelect',
+ 'data' : '_fieldData',
+ 'data_collection' : '_fieldData',
+ 'integer' : '_fieldSlider',
+ 'float' : '_fieldSlider',
+ 'boolean' : '_fieldBoolean',
+ 'drill_down' : '_fieldDrilldown',
+ 'hidden' : '_fieldHidden',
+ 'hidden_data' : '_fieldHidden',
+ 'baseurl' : '_fieldHidden'
+ },
+
+ // initialize
+ initialize: function(app, options) {
+ this.app = app;
+ },
+
+ /** Returns an input field for a given field type
+ */
+ create: function(input_def) {
+ // add regular/default value if missing
+ if (input_def.value === undefined) {
+ input_def.value = null;
+ }
+ if (input_def.default_value === undefined) {
+ input_def.default_value = input_def.value;
+ }
+
+ // field wrapper
+ var field = null;
+
+ // get field class
+ var fieldClass = this.types[input_def.type];
+ if (fieldClass && typeof(this[fieldClass]) === 'function') {
+ field = this[fieldClass].call(this, input_def);
+ }
+
+ // identify field type
+ if (!field) {
+ // flag
+ this.app.incompatible = true;
+
+ // with or without options
+ if (input_def.options) {
+ // assign select field
+ field = this._fieldSelect(input_def);
+ } else {
+ // assign text field
+ field = this._fieldText(input_def);
+ }
+
+ // log
+ console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
+ }
+
+ // set field value
+ if (input_def.value !== undefined) {
+ field.value(input_def.value);
+ }
+
+ // return field element
+ return field;
+ },
+
+ /** Data input field
+ */
+ _fieldData : function(input_def) {
+ if (!this.app.options.is_dynamic) {
+ input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
+ input_def.value = null;
+ return this._fieldHidden(input_def);
+ }
+ var self = this;
+ return new SelectContent.View(this.app, {
+ id : 'field-' + input_def.id,
+ extensions : input_def.extensions,
+ optional : input_def.optional,
+ multiple : input_def.multiple,
+ type : input_def.type,
+ data : input_def.options,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Select/Checkbox/Radio options field
+ */
+ _fieldSelect : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // customize properties
+ if (input_def.type == 'data_column') {
+ input_def.error_text = 'Missing columns in referenced dataset.'
+ }
+ if (input_def.type == 'genomebuild') {
+ input_def.searchable = true;
+ }
+
+ // configure options fields
+ var options = [];
+ for (var i in input_def.options) {
+ var option = input_def.options[i];
+ options.push({
+ label: option[0],
+ value: option[1]
+ });
+ }
+
+ // identify display type
+ var SelectClass = Ui.Select;
+ switch (input_def.display) {
+ case 'checkboxes':
+ SelectClass = Ui.Checkbox;
+ break;
+ case 'radio':
+ SelectClass = Ui.Radio;
+ break;
+ }
+
+ // select field
+ var self = this;
+ return new SelectClass.View({
+ id : 'field-' + input_def.id,
+ data : options,
+ error_text : input_def.error_text || 'No options available',
+ multiple : input_def.multiple,
+ searchable : input_def.searchable,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Drill down options field
+ */
+ _fieldDrilldown : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // create drill down field
+ var self = this;
+ return new Ui.Drilldown.View({
+ id : 'field-' + input_def.id,
+ data : input_def.options,
+ display : input_def.display,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Text input field
+ */
+ _fieldText : function(input_def) {
+ // field replaces e.g. a select field
+ if (input_def.options) {
+ // show text area if selecting multiple entries is allowed
+ input_def.area = input_def.multiple;
+
+ // validate value
+ if (!Utils.validate(input_def.value)) {
+ input_def.value = '';
+ } else {
+ if (input_def.value instanceof Array) {
+ input_def.value = value.toString();
+ } else {
+ input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
+ if (input_def.multiple) {
+ input_def.value = input_def.value.replace(/,/g, '\n');
+ }
+ }
+ }
+ }
+
+ // create input element
+ var self = this;
+ return new Ui.Input({
+ id : 'field-' + input_def.id,
+ area : input_def.area,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Slider field
+ */
+ _fieldSlider: function(input_def) {
+ var self = this;
+ return new Ui.Slider.View({
+ id : 'field-' + input_def.id,
+ precise : input_def.type == 'float',
+ min : input_def.min,
+ max : input_def.max,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Hidden field
+ */
+ _fieldHidden : function(input_def) {
+ return new Ui.Hidden({
+ id : 'field-' + input_def.id,
+ info : input_def.info
+ });
+ },
+
+ /** Boolean field
+ */
+ _fieldBoolean : function(input_def) {
+ var self = this;
+ return new Ui.RadioButton.View({
+ id : 'field-' + input_def.id,
+ data : [ { label : 'Yes', value : 'true' },
+ { label : 'No', value : 'false' }],
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ }
+ });
+
+ return {
+ View: View
+ };
+});
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r f8012e167c9d569cd06140d28e3def5135ba3ed9 client/galaxy/scripts/mvc/tools/tools-section.js
--- a/client/galaxy/scripts/mvc/tools/tools-section.js
+++ b/client/galaxy/scripts/mvc/tools/tools-section.js
@@ -1,8 +1,14 @@
/**
- This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections. New input elements can be plugged in by adding cases to the switch block defined in the _createField() function.
+ This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.
*/
-define(['utils/utils', 'mvc/ui/ui-table', 'mvc/ui/ui-misc', 'mvc/ui/ui-portlet', 'mvc/tools/tools-repeat', 'mvc/tools/tools-select-content', 'mvc/tools/tools-input'],
- function(Utils, Table, Ui, Portlet, Repeat, SelectContent, InputElement) {
+define(['utils/utils',
+ 'mvc/ui/ui-table',
+ 'mvc/ui/ui-misc',
+ 'mvc/ui/ui-portlet',
+ 'mvc/tools/tools-repeat',
+ 'mvc/tools/tools-input',
+ 'mvc/tools/tools-parameters'],
+ function(Utils, Table, Ui, Portlet, Repeat, InputElement, Parameters) {
// create form view
var View = Backbone.View.extend({
@@ -23,6 +29,9 @@
// create table
this.table = new Table.View(options);
+
+ // create parameter handler
+ this.parameters = new Parameters(app, options);
// configure portlet and form table
this.setElement(this.table.$el);
@@ -294,16 +303,8 @@
// get id
var id = input_def.id;
- // add regular/default value if missing
- if (input_def.value === undefined) {
- input_def.value = null;
- }
- if (input_def.default_value === undefined) {
- input_def.default_value = input_def.value;
- }
-
// create input field
- var field = this._createField(input_def);
+ var field = this.parameters.create(input_def);
// add to field list
this.app.field_list[id] = field;
@@ -333,265 +334,6 @@
// return created field
return field;
- },
-
- /** Returns an input field for a given field type
- */
- _createField: function(input_def) {
- // field wrapper
- var field = null;
-
- // identify field type
- switch(input_def.type) {
- // text input field
- case 'text' :
- field = this._fieldText(input_def);
- break;
-
- // select field
- case 'select' :
- field = this._fieldSelect(input_def);
- break;
-
- // data selector
- case 'data':
- field = this._fieldData(input_def);
- break;
-
- // collection selector
- case 'data_collection':
- field = this._fieldData(input_def);
- break;
-
- // data column
- case 'data_column':
- input_def.error_text = 'Missing columns in referenced dataset.';
- field = this._fieldSelect(input_def);
- break;
-
- // hidden field
- case 'hidden':
- field = this._fieldHidden(input_def);
- break;
-
- // hidden data field
- case 'hidden_data':
- field = this._fieldHidden(input_def);
- break;
-
- // integer field
- case 'integer':
- field = this._fieldSlider(input_def);
- break;
-
- // float field
- case 'float':
- field = this._fieldSlider(input_def);
- break;
-
- // boolean field
- case 'boolean':
- field = this._fieldBoolean(input_def);
- break;
-
- // genome field
- case 'genomebuild':
- input_def.searchable = true;
- field = this._fieldSelect(input_def);
- break;
-
- // drill down field
- case 'drill_down':
- field = this._fieldDrilldown(input_def);
- break;
-
- // base url field
- case 'baseurl':
- field = this._fieldHidden(input_def);
- break;
-
- // field not found
- default:
- // flag
- this.app.incompatible = true;
-
- // with or without options
- if (input_def.options) {
- // assign select field
- field = this._fieldSelect(input_def);
- } else {
- // assign text field
- field = this._fieldText(input_def);
- }
-
- // log
- console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
- }
-
- // set field value
- if (input_def.value !== undefined) {
- field.value(input_def.value);
- }
-
- // return field element
- return field;
- },
-
- /** Data input field
- */
- _fieldData : function(input_def) {
- if (!this.app.options.is_dynamic) {
- input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
- input_def.value = null;
- return this._fieldHidden(input_def);
- }
- var self = this;
- return new SelectContent.View(this.app, {
- id : 'field-' + input_def.id,
- extensions : input_def.extensions,
- optional : input_def.optional,
- multiple : input_def.multiple,
- type : input_def.type,
- data : input_def.options,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Select/Checkbox/Radio options field
- */
- _fieldSelect : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // configure options fields
- var options = [];
- for (var i in input_def.options) {
- var option = input_def.options[i];
- options.push({
- label: option[0],
- value: option[1]
- });
- }
-
- // identify display type
- var SelectClass = Ui.Select;
- switch (input_def.display) {
- case 'checkboxes':
- SelectClass = Ui.Checkbox;
- break;
- case 'radio':
- SelectClass = Ui.Radio;
- break;
- }
-
- // select field
- var self = this;
- return new SelectClass.View({
- id : 'field-' + input_def.id,
- data : options,
- error_text : input_def.error_text || 'No options available',
- multiple : input_def.multiple,
- searchable : input_def.searchable,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Drill down options field
- */
- _fieldDrilldown : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // create drill down field
- var self = this;
- return new Ui.Drilldown.View({
- id : 'field-' + input_def.id,
- data : input_def.options,
- display : input_def.display,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Text input field
- */
- _fieldText : function(input_def) {
- // field replaces e.g. a select field
- if (input_def.options) {
- // show text area if selecting multiple entries is allowed
- input_def.area = input_def.multiple;
-
- // validate value
- if (!Utils.validate(input_def.value)) {
- input_def.value = '';
- } else {
- if (input_def.value instanceof Array) {
- input_def.value = value.toString();
- } else {
- input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
- if (input_def.multiple) {
- input_def.value = input_def.value.replace(/,/g, '\n');
- }
- }
- }
- }
-
- // create input element
- var self = this;
- return new Ui.Input({
- id : 'field-' + input_def.id,
- area : input_def.area,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Slider field
- */
- _fieldSlider: function(input_def) {
- var self = this;
- return new Ui.Slider.View({
- id : 'field-' + input_def.id,
- precise : input_def.type == 'float',
- min : input_def.min,
- max : input_def.max,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Hidden field
- */
- _fieldHidden : function(input_def) {
- return new Ui.Hidden({
- id : 'field-' + input_def.id,
- info : input_def.info
- });
- },
-
- /** Boolean field
- */
- _fieldBoolean : function(input_def) {
- var self = this;
- return new Ui.RadioButton.View({
- id : 'field-' + input_def.id,
- data : [ { label : 'Yes', value : 'true' },
- { label : 'No', value : 'false' }],
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
}
});
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r f8012e167c9d569cd06140d28e3def5135ba3ed9 static/scripts/mvc/tools/tools-parameters.js
--- /dev/null
+++ b/static/scripts/mvc/tools/tools-parameters.js
@@ -0,0 +1,247 @@
+/**
+ This class creates input elements. New input parameter types should be added to the types dictionary.
+*/
+define(['utils/utils','mvc/ui/ui-misc', 'mvc/tools/tools-select-content'],
+ function(Utils, Ui, SelectContent) {
+
+ // create form view
+ return Backbone.Model.extend({
+ /** Available parameter types */
+ types: {
+ 'text' : '_fieldText',
+ 'select' : '_fieldSelect',
+ 'data_column' : '_fieldSelect',
+ 'genomebuild' : '_fieldSelect',
+ 'data' : '_fieldData',
+ 'data_collection' : '_fieldData',
+ 'integer' : '_fieldSlider',
+ 'float' : '_fieldSlider',
+ 'boolean' : '_fieldBoolean',
+ 'drill_down' : '_fieldDrilldown',
+ 'hidden' : '_fieldHidden',
+ 'hidden_data' : '_fieldHidden',
+ 'baseurl' : '_fieldHidden'
+ },
+
+ // initialize
+ initialize: function(app, options) {
+ this.app = app;
+ },
+
+ /** Returns an input field for a given field type
+ */
+ create: function(input_def) {
+ // add regular/default value if missing
+ if (input_def.value === undefined) {
+ input_def.value = null;
+ }
+ if (input_def.default_value === undefined) {
+ input_def.default_value = input_def.value;
+ }
+
+ // field wrapper
+ var field = null;
+
+ // get field class
+ var fieldClass = this.types[input_def.type];
+ if (fieldClass && typeof(this[fieldClass]) === 'function') {
+ field = this[fieldClass].call(this, input_def);
+ }
+
+ // identify field type
+ if (!field) {
+ // flag
+ this.app.incompatible = true;
+
+ // with or without options
+ if (input_def.options) {
+ // assign select field
+ field = this._fieldSelect(input_def);
+ } else {
+ // assign text field
+ field = this._fieldText(input_def);
+ }
+
+ // log
+ console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
+ }
+
+ // set field value
+ if (input_def.value !== undefined) {
+ field.value(input_def.value);
+ }
+
+ // return field element
+ return field;
+ },
+
+ /** Data input field
+ */
+ _fieldData : function(input_def) {
+ if (!this.app.options.is_dynamic) {
+ input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
+ input_def.value = null;
+ return this._fieldHidden(input_def);
+ }
+ var self = this;
+ return new SelectContent.View(this.app, {
+ id : 'field-' + input_def.id,
+ extensions : input_def.extensions,
+ optional : input_def.optional,
+ multiple : input_def.multiple,
+ type : input_def.type,
+ data : input_def.options,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Select/Checkbox/Radio options field
+ */
+ _fieldSelect : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // customize properties
+ if (input_def.type == 'data_column') {
+ input_def.error_text = 'Missing columns in referenced dataset.'
+ }
+ if (input_def.type == 'genomebuild') {
+ input_def.searchable = true;
+ }
+
+ // configure options fields
+ var options = [];
+ for (var i in input_def.options) {
+ var option = input_def.options[i];
+ options.push({
+ label: option[0],
+ value: option[1]
+ });
+ }
+
+ // identify display type
+ var SelectClass = Ui.Select;
+ switch (input_def.display) {
+ case 'checkboxes':
+ SelectClass = Ui.Checkbox;
+ break;
+ case 'radio':
+ SelectClass = Ui.Radio;
+ break;
+ }
+
+ // select field
+ var self = this;
+ return new SelectClass.View({
+ id : 'field-' + input_def.id,
+ data : options,
+ error_text : input_def.error_text || 'No options available',
+ multiple : input_def.multiple,
+ searchable : input_def.searchable,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Drill down options field
+ */
+ _fieldDrilldown : function (input_def) {
+ // show text field in if dynamic fields are disabled e.g. in workflow editor
+ if (!this.app.options.is_dynamic && input_def.is_dynamic) {
+ return this._fieldText(input_def);
+ }
+
+ // create drill down field
+ var self = this;
+ return new Ui.Drilldown.View({
+ id : 'field-' + input_def.id,
+ data : input_def.options,
+ display : input_def.display,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Text input field
+ */
+ _fieldText : function(input_def) {
+ // field replaces e.g. a select field
+ if (input_def.options) {
+ // show text area if selecting multiple entries is allowed
+ input_def.area = input_def.multiple;
+
+ // validate value
+ if (!Utils.validate(input_def.value)) {
+ input_def.value = '';
+ } else {
+ if (input_def.value instanceof Array) {
+ input_def.value = value.toString();
+ } else {
+ input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
+ if (input_def.multiple) {
+ input_def.value = input_def.value.replace(/,/g, '\n');
+ }
+ }
+ }
+ }
+
+ // create input element
+ var self = this;
+ return new Ui.Input({
+ id : 'field-' + input_def.id,
+ area : input_def.area,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Slider field
+ */
+ _fieldSlider: function(input_def) {
+ var self = this;
+ return new Ui.Slider.View({
+ id : 'field-' + input_def.id,
+ precise : input_def.type == 'float',
+ min : input_def.min,
+ max : input_def.max,
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ },
+
+ /** Hidden field
+ */
+ _fieldHidden : function(input_def) {
+ return new Ui.Hidden({
+ id : 'field-' + input_def.id,
+ info : input_def.info
+ });
+ },
+
+ /** Boolean field
+ */
+ _fieldBoolean : function(input_def) {
+ var self = this;
+ return new Ui.RadioButton.View({
+ id : 'field-' + input_def.id,
+ data : [ { label : 'Yes', value : 'true' },
+ { label : 'No', value : 'false' }],
+ onchange : function() {
+ self.app.trigger('refresh');
+ }
+ });
+ }
+ });
+
+ return {
+ View: View
+ };
+});
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r f8012e167c9d569cd06140d28e3def5135ba3ed9 static/scripts/mvc/tools/tools-section.js
--- a/static/scripts/mvc/tools/tools-section.js
+++ b/static/scripts/mvc/tools/tools-section.js
@@ -1,8 +1,14 @@
/**
- This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections. New input elements can be plugged in by adding cases to the switch block defined in the _createField() function.
+ This class creates a tool form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.
*/
-define(['utils/utils', 'mvc/ui/ui-table', 'mvc/ui/ui-misc', 'mvc/ui/ui-portlet', 'mvc/tools/tools-repeat', 'mvc/tools/tools-select-content', 'mvc/tools/tools-input'],
- function(Utils, Table, Ui, Portlet, Repeat, SelectContent, InputElement) {
+define(['utils/utils',
+ 'mvc/ui/ui-table',
+ 'mvc/ui/ui-misc',
+ 'mvc/ui/ui-portlet',
+ 'mvc/tools/tools-repeat',
+ 'mvc/tools/tools-input',
+ 'mvc/tools/tools-parameters'],
+ function(Utils, Table, Ui, Portlet, Repeat, InputElement, Parameters) {
// create form view
var View = Backbone.View.extend({
@@ -23,6 +29,9 @@
// create table
this.table = new Table.View(options);
+
+ // create parameter handler
+ this.parameters = new Parameters(app, options);
// configure portlet and form table
this.setElement(this.table.$el);
@@ -294,16 +303,8 @@
// get id
var id = input_def.id;
- // add regular/default value if missing
- if (input_def.value === undefined) {
- input_def.value = null;
- }
- if (input_def.default_value === undefined) {
- input_def.default_value = input_def.value;
- }
-
// create input field
- var field = this._createField(input_def);
+ var field = this.parameters.create(input_def);
// add to field list
this.app.field_list[id] = field;
@@ -333,265 +334,6 @@
// return created field
return field;
- },
-
- /** Returns an input field for a given field type
- */
- _createField: function(input_def) {
- // field wrapper
- var field = null;
-
- // identify field type
- switch(input_def.type) {
- // text input field
- case 'text' :
- field = this._fieldText(input_def);
- break;
-
- // select field
- case 'select' :
- field = this._fieldSelect(input_def);
- break;
-
- // data selector
- case 'data':
- field = this._fieldData(input_def);
- break;
-
- // collection selector
- case 'data_collection':
- field = this._fieldData(input_def);
- break;
-
- // data column
- case 'data_column':
- input_def.error_text = 'Missing columns in referenced dataset.';
- field = this._fieldSelect(input_def);
- break;
-
- // hidden field
- case 'hidden':
- field = this._fieldHidden(input_def);
- break;
-
- // hidden data field
- case 'hidden_data':
- field = this._fieldHidden(input_def);
- break;
-
- // integer field
- case 'integer':
- field = this._fieldSlider(input_def);
- break;
-
- // float field
- case 'float':
- field = this._fieldSlider(input_def);
- break;
-
- // boolean field
- case 'boolean':
- field = this._fieldBoolean(input_def);
- break;
-
- // genome field
- case 'genomebuild':
- input_def.searchable = true;
- field = this._fieldSelect(input_def);
- break;
-
- // drill down field
- case 'drill_down':
- field = this._fieldDrilldown(input_def);
- break;
-
- // base url field
- case 'baseurl':
- field = this._fieldHidden(input_def);
- break;
-
- // field not found
- default:
- // flag
- this.app.incompatible = true;
-
- // with or without options
- if (input_def.options) {
- // assign select field
- field = this._fieldSelect(input_def);
- } else {
- // assign text field
- field = this._fieldText(input_def);
- }
-
- // log
- console.debug('tools-form::_addRow() : Auto matched field type (' + input_def.type + ').');
- }
-
- // set field value
- if (input_def.value !== undefined) {
- field.value(input_def.value);
- }
-
- // return field element
- return field;
- },
-
- /** Data input field
- */
- _fieldData : function(input_def) {
- if (!this.app.options.is_dynamic) {
- input_def.info = 'Data input \'' + input_def.name + '\' (' + Utils.textify(input_def.extensions.toString()) + ')';
- input_def.value = null;
- return this._fieldHidden(input_def);
- }
- var self = this;
- return new SelectContent.View(this.app, {
- id : 'field-' + input_def.id,
- extensions : input_def.extensions,
- optional : input_def.optional,
- multiple : input_def.multiple,
- type : input_def.type,
- data : input_def.options,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Select/Checkbox/Radio options field
- */
- _fieldSelect : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // configure options fields
- var options = [];
- for (var i in input_def.options) {
- var option = input_def.options[i];
- options.push({
- label: option[0],
- value: option[1]
- });
- }
-
- // identify display type
- var SelectClass = Ui.Select;
- switch (input_def.display) {
- case 'checkboxes':
- SelectClass = Ui.Checkbox;
- break;
- case 'radio':
- SelectClass = Ui.Radio;
- break;
- }
-
- // select field
- var self = this;
- return new SelectClass.View({
- id : 'field-' + input_def.id,
- data : options,
- error_text : input_def.error_text || 'No options available',
- multiple : input_def.multiple,
- searchable : input_def.searchable,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Drill down options field
- */
- _fieldDrilldown : function (input_def) {
- // show text field in if dynamic fields are disabled e.g. in workflow editor
- if (!this.app.options.is_dynamic && input_def.is_dynamic) {
- return this._fieldText(input_def);
- }
-
- // create drill down field
- var self = this;
- return new Ui.Drilldown.View({
- id : 'field-' + input_def.id,
- data : input_def.options,
- display : input_def.display,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Text input field
- */
- _fieldText : function(input_def) {
- // field replaces e.g. a select field
- if (input_def.options) {
- // show text area if selecting multiple entries is allowed
- input_def.area = input_def.multiple;
-
- // validate value
- if (!Utils.validate(input_def.value)) {
- input_def.value = '';
- } else {
- if (input_def.value instanceof Array) {
- input_def.value = value.toString();
- } else {
- input_def.value = String(input_def.value).replace(/[\[\]'"\s]/g, '');
- if (input_def.multiple) {
- input_def.value = input_def.value.replace(/,/g, '\n');
- }
- }
- }
- }
-
- // create input element
- var self = this;
- return new Ui.Input({
- id : 'field-' + input_def.id,
- area : input_def.area,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Slider field
- */
- _fieldSlider: function(input_def) {
- var self = this;
- return new Ui.Slider.View({
- id : 'field-' + input_def.id,
- precise : input_def.type == 'float',
- min : input_def.min,
- max : input_def.max,
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
- },
-
- /** Hidden field
- */
- _fieldHidden : function(input_def) {
- return new Ui.Hidden({
- id : 'field-' + input_def.id,
- info : input_def.info
- });
- },
-
- /** Boolean field
- */
- _fieldBoolean : function(input_def) {
- var self = this;
- return new Ui.RadioButton.View({
- id : 'field-' + input_def.id,
- data : [ { label : 'Yes', value : 'true' },
- { label : 'No', value : 'false' }],
- onchange : function() {
- self.app.trigger('refresh');
- }
- });
}
});
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r f8012e167c9d569cd06140d28e3def5135ba3ed9 static/scripts/packed/mvc/tools/tools-parameters.js
--- /dev/null
+++ b/static/scripts/packed/mvc/tools/tools-parameters.js
@@ -0,0 +1,1 @@
+define(["utils/utils","mvc/ui/ui-misc","mvc/tools/tools-select-content"],function(b,c,a){return Backbone.Model.extend({types:{text:"_fieldText",select:"_fieldSelect",data_column:"_fieldSelect",genomebuild:"_fieldSelect",data:"_fieldData",data_collection:"_fieldData",integer:"_fieldSlider","float":"_fieldSlider","boolean":"_fieldBoolean",drill_down:"_fieldDrilldown",hidden:"_fieldHidden",hidden_data:"_fieldHidden",baseurl:"_fieldHidden"},initialize:function(e,d){this.app=e},create:function(d){if(d.value===undefined){d.value=null}if(d.default_value===undefined){d.default_value=d.value}var f=null;var e=this.types[d.type];if(e&&typeof(this[e])==="function"){f=this[e].call(this,d)}if(!f){this.app.incompatible=true;if(d.options){f=this._fieldSelect(d)}else{f=this._fieldText(d)}console.debug("tools-form::_addRow() : Auto matched field type ("+d.type+").")}if(d.value!==undefined){f.value(d.value)}return f},_fieldData:function(d){if(!this.app.options.is_dynamic){d.info="Data input '"+d.name+"' ("+b.textify(d.extensions.toString())+")";d.value=null;return this._fieldHidden(d)}var e=this;return new a.View(this.app,{id:"field-"+d.id,extensions:d.extensions,optional:d.optional,multiple:d.multiple,type:d.type,data:d.options,onchange:function(){e.app.trigger("refresh")}})},_fieldSelect:function(d){if(!this.app.options.is_dynamic&&d.is_dynamic){return this._fieldText(d)}if(d.type=="data_column"){d.error_text="Missing columns in referenced dataset."}if(d.type=="genomebuild"){d.searchable=true}var f=[];for(var g in d.options){var h=d.options[g];f.push({label:h[0],value:h[1]})}var j=c.Select;switch(d.display){case"checkboxes":j=c.Checkbox;break;case"radio":j=c.Radio;break}var e=this;return new j.View({id:"field-"+d.id,data:f,error_text:d.error_text||"No options available",multiple:d.multiple,searchable:d.searchable,onchange:function(){e.app.trigger("refresh")}})},_fieldDrilldown:function(d){if(!this.app.options.is_dynamic&&d.is_dynamic){return this._fieldText(d)}var e=this;return new c.Drilldown.View({id:"field-"+d.id,data:d.options,display:d.display,onchange:function(){e.app.trigger("refresh")}})},_fieldText:function(d){if(d.options){d.area=d.multiple;if(!b.validate(d.value)){d.value=""}else{if(d.value instanceof Array){d.value=value.toString()}else{d.value=String(d.value).replace(/[\[\]'"\s]/g,"");if(d.multiple){d.value=d.value.replace(/,/g,"\n")}}}}var e=this;return new c.Input({id:"field-"+d.id,area:d.area,onchange:function(){e.app.trigger("refresh")}})},_fieldSlider:function(d){var e=this;return new c.Slider.View({id:"field-"+d.id,precise:d.type=="float",min:d.min,max:d.max,onchange:function(){e.app.trigger("refresh")}})},_fieldHidden:function(d){return new c.Hidden({id:"field-"+d.id,info:d.info})},_fieldBoolean:function(d){var e=this;return new c.RadioButton.View({id:"field-"+d.id,data:[{label:"Yes",value:"true"},{label:"No",value:"false"}],onchange:function(){e.app.trigger("refresh")}})}});return{View:View}});
\ No newline at end of file
diff -r 2c6690a2faea4882a688044ec269de5b15569f58 -r f8012e167c9d569cd06140d28e3def5135ba3ed9 static/scripts/packed/mvc/tools/tools-section.js
--- a/static/scripts/packed/mvc/tools/tools-section.js
+++ b/static/scripts/packed/mvc/tools/tools-section.js
@@ -1,1 +1,1 @@
-define(["utils/utils","mvc/ui/ui-table","mvc/ui/ui-misc","mvc/ui/ui-portlet","mvc/tools/tools-repeat","mvc/tools/tools-select-content","mvc/tools/tools-input"],function(e,b,h,d,c,a,f){var g=Backbone.View.extend({initialize:function(j,i){this.app=j;this.inputs=i.inputs;i.cls="ui-table-plain";i.cls_tr="section-row";this.table=new b.View(i);this.setElement(this.table.$el);this.render()},render:function(){this.table.delAll();for(var j in this.inputs){this.add(this.inputs[j])}},add:function(k){var j=this;var i=jQuery.extend(true,{},k);i.id=k.id=e.uuid();this.app.input_list[i.id]=i;var l=i.type;switch(l){case"conditional":this._addConditional(i);break;case"repeat":this._addRepeat(i);break;case"section":this._addSection(i);break;default:this._addRow(i)}},_addConditional:function(j){var k=this;j.test_param.id=j.id;var n=this._addRow(j.test_param);n.options.onchange=function(w){var v=k.app.tree.matchCase(j,w);for(var u in j.cases){var q=j.cases[u];var t=j.id+"-section-"+u;var p=k.table.get(t);var s=false;for(var r in q.inputs){if(!q.inputs[r].hidden){s=true;break}}if(u==v&&s){p.fadeIn("fast")}else{p.hide()}}k.app.trigger("refresh")};for(var m in j.cases){var l=j.id+"-section-"+m;var o=new g(this.app,{inputs:j.cases[m].inputs});o.$el.addClass("ui-table-section");this.table.add(o.$el);this.table.append(l)}n.trigger("change")},_addRepeat:function(p){var s=this;var q=0;var l=new c.View({title:p.title,title_new:p.title,min:p.min,max:p.max,onnew:function(){n(p.inputs);s.app.trigger("refresh")}});function n(i){var t=p.id+"-section-"+(q++);var u=new g(s.app,{inputs:i});l.add({id:t,$el:u.$el,ondel:function(){l.del(t);s.app.trigger("refresh")}})}var j=p.min;var r=_.size(p.cache);for(var m=0;m<Math.max(r,j);m++){var o=null;if(m<r){o=p.cache[m]}else{o=p.inputs}n(o)}var k=new f(this.app,{label:p.title,help:p.help,field:l});this.table.add(k.$el);this.table.append(p.id)},_addSection:function(i){var j=this;var n=new g(j.app,{inputs:i.inputs});var m=new h.ButtonIcon({icon:"fa-eye-slash",tooltip:"Show/hide section",cls:"ui-button-icon-plain"});var l=new d.View({title:i.label,cls:"ui-portlet-section",operations:{button_visible:m}});l.append(n.$el);l.append($("<div/>").addClass("ui-table-form-info").html(i.help));var k=false;l.$content.hide();l.$header.css("cursor","pointer");l.$header.on("click",function(){if(k){k=false;l.$content.hide();m.setIcon("fa-eye-slash")}else{k=true;l.$content.fadeIn("fast");m.setIcon("fa-eye")}});if(i.expand){l.$header.trigger("click")}this.table.add(l.$el);this.table.append(i.id)},_addRow:function(i){var l=i.id;if(i.value===undefined){i.value=null}if(i.default_value===undefined){i.default_value=i.value}var j=this._createField(i);this.app.field_list[l]=j;var k=new f(this.app,{label:i.label,default_value:i.default_value,optional:i.optional,help:i.help,field:j});this.app.element_list[l]=k;this.table.add(k.$el);this.table.append(l);if(i.hidden){this.table.get(l).hide()}return j},_createField:function(i){var j=null;switch(i.type){case"text":j=this._fieldText(i);break;case"select":j=this._fieldSelect(i);break;case"data":j=this._fieldData(i);break;case"data_collection":j=this._fieldData(i);break;case"data_column":i.error_text="Missing columns in referenced dataset.";j=this._fieldSelect(i);break;case"hidden":j=this._fieldHidden(i);break;case"hidden_data":j=this._fieldHidden(i);break;case"integer":j=this._fieldSlider(i);break;case"float":j=this._fieldSlider(i);break;case"boolean":j=this._fieldBoolean(i);break;case"genomebuild":i.searchable=true;j=this._fieldSelect(i);break;case"drill_down":j=this._fieldDrilldown(i);break;case"baseurl":j=this._fieldHidden(i);break;default:this.app.incompatible=true;if(i.options){j=this._fieldSelect(i)}else{j=this._fieldText(i)}console.debug("tools-form::_addRow() : Auto matched field type ("+i.type+").")}if(i.value!==undefined){j.value(i.value)}return j},_fieldData:function(i){if(!this.app.options.is_dynamic){i.info="Data input '"+i.name+"' ("+e.textify(i.extensions.toString())+")";i.value=null;return this._fieldHidden(i)}var j=this;return new a.View(this.app,{id:"field-"+i.id,extensions:i.extensions,optional:i.optional,multiple:i.multiple,type:i.type,data:i.options,onchange:function(){j.app.trigger("refresh")}})},_fieldSelect:function(j){if(!this.app.options.is_dynamic&&j.is_dynamic){return this._fieldText(j)}var l=[];for(var m in j.options){var n=j.options[m];l.push({label:n[0],value:n[1]})}var o=h.Select;switch(j.display){case"checkboxes":o=h.Checkbox;break;case"radio":o=h.Radio;break}var k=this;return new o.View({id:"field-"+j.id,data:l,error_text:j.error_text||"No options available",multiple:j.multiple,searchable:j.searchable,onchange:function(){k.app.trigger("refresh")}})},_fieldDrilldown:function(i){if(!this.app.options.is_dynamic&&i.is_dynamic){return this._fieldText(i)}var j=this;return new h.Drilldown.View({id:"field-"+i.id,data:i.options,display:i.display,onchange:function(){j.app.trigger("refresh")}})},_fieldText:function(i){if(i.options){i.area=i.multiple;if(!e.validate(i.value)){i.value=""}else{if(i.value instanceof Array){i.value=value.toString()}else{i.value=String(i.value).replace(/[\[\]'"\s]/g,"");if(i.multiple){i.value=i.value.replace(/,/g,"\n")}}}}var j=this;return new h.Input({id:"field-"+i.id,area:i.area,onchange:function(){j.app.trigger("refresh")}})},_fieldSlider:function(i){var j=this;return new h.Slider.View({id:"field-"+i.id,precise:i.type=="float",min:i.min,max:i.max,onchange:function(){j.app.trigger("refresh")}})},_fieldHidden:function(i){return new h.Hidden({id:"field-"+i.id,info:i.info})},_fieldBoolean:function(i){var j=this;return new h.RadioButton.View({id:"field-"+i.id,data:[{label:"Yes",value:"true"},{label:"No",value:"false"}],onchange:function(){j.app.trigger("refresh")}})}});return{View:g}});
\ No newline at end of file
+define(["utils/utils","mvc/ui/ui-table","mvc/ui/ui-misc","mvc/ui/ui-portlet","mvc/tools/tools-repeat","mvc/tools/tools-input","mvc/tools/tools-parameters"],function(e,a,h,d,c,f,b){var g=Backbone.View.extend({initialize:function(j,i){this.app=j;this.inputs=i.inputs;i.cls="ui-table-plain";i.cls_tr="section-row";this.table=new a.View(i);this.parameters=new b(j,i);this.setElement(this.table.$el);this.render()},render:function(){this.table.delAll();for(var j in this.inputs){this.add(this.inputs[j])}},add:function(k){var j=this;var i=jQuery.extend(true,{},k);i.id=k.id=e.uuid();this.app.input_list[i.id]=i;var l=i.type;switch(l){case"conditional":this._addConditional(i);break;case"repeat":this._addRepeat(i);break;case"section":this._addSection(i);break;default:this._addRow(i)}},_addConditional:function(j){var k=this;j.test_param.id=j.id;var n=this._addRow(j.test_param);n.options.onchange=function(w){var v=k.app.tree.matchCase(j,w);for(var u in j.cases){var q=j.cases[u];var t=j.id+"-section-"+u;var p=k.table.get(t);var s=false;for(var r in q.inputs){if(!q.inputs[r].hidden){s=true;break}}if(u==v&&s){p.fadeIn("fast")}else{p.hide()}}k.app.trigger("refresh")};for(var m in j.cases){var l=j.id+"-section-"+m;var o=new g(this.app,{inputs:j.cases[m].inputs});o.$el.addClass("ui-table-section");this.table.add(o.$el);this.table.append(l)}n.trigger("change")},_addRepeat:function(p){var s=this;var q=0;var l=new c.View({title:p.title,title_new:p.title,min:p.min,max:p.max,onnew:function(){n(p.inputs);s.app.trigger("refresh")}});function n(i){var t=p.id+"-section-"+(q++);var u=new g(s.app,{inputs:i});l.add({id:t,$el:u.$el,ondel:function(){l.del(t);s.app.trigger("refresh")}})}var j=p.min;var r=_.size(p.cache);for(var m=0;m<Math.max(r,j);m++){var o=null;if(m<r){o=p.cache[m]}else{o=p.inputs}n(o)}var k=new f(this.app,{label:p.title,help:p.help,field:l});this.table.add(k.$el);this.table.append(p.id)},_addSection:function(i){var j=this;var n=new g(j.app,{inputs:i.inputs});var m=new h.ButtonIcon({icon:"fa-eye-slash",tooltip:"Show/hide section",cls:"ui-button-icon-plain"});var l=new d.View({title:i.label,cls:"ui-portlet-section",operations:{button_visible:m}});l.append(n.$el);l.append($("<div/>").addClass("ui-table-form-info").html(i.help));var k=false;l.$content.hide();l.$header.css("cursor","pointer");l.$header.on("click",function(){if(k){k=false;l.$content.hide();m.setIcon("fa-eye-slash")}else{k=true;l.$content.fadeIn("fast");m.setIcon("fa-eye")}});if(i.expand){l.$header.trigger("click")}this.table.add(l.$el);this.table.append(i.id)},_addRow:function(i){var l=i.id;var j=this.parameters.create(i);this.app.field_list[l]=j;var k=new f(this.app,{label:i.label,default_value:i.default_value,optional:i.optional,help:i.help,field:j});this.app.element_list[l]=k;this.table.add(k.$el);this.table.append(l);if(i.hidden){this.table.get(l).hide()}return j}});return{View:g}});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0