From ed992b3b28c7f6d9d637e82e88305b665733a50b Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Thu, 19 Nov 2015 21:03:30 -0500 Subject: [PATCH 01/24] A large assortment of escaping fixes to primarily grids and javascript templating, and one bad-data-ingress fix (copy history name). --- .../mvc/collection/list-collection-creator.js | 6 +++--- .../list-of-pairs-collection-creator.js | 6 +++--- .../mvc/collection/pair-collection-creator.js | 10 +++++----- .../scripts/mvc/dataset/dataset-choice.js | 14 +++++++------- .../scripts/mvc/dataset/dataset-li-edit.js | 14 +++++++------- .../galaxy/scripts/mvc/dataset/dataset-li.js | 2 +- .../scripts/mvc/history/history-panel.js | 4 ++-- .../galaxy/scripts/mvc/history/multi-panel.js | 8 ++++---- client/galaxy/scripts/mvc/job/job-li.js | 18 +++++++++--------- client/galaxy/scripts/mvc/list/list-panel.js | 8 ++++---- .../galaxy/scripts/mvc/ui/ui-select-default.js | 2 +- .../scripts/mvc/groups/group-detail-view.js | 12 ++++++------ .../scripts/mvc/groups/group-listrow-view.js | 2 +- lib/galaxy/webapps/galaxy/controllers/admin.py | 14 +++++++------- .../webapps/galaxy/controllers/dataset.py | 4 ++-- .../galaxy/controllers/external_service.py | 5 ++++- lib/galaxy/webapps/galaxy/controllers/forms.py | 7 +++++-- .../webapps/galaxy/controllers/history.py | 4 ++-- .../webapps/galaxy/controllers/library.py | 4 ++-- .../galaxy/controllers/library_admin.py | 4 ++-- .../webapps/galaxy/controllers/request_type.py | 12 ++++++++---- .../galaxy/controllers/requests_admin.py | 8 +++++--- .../galaxy/controllers/requests_common.py | 7 +++++-- .../galaxy/controllers/visualization.py | 2 +- lib/galaxy/webapps/reports/controllers/jobs.py | 5 ++++- .../reports/controllers/sample_tracking.py | 7 +++++-- .../webapps/reports/controllers/workflows.py | 6 ++++-- lib/tool_shed/grids/admin_grids.py | 13 ++++++++----- lib/tool_shed/grids/repository_grids.py | 6 +++--- lib/tool_shed/grids/repository_review_grids.py | 12 ++++++++---- static/maps/mvc/history/multi-panel.js.map | 2 +- static/maps/mvc/ui/ui-select-default.js.map | 2 +- static/scripts/libs/jquery/jquery.dynatree.js | 2 +- .../mvc/collection/list-collection-creator.js | 2 +- .../list-of-pairs-collection-creator.js | 2 +- .../mvc/collection/pair-collection-creator.js | 2 +- static/scripts/mvc/dataset/dataset-choice.js | 2 +- static/scripts/mvc/dataset/dataset-li-edit.js | 2 +- static/scripts/mvc/dataset/dataset-li.js | 2 +- static/scripts/mvc/history/history-panel.js | 2 +- static/scripts/mvc/history/multi-panel.js | 2 +- static/scripts/mvc/job/job-li.js | 2 +- static/scripts/mvc/list/list-panel.js | 2 +- static/scripts/mvc/ui/ui-select-default.js | 2 +- 44 files changed, 142 insertions(+), 112 deletions(-) diff --git a/client/galaxy/scripts/mvc/collection/list-collection-creator.js b/client/galaxy/scripts/mvc/collection/list-collection-creator.js index 48f849bb83c..f7dfbe6467a 100644 --- a/client/galaxy/scripts/mvc/collection/list-collection-creator.js +++ b/client/galaxy/scripts/mvc/collection/list-collection-creator.js @@ -43,7 +43,7 @@ var DatasetCollectionElementView = Backbone.View.extend( BASE_MVC.LoggableMixin //TODO: lots of unused space in the element - possibly load details and display them horiz. template : _.template([ '', - '<%= element.name %>', + '<%- element.name %>', '', '', '', diff --git a/client/galaxy/scripts/mvc/job/job-li.js b/client/galaxy/scripts/mvc/job/job-li.js index 1521c2c6796..3078f8414e5 100644 --- a/client/galaxy/scripts/mvc/job/job-li.js +++ b/client/galaxy/scripts/mvc/job/job-li.js @@ -121,7 +121,7 @@ JobListItemView.prototype.templates = (function(){ var elTemplate = BASE_MVC.wrapTemplate([ '
', - '
<%= model.id %>
', + '
<%- model.id %>
', // errors, messages, etc. '
', @@ -161,7 +161,7 @@ JobListItemView.prototype.templates = (function(){ // ' ', _l( 'Created' ), ': <%= new Date( job.create_time ).toString() %>, ', //'', - // ' (', _l( 'version' ), ': <%= view.tool.version %>)', + // ' (', _l( 'version' ), ': <%- view.tool.version %>)', //'' ], 'job' ); @@ -170,20 +170,20 @@ JobListItemView.prototype.templates = (function(){ '
', //'
', // '', - // '<%= view.tool.version %>', + // '<%- view.tool.version %>', //'
', '
', '<% _.each( view._labelInputMap(), function( input, label ){ %>', - '
', - '', + '
', + '', //TODO: input dataset name - '<%= input.content.name %>', + '<%- input.content.name %>', '
', '<% }) %>', '<% _.each( view._labelParamMap(), function( param, label ){ %>', - '
', - '', - '<%= param %>', + '
', + '', + '<%- param %>', '
', '<% }) %>', '
', diff --git a/client/galaxy/scripts/mvc/list/list-panel.js b/client/galaxy/scripts/mvc/list/list-panel.js index 6741b11d3e0..70dd7b06825 100644 --- a/client/galaxy/scripts/mvc/list/list-panel.js +++ b/client/galaxy/scripts/mvc/list/list-panel.js @@ -801,9 +801,9 @@ ListPanel.prototype.templates = (function(){ var controlsTemplate = BASE_MVC.wrapTemplate([ '
', '
', - '
<%= view.title %>
', + '
<%- view.title %>
', '
', - '
<%= view.subtitle %>
', + '
<%- view.subtitle %>
', // buttons, controls go here '
', // deleted msg, etc. @@ -942,9 +942,9 @@ ModelListPanel.prototype.templates = (function(){ '
', '
', //TODO: this is really the only difference - consider factoring titlebar out - '
<%= model.name %>
', + '
<%- model.name %>
', '
', - '
<%= view.subtitle %>
', + '
<%- view.subtitle %>
', '
', '
', diff --git a/client/galaxy/scripts/mvc/ui/ui-select-default.js b/client/galaxy/scripts/mvc/ui/ui-select-default.js index 61bc233be07..9b7a1c916c4 100644 --- a/client/galaxy/scripts/mvc/ui/ui-select-default.js +++ b/client/galaxy/scripts/mvc/ui/ui-select-default.js @@ -261,7 +261,7 @@ var View = Backbone.View.extend({ /** Template for select options */ _templateOption: function(options) { - return ''; + return ''; }, /** Template for select view diff --git a/client/toolshed/scripts/mvc/groups/group-detail-view.js b/client/toolshed/scripts/mvc/groups/group-detail-view.js index d0b6bd28b2a..c5825504e2a 100644 --- a/client/toolshed/scripts/mvc/groups/group-detail-view.js +++ b/client/toolshed/scripts/mvc/groups/group-detail-view.js @@ -56,7 +56,7 @@ var GroupDetailView = Backbone.View.extend({ templateRow: function() { return _.template([ '
', - '

<%= group.get("name") %>

', + '

<%= _.escape(group.get("name")) %>

', '

', 'A group of <%= group.get("members").length %> members with <%= group.get("repositories").length %> repositories and a total of <%= group.get("total_downloads") %> combined repository clones.

', @@ -71,10 +71,10 @@ var GroupDetailView = Backbone.View.extend({ '<% _.each(group.get("members"), function(member) { %>', '', '', - '<%= member.username %>', + '<%= _.escape(member.username) %>', '', '', - '<%= member.user_repos_count %>', + '<%= member.user_repos_count %>', '', '', '<%= member.time_created %>', @@ -101,16 +101,16 @@ var GroupDetailView = Backbone.View.extend({ '<% _.each(group.get("repositories"), function(repo) { %>', '', '', - '<%= repo.name %>', + '<%= _.escape(repo.name) %>', '', '', - '<%= repo.description %>', + '<%= _.escape(repo.description) %>', '', '', '<%= repo.times_downloaded %>', '', '', - '<%= repo.owner %>', + '<%= _.escape(repo.owner) %>', '', '', '<% _.each((repo.categories), function(cat) { %>', diff --git a/client/toolshed/scripts/mvc/groups/group-listrow-view.js b/client/toolshed/scripts/mvc/groups/group-listrow-view.js index 59c073907f0..7ffcf7c14d3 100644 --- a/client/toolshed/scripts/mvc/groups/group-listrow-view.js +++ b/client/toolshed/scripts/mvc/groups/group-listrow-view.js @@ -19,7 +19,7 @@ var GroupListRowView = Backbone.View.extend({ templateRow: function() { return _.template([ '">', - '"><%= group.get("name") %>', + '"><%= _.escape(group.get("name")) %>', // 'description', '<%= group.get("total_members") %>', '<%= group.get("total_repos") %>', diff --git a/lib/galaxy/webapps/galaxy/controllers/admin.py b/lib/galaxy/webapps/galaxy/controllers/admin.py index 2dca3bf130b..48143bf925e 100644 --- a/lib/galaxy/webapps/galaxy/controllers/admin.py +++ b/lib/galaxy/webapps/galaxy/controllers/admin.py @@ -30,12 +30,12 @@ class UserListGrid( grids.Grid ): class EmailColumn( grids.TextColumn ): def get_value( self, trans, grid, user ): - return user.email + return escape(user.email) class UserNameColumn( grids.TextColumn ): def get_value( self, trans, grid, user ): if user.username: - return user.username + return escape(user.username) return 'not set' class StatusColumn( grids.GridColumn ): @@ -149,12 +149,12 @@ class RoleListGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, role ): - return role.name + return escape(role.name) class DescriptionColumn( grids.TextColumn ): def get_value( self, trans, grid, role ): if role.description: - return role.description + return escape(role.description) return '' class TypeColumn( grids.TextColumn ): @@ -248,7 +248,7 @@ class GroupListGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, group ): - return group.name + return escape(group.name) class StatusColumn( grids.GridColumn ): def get_value( self, trans, grid, group ): @@ -324,12 +324,12 @@ class QuotaListGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, quota ): - return quota.name + return escape(quota.name) class DescriptionColumn( grids.TextColumn ): def get_value( self, trans, grid, quota ): if quota.description: - return quota.description + return escape(quota.description) return '' class AmountColumn( grids.TextColumn ): diff --git a/lib/galaxy/webapps/galaxy/controllers/dataset.py b/lib/galaxy/webapps/galaxy/controllers/dataset.py index e41bee9ea68..3018a9fa3b5 100644 --- a/lib/galaxy/webapps/galaxy/controllers/dataset.py +++ b/lib/galaxy/webapps/galaxy/controllers/dataset.py @@ -29,7 +29,7 @@ class HistoryDatasetAssociationListGrid( grids.Grid ): # Custom columns for grid. class HistoryColumn( grids.GridColumn ): def get_value( self, trans, grid, hda): - return hda.history.name + return escape(hda.history.name) class StatusColumn( grids.GridColumn ): def get_value( self, trans, grid, hda ): @@ -1098,7 +1098,7 @@ class DatasetInterface( BaseUIController, UsesAnnotations, UsesItemRatings, Uses trans.sa_session.flush() hist_names_str = ", ".join( ['%s' % ( url_for( controller="history", action="switch_to_history", - hist_id=trans.security.encode_id( hist.id ) ), hist.name ) + hist_id=trans.security.encode_id( hist.id ) ), escape(hist.name) ) for hist in target_histories ] ) num_source = len( source_content_ids ) - invalid_contents num_target = len(target_histories) diff --git a/lib/galaxy/webapps/galaxy/controllers/external_service.py b/lib/galaxy/webapps/galaxy/controllers/external_service.py index 83aaf8836d1..c28e53d6476 100644 --- a/lib/galaxy/webapps/galaxy/controllers/external_service.py +++ b/lib/galaxy/webapps/galaxy/controllers/external_service.py @@ -4,6 +4,9 @@ from galaxy.web.base.controller import * from galaxy.web.framework.helpers import time_ago, iff, grids from galaxy.model.orm import * from galaxy import model, util +from galaxy import eggs +eggs.require("MarkupSafe") +from markupsafe import escape from galaxy.web.form_builder import * from .requests_common import invalid_id_redirect import logging, os @@ -14,7 +17,7 @@ class ExternalServiceGrid( grids.Grid ): # Custom column types class NameColumn( grids.TextColumn ): def get_value(self, trans, grid, external_service): - return external_service.name + return escape(external_service.name) class ExternalServiceTypeColumn( grids.TextColumn ): def get_value(self, trans, grid, external_service): try: diff --git a/lib/galaxy/webapps/galaxy/controllers/forms.py b/lib/galaxy/webapps/galaxy/controllers/forms.py index f901e42dcde..7f280741310 100644 --- a/lib/galaxy/webapps/galaxy/controllers/forms.py +++ b/lib/galaxy/webapps/galaxy/controllers/forms.py @@ -2,6 +2,9 @@ from galaxy.web.base.controller import * from galaxy.model.orm import * from galaxy.datatypes import sniff from galaxy import model, util +from galaxy import eggs +eggs.require("MarkupSafe") +from markupsafe import escape import logging, os, sys from galaxy.web.form_builder import * from galaxy.tools.parameters.basic import parameter_types @@ -18,10 +21,10 @@ class FormsGrid( grids.Grid ): # Custom column types class NameColumn( grids.TextColumn ): def get_value(self, trans, grid, form): - return form.latest_form.name + return escape(form.latest_form.name) class DescriptionColumn( grids.TextColumn ): def get_value(self, trans, grid, form): - return form.latest_form.desc + return escape(form.latest_form.desc) class TypeColumn( grids.TextColumn ): def get_value(self, trans, grid, form): return form.latest_form.type diff --git a/lib/galaxy/webapps/galaxy/controllers/history.py b/lib/galaxy/webapps/galaxy/controllers/history.py index 6ce1bfef57a..33151db601c 100644 --- a/lib/galaxy/webapps/galaxy/controllers/history.py +++ b/lib/galaxy/webapps/galaxy/controllers/history.py @@ -27,7 +27,7 @@ log = logging.getLogger( __name__ ) class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, history ): - return history.get_display_name() + return escape(history.get_display_name()) class HistoryListGrid( grids.Grid ): @@ -142,7 +142,7 @@ class SharedHistoryListGrid( grids.Grid ): class SharedByColumn( grids.GridColumn ): def get_value( self, trans, grid, history ): - return history.user.email + return escape(history.user.email) # Grid definition title = "Histories shared with you by others" diff --git a/lib/galaxy/webapps/galaxy/controllers/library.py b/lib/galaxy/webapps/galaxy/controllers/library.py index e2dfc1b60eb..94d9c38249d 100644 --- a/lib/galaxy/webapps/galaxy/controllers/library.py +++ b/lib/galaxy/webapps/galaxy/controllers/library.py @@ -14,12 +14,12 @@ class LibraryListGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, library ): - return library.name + return escape(library.name) class DescriptionColumn( grids.TextColumn ): def get_value( self, trans, grid, library ): if library.description: - return library.description + return escape(library.description) return '' # Grid definition diff --git a/lib/galaxy/webapps/galaxy/controllers/library_admin.py b/lib/galaxy/webapps/galaxy/controllers/library_admin.py index 8976d07b021..c71c5a6ade9 100644 --- a/lib/galaxy/webapps/galaxy/controllers/library_admin.py +++ b/lib/galaxy/webapps/galaxy/controllers/library_admin.py @@ -15,11 +15,11 @@ log = logging.getLogger( __name__ ) class LibraryListGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, library ): - return library.name + return escape(library.name) class DescriptionColumn( grids.TextColumn ): def get_value( self, trans, grid, library ): if library.description: - return library.description + return escape(library.description) return '' class StatusColumn( grids.GridColumn ): def get_value( self, trans, grid, library ): diff --git a/lib/galaxy/webapps/galaxy/controllers/request_type.py b/lib/galaxy/webapps/galaxy/controllers/request_type.py index 944e44e805c..27ccdd02b11 100644 --- a/lib/galaxy/webapps/galaxy/controllers/request_type.py +++ b/lib/galaxy/webapps/galaxy/controllers/request_type.py @@ -3,27 +3,31 @@ from __future__ import absolute_import from galaxy.web.base.controller import * from galaxy.web.framework.helpers import time_ago, iff, grids from galaxy.model.orm import * +from galaxy import eggs +eggs.require("MarkupSafe") +from markupsafe import escape from galaxy import model, util from galaxy.web.form_builder import * from .requests_common import invalid_id_redirect import logging, os + log = logging.getLogger( __name__ ) class RequestTypeGrid( grids.Grid ): # Custom column types class NameColumn( grids.TextColumn ): def get_value(self, trans, grid, request_type): - return request_type.name + return escape(request_type.name) class DescriptionColumn( grids.TextColumn ): def get_value(self, trans, grid, request_type): - return request_type.desc + return escape(request_type.desc) class RequestFormColumn( grids.TextColumn ): def get_value(self, trans, grid, request_type): - return request_type.request_form.name + return escape(request_type.request_form.name) class SampleFormColumn( grids.TextColumn ): def get_value(self, trans, grid, request_type): - return request_type.sample_form.name + return escape(request_type.sample_form.name) class ExternalServiceColumn( grids.IntegerColumn ): def get_value(self, trans, grid, request_type): if request_type.external_services: diff --git a/lib/galaxy/webapps/galaxy/controllers/requests_admin.py b/lib/galaxy/webapps/galaxy/controllers/requests_admin.py index 10665404401..489143b5980 100644 --- a/lib/galaxy/webapps/galaxy/controllers/requests_admin.py +++ b/lib/galaxy/webapps/galaxy/controllers/requests_admin.py @@ -7,6 +7,8 @@ from galaxy import model, util from galaxy.web.form_builder import * from .requests_common import RequestsGrid, invalid_id_redirect from galaxy import eggs +eggs.require( "MarkupSafe" ) +from markupsafe import escape eggs.require("amqp") import amqp import logging, os, pexpect, ConfigParser @@ -16,7 +18,7 @@ log = logging.getLogger( __name__ ) class AdminRequestsGrid( RequestsGrid ): class UserColumn( grids.TextColumn ): def get_value( self, trans, grid, request ): - return request.user.email + return escape(request.user.email) # Grid definition columns = [ col for col in RequestsGrid.columns ] columns.append( UserColumn( "User", @@ -37,7 +39,7 @@ class DataTransferGrid( grids.Grid ): # Custom column types class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, sample_dataset ): - return sample_dataset.name + return escape(sample_dataset.name) class SizeColumn( grids.TextColumn ): def get_value( self, trans, grid, sample_dataset ): return sample_dataset.size @@ -47,7 +49,7 @@ class DataTransferGrid( grids.Grid ): class ExternalServiceColumn( grids.TextColumn ): def get_value( self, trans, grid, sample_dataset ): try: - return sample_dataset.external_service.name + return escape(sample_dataset.external_service.name) except: return 'None' # Grid definition diff --git a/lib/galaxy/webapps/galaxy/controllers/requests_common.py b/lib/galaxy/webapps/galaxy/controllers/requests_common.py index 8a3c3be5682..d6f0301494c 100644 --- a/lib/galaxy/webapps/galaxy/controllers/requests_common.py +++ b/lib/galaxy/webapps/galaxy/controllers/requests_common.py @@ -2,6 +2,9 @@ import csv import logging import re from galaxy import model, util, web +from galaxy import eggs +eggs.require("MarkupSafe") +from markupsafe import escape from galaxy.model.orm import and_, func, select from galaxy.security.validate_user_input import validate_email from galaxy.web.base.controller import BaseUIController, UsesFormDefinitionsMixin @@ -14,10 +17,10 @@ class RequestsGrid( grids.Grid ): # Custom column types class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, request ): - return request.name + return escape(request.name) class DescriptionColumn( grids.TextColumn ): def get_value(self, trans, grid, request): - return request.desc + return escape(request.desc) class SamplesColumn( grids.GridColumn ): def get_value(self, trans, grid, request): return str( len( request.samples ) ) diff --git a/lib/galaxy/webapps/galaxy/controllers/visualization.py b/lib/galaxy/webapps/galaxy/controllers/visualization.py index a4a1fc66a8f..e3c7add5d62 100644 --- a/lib/galaxy/webapps/galaxy/controllers/visualization.py +++ b/lib/galaxy/webapps/galaxy/controllers/visualization.py @@ -33,7 +33,7 @@ log = logging.getLogger( __name__ ) class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, history ): - return history.get_display_name() + return escape(history.get_display_name()) def get_link( self, trans, grid, history ): # Provide link to list all datasets in history that have a given dbkey. # Right now, only dbkey needs to be passed through, but pass through diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index de3edcb1ead..19bca27fa3f 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -7,6 +7,9 @@ from galaxy.web.framework.helpers import grids from galaxy.model.orm import and_, not_, or_ import pkg_resources pkg_resources.require( "SQLAlchemy >= 0.4" ) +from galaxy import eggs +eggs.require("MarkupSafe") +from markupsafe import escape import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder @@ -89,7 +92,7 @@ class SpecifiedDateListGrid( grids.Grid ): def get_value( self, trans, grid, job ): if job.user: - return job.user.email + return escape(job.user.email) return 'anonymous' class EmailColumn( grids.GridColumn ): diff --git a/lib/galaxy/webapps/reports/controllers/sample_tracking.py b/lib/galaxy/webapps/reports/controllers/sample_tracking.py index 8186531e190..577b797f7e9 100644 --- a/lib/galaxy/webapps/reports/controllers/sample_tracking.py +++ b/lib/galaxy/webapps/reports/controllers/sample_tracking.py @@ -6,6 +6,9 @@ from galaxy.web.framework.helpers import grids from galaxy.model.orm import and_ import pkg_resources pkg_resources.require( "SQLAlchemy >= 0.4" ) +from galaxy import eggs +eggs.require("MarkupSafe") +from markupsafe import escape import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder @@ -18,7 +21,7 @@ class SpecifiedDateListGrid( grids.Grid ): class RequestNameColumn( grids.TextColumn ): def get_value( self, trans, grid, request ): - return request.name + return escape(request.name) class CreateTimeColumn( grids.DateTimeColumn ): @@ -29,7 +32,7 @@ class SpecifiedDateListGrid( grids.Grid ): def get_value( self, trans, grid, request ): if request.user: - return request.user.email + return escape(request.user.email) return 'unknown' class EmailColumn( grids.GridColumn ): diff --git a/lib/galaxy/webapps/reports/controllers/workflows.py b/lib/galaxy/webapps/reports/controllers/workflows.py index 562a1a55619..5983988b65c 100644 --- a/lib/galaxy/webapps/reports/controllers/workflows.py +++ b/lib/galaxy/webapps/reports/controllers/workflows.py @@ -6,6 +6,8 @@ from galaxy.model.orm import and_ from galaxy.web.base.controller import BaseUIController, web from galaxy.web.framework.helpers import grids eggs.require( "SQLAlchemy >= 0.4" ) +eggs.require("MarkupSafe") +from markupsafe import escape import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder from galaxy.webapps.reports.controllers.jobs import sorter @@ -19,7 +21,7 @@ class SpecifiedDateListGrid( grids.Grid ): class WorkflowNameColumn( grids.TextColumn ): def get_value( self, trans, grid, stored_workflow ): - return stored_workflow.name + return escape(stored_workflow.name) class CreateTimeColumn( grids.DateTimeColumn ): @@ -30,7 +32,7 @@ class SpecifiedDateListGrid( grids.Grid ): def get_value( self, trans, grid, stored_workflow ): if stored_workflow.user: - return stored_workflow.user.email + return escape(stored_workflow.user.email) return 'unknown' class EmailColumn( grids.GridColumn ): diff --git a/lib/tool_shed/grids/admin_grids.py b/lib/tool_shed/grids/admin_grids.py index 4489eadacdd..a582e267d88 100644 --- a/lib/tool_shed/grids/admin_grids.py +++ b/lib/tool_shed/grids/admin_grids.py @@ -12,6 +12,9 @@ from tool_shed.grids.repository_grids import RepositoryGrid from galaxy import eggs eggs.require( 'mercurial' ) +eggs.require("MarkupSafe") +from markupsafe import escape + from mercurial import commands from mercurial import hg from mercurial import ui @@ -25,14 +28,14 @@ class UserGrid( grids.Grid ): class UserLoginColumn( grids.TextColumn ): def get_value( self, trans, grid, user ): - return user.email + return escape(user.email) class UserNameColumn( grids.TextColumn ): def get_value( self, trans, grid, user ): if user.username: - return user.username + return escape(user.username) return 'not set' @@ -149,7 +152,7 @@ class RoleGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, role ): - return str( role.name ) + return escape( str( role.name ) ) class DescriptionColumn( grids.TextColumn ): @@ -414,13 +417,13 @@ class RepositoryMetadataGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, repository_metadata ): - return repository_metadata.repository.name + return escape(repository_metadata.repository.name) class OwnerColumn( grids.TextColumn ): def get_value( self, trans, grid, repository_metadata ): - return repository_metadata.repository.user.username + return escape(repository_metadata.repository.user.username) class RevisionColumn( grids.TextColumn ): diff --git a/lib/tool_shed/grids/repository_grids.py b/lib/tool_shed/grids/repository_grids.py index d10427d5efe..0180101403b 100644 --- a/lib/tool_shed/grids/repository_grids.py +++ b/lib/tool_shed/grids/repository_grids.py @@ -383,13 +383,13 @@ class MatchedRepositoryGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, repository_metadata ): - return repository_metadata.repository.name + return escape_html(repository_metadata.repository.name) class DescriptionColumn( grids.TextColumn ): def get_value( self, trans, grid, repository_metadata ): - return repository_metadata.repository.description + return escape_html(repository_metadata.repository.description) class RevisionColumn( grids.TextColumn ): @@ -402,7 +402,7 @@ class MatchedRepositoryGrid( grids.Grid ): def get_value( self, trans, grid, repository_metadata ): if repository_metadata.repository.user: - return repository_metadata.repository.user.username + return escape_html( repository_metadata.repository.user.username ) return 'no user' # Grid definition diff --git a/lib/tool_shed/grids/repository_review_grids.py b/lib/tool_shed/grids/repository_review_grids.py index 26a4c2b5aba..bd2937e4853 100644 --- a/lib/tool_shed/grids/repository_review_grids.py +++ b/lib/tool_shed/grids/repository_review_grids.py @@ -9,6 +9,10 @@ import tool_shed.util.shed_util_common as suc from tool_shed.util import hg_util from tool_shed.util import metadata_util +from galaxy import eggs +eggs.require("MarkupSafe") +from markupsafe import escape + log = logging.getLogger( __name__ ) @@ -18,13 +22,13 @@ class ComponentGrid( grids.Grid ): class NameColumn( grids.TextColumn ): def get_value( self, trans, grid, component ): - return component.name + return escape(component.name) class DescriptionColumn( grids.TextColumn ): def get_value( self, trans, grid, component ): - return component.description + return escape(component.description) title = "Repository review components" model_class = model.Component @@ -286,13 +290,13 @@ class RepositoryReviewsByUserGrid( grids.Grid ): class RepositoryNameColumn( grids.TextColumn ): def get_value( self, trans, grid, review ): - return review.repository.name + return escape(review.repository.name) class RepositoryDescriptionColumn( grids.TextColumn ): def get_value( self, trans, grid, review ): - return review.repository.description + return escape(review.repository.description) class RevisionColumn( grids.TextColumn ): diff --git a/static/maps/mvc/history/multi-panel.js.map b/static/maps/mvc/history/multi-panel.js.map index 2f26adecb76..b37c5046ece 100644 --- a/static/maps/mvc/history/multi-panel.js.map +++ b/static/maps/mvc/history/multi-panel.js.map @@ -1 +1 @@ -{"version":3,"file":"multi-panel.js","sources":["../../../src/mvc/history/multi-panel.js"],"names":["define","HISTORY_MODEL","HPANEL_EDIT","baseMVC","ajaxQueue","historyCopyDialog","history","options","validateName","name","Galaxy","modal","$","size","$invalidTitle","attr","css","color","margin-top","addClass","text","_l","append","copyHistory","$copyIndicator","copy","fail","alert","always","hide","checkNameAndCopy","val","historyName","get","defaultCopyName","show","_","extend","title","body","join","buttons","Cancel","Copy","focus","select","on","ev","keyCode","HistoryPanelColumn","Backbone","View","LoggableMixin","tagName","className","id","this","model","initialize","purgeAllowed","isUndefined","panel","createPanel","setUpListeners","panelOptions","dragItems","HistoryPanelEdit","_renderEmptyMessage","__patch_renderEmptyMessage","$whereTo","hdaCount","chain","values","flatten","value","length","$emptyMsg","$emptyMessage","isEmpty","hdaViews","contents","empty","searchFor","noneFoundMsg","emptyMsg","column","once","trigger","setUpPanelListeners","listenTo","rendered","inView","viewLeft","viewRight","columnLeft","$el","offset","left","columnRight","width","$panel","render","speed","undefined","modelData","toJSON","html","template","renderPanel","setUpBehaviors","data","isCurrentHistory","currentHistory","controlsLeftTemplate","view","controlsRightTemplate","setElement","$list","before","_renderDropTargetHelp","events","click .switch-to.btn","setAsCurrent","click .delete-history","_delete","xhr","status","error","done","click .undelete-history","undelete","click .purge-history","confirm","purge","click .copy-history","variable","toString","MultiPanelColumns","log","currentHistoryId","Error","columnWidth","borderWidth","columnGap","headerHeight","footerHeight","controlsHeight","order","_initSortOrders","hdaQueue","NamedAjaxQueue","collection","setCollection","histories","columnMap","createColumns","columnOptions","_comparator","getter","a","b","asc","sortOrders","update","fn","h","Date","name-dsc","size-dsc","models","multipanel","stopListening","sortCollection","silent","setUpCollectionListeners","add","addAsCurrentColumn","set-as-current","setCurrentHistory","change:deleted change:purged","handleDeletedHistory","sort","renderColumns","oldCurrentColumn","height","newCurrentColumn","_recalcFirstColumnHeight","includeDeleted","removeColumn","sortOrder","comparator","is","popover","create","current","each","createColumn","config","allow_user_dataset_purge","setUpColumnListeners","sortedFilteredColumns","filters","sortedColumns","filter","filtered","every","map","call","sorted","addColumn","newColumn","queueHdaFetch","widthToRemove","fadeOut","remove","checkColumnsInView","in-view","view:draggable:dragstart","_dropData","JSON","parse","dataTransfer","getData","currentColumnDropTargetOn","view:draggable:dragend","currentColumnDropTargetOff","droptarget:drop","toCopy","json","isCopyable","queue","forEach","content","start","fetch","columnMapLength","Object","keys","fxSpeed","mainTemplate","sortedAndFiltered","$middle","appendTo","delegateEvents","renderColumn","xhrData","ids","storage","dataset_details","renderItems","running","queueHdaFetchDetails","haveDetails","details","renderInfo","msg","click .done.btn","click .create-new.btn","click #include-deleted","click .order .set-order","click #toggle-deleted","click #toggle-hidden","close","destination","root","galaxy_config","window","location","_clickToggleDeletedHistories","toggleDeletedHistories","currentTarget","_clickToggleDeletedDatasets","toggleDeletedDatasets","i","delay","toggleShowDeleted","_clickToggleHiddenDatasets","toggleHiddenDatasets","toggleShowHidden","_chooseOrder","orderKey","_moreOptionsPopover","searchInput","placeholder","onsearch","matchesAll","onclear","onfirstsearch","clear","searchItems","progress","curr","total","deferred","clearSearch","resize","debouncedInView","debounce","parent","scroll","container","placement","optionsPopoverTemplate","$firstColumn","first","middleHeight","controlHeight","find","_viewport","right","columnsInView","vp","currentColumn","dataDropped","dropTargetOn","prototype","dataDrop","dropTarget","columns"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"multi-panel.js","sources":["../../../src/mvc/history/multi-panel.js"],"names":["define","HISTORY_MODEL","HPANEL_EDIT","baseMVC","ajaxQueue","historyCopyDialog","history","options","validateName","name","Galaxy","modal","$","size","$invalidTitle","attr","css","color","margin-top","addClass","text","_l","append","copyHistory","$copyIndicator","copy","fail","alert","always","hide","checkNameAndCopy","val","historyName","_","escape","get","defaultCopyName","show","extend","title","body","join","buttons","Cancel","Copy","focus","select","on","ev","keyCode","HistoryPanelColumn","Backbone","View","LoggableMixin","tagName","className","id","this","model","initialize","purgeAllowed","isUndefined","panel","createPanel","setUpListeners","panelOptions","dragItems","HistoryPanelEdit","_renderEmptyMessage","__patch_renderEmptyMessage","$whereTo","hdaCount","chain","values","flatten","value","length","$emptyMsg","$emptyMessage","isEmpty","hdaViews","contents","empty","searchFor","noneFoundMsg","emptyMsg","column","once","trigger","setUpPanelListeners","listenTo","rendered","inView","viewLeft","viewRight","columnLeft","$el","offset","left","columnRight","width","$panel","render","speed","undefined","modelData","toJSON","html","template","renderPanel","setUpBehaviors","data","isCurrentHistory","currentHistory","controlsLeftTemplate","view","controlsRightTemplate","setElement","$list","before","_renderDropTargetHelp","events","click .switch-to.btn","setAsCurrent","click .delete-history","_delete","xhr","status","error","done","click .undelete-history","undelete","click .purge-history","confirm","purge","click .copy-history","variable","toString","MultiPanelColumns","log","currentHistoryId","Error","columnWidth","borderWidth","columnGap","headerHeight","footerHeight","controlsHeight","order","_initSortOrders","hdaQueue","NamedAjaxQueue","collection","setCollection","histories","columnMap","createColumns","columnOptions","_comparator","getter","a","b","asc","sortOrders","update","fn","h","Date","name-dsc","size-dsc","models","multipanel","stopListening","sortCollection","silent","setUpCollectionListeners","add","addAsCurrentColumn","set-as-current","setCurrentHistory","change:deleted change:purged","handleDeletedHistory","sort","renderColumns","oldCurrentColumn","height","newCurrentColumn","_recalcFirstColumnHeight","includeDeleted","removeColumn","sortOrder","comparator","is","popover","create","current","each","createColumn","config","allow_user_dataset_purge","setUpColumnListeners","sortedFilteredColumns","filters","sortedColumns","filter","filtered","every","map","call","sorted","addColumn","newColumn","queueHdaFetch","widthToRemove","fadeOut","remove","checkColumnsInView","in-view","view:draggable:dragstart","_dropData","JSON","parse","dataTransfer","getData","currentColumnDropTargetOn","view:draggable:dragend","currentColumnDropTargetOff","droptarget:drop","toCopy","json","isCopyable","queue","forEach","content","start","fetch","columnMapLength","Object","keys","fxSpeed","mainTemplate","sortedAndFiltered","$middle","appendTo","delegateEvents","renderColumn","xhrData","ids","storage","dataset_details","renderItems","running","queueHdaFetchDetails","haveDetails","details","renderInfo","msg","click .done.btn","click .create-new.btn","click #include-deleted","click .order .set-order","click #toggle-deleted","click #toggle-hidden","close","destination","root","galaxy_config","window","location","_clickToggleDeletedHistories","toggleDeletedHistories","currentTarget","_clickToggleDeletedDatasets","toggleDeletedDatasets","i","delay","toggleShowDeleted","_clickToggleHiddenDatasets","toggleHiddenDatasets","toggleShowHidden","_chooseOrder","orderKey","_moreOptionsPopover","searchInput","placeholder","onsearch","matchesAll","onclear","onfirstsearch","clear","searchItems","progress","curr","total","deferred","clearSearch","resize","debouncedInView","debounce","parent","scroll","container","placement","optionsPopoverTemplate","$firstColumn","first","middleHeight","controlHeight","find","_viewport","right","columnsInView","vp","currentColumn","dataDropped","dropTargetOn","prototype","dataDrop","dropTarget","columns"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/ui/ui-select-default.js.map b/static/maps/mvc/ui/ui-select-default.js.map index 9d1e91c997a..0184d550bbf 100644 --- a/static/maps/mvc/ui/ui-select-default.js.map +++ b/static/maps/mvc/ui/ui-select-default.js.map @@ -1 +1 @@ -{"version":3,"file":"ui-select-default.js","sources":["../../../src/mvc/ui/ui-select-default.js"],"names":["define","Utils","ButtonCheck","View","Backbone","extend","optionsDefault","id","uid","cls","error_text","empty_text","visible","wait","multiple","searchable","optional","initialize","options","self","this","merge","setElement","_template","$select","$el","find","$icon","$button","all_button","onclick","new_value","value","_availableOptions","trigger","prepend","addClass","prop","remove","update","data","undefined","hide","show","on","onchange","exists","val","select2","current","_getValue","$","isArray","length","_size","first","text","unwait","removeClass","disabled","is","enable","disable","append","_templateOption","label","key","off","setOnChange","callback","validate","available","each","i","e","push","attr"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ui-select-default.js","sources":["../../../src/mvc/ui/ui-select-default.js"],"names":["define","Utils","ButtonCheck","View","Backbone","extend","optionsDefault","id","uid","cls","error_text","empty_text","visible","wait","multiple","searchable","optional","initialize","options","self","this","merge","setElement","_template","$select","$el","find","$icon","$button","all_button","onclick","new_value","value","_availableOptions","trigger","prepend","addClass","prop","remove","update","data","undefined","hide","show","on","onchange","exists","val","select2","current","_getValue","$","isArray","length","_size","first","text","unwait","removeClass","disabled","is","enable","disable","append","_templateOption","label","key","off","setOnChange","callback","validate","available","each","i","e","push","attr","_","escape"],"mappings":"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"} \ No newline at end of file diff --git a/static/scripts/libs/jquery/jquery.dynatree.js b/static/scripts/libs/jquery/jquery.dynatree.js index e69c8f36b1d..dd31fb1d30d 100644 --- a/static/scripts/libs/jquery/jquery.dynatree.js +++ b/static/scripts/libs/jquery/jquery.dynatree.js @@ -1,2 +1,2 @@ -function _log(a){if(_canLog){var b=Array.prototype.slice.apply(arguments,[1]),c=new Date,d=c.getHours()+":"+c.getMinutes()+":"+c.getSeconds()+"."+c.getMilliseconds();b[0]=d+" - "+b[0];try{switch(a){case"info":window.console.info.apply(window.console,b);break;case"warn":window.console.warn.apply(window.console,b);break;default:window.console.log.apply(window.console,b)}}catch(e){window.console||(_canLog=!1)}}}function logMsg(){Array.prototype.unshift.apply(arguments,["debug"]),_log.apply(this,arguments)}var _canLog=!0,getDynaTreePersistData=void 0,DTNodeStatus_Error=-1,DTNodeStatus_Loading=1,DTNodeStatus_Ok=0;!function($){var Class={create:function(){return function(){this.initialize.apply(this,arguments)}}},DynaTreeNode=Class.create();DynaTreeNode.prototype={initialize:function(a,b,c){this.parent=a,this.tree=b,"string"==typeof c&&(c={title:c}),void 0==c.key&&(c.key="_"+b._nodeCount++),this.data=$.extend({},$.ui.dynatree.nodedatadefaults,c),this.div=null,this.span=null,this.childList=null,this.isLoading=!1,this.hasSubSel=!1},toString:function(){return"dtnode<"+this.data.key+">: '"+this.data.title+"'"},toDict:function(a,b){var c=$.extend({},this.data);if(c.activate=this.tree.activeNode===this,c.focus=this.tree.focusNode===this,c.expand=this.bExpanded,c.select=this.bSelected,b&&b(c),a&&this.childList){c.children=[];for(var d=0;d0||a.minExpandLevel>1,e=a.rootVisible||a.minExpandLevel>0,f="",g=this.parent;g&&(!e||g!=c);)f=(g.isLastSibling()?b.tagEmpty:b.tagVline)+f,g=g.parent;d&&this.parent==c||(f+=this.childList||this.data.isLazy?b.tagExpander:b.tagConnector),a.checkbox&&1!=this.data.hideCheckbox&&!this.data.isStatusNode&&(f+=b.tagCheckbox),this.data.icon?f+="":0==this.data.icon||(f+=b.tagNodeIcon);var h=this.data&&"string"==typeof this.data.tooltip?" title='"+this.data.tooltip+"'":"";return f+=""+this.data.title+""},_fixOrder:function(){var a=this.childList;if(a)for(var b=this.div.firstChild.nextSibling,c=0;c=h&&h+j>=d&&e>=i&&i+k>=e){if(g.className==b.title)return"title";if(g.className==b.expander)return"expander";if(g.className==b.checkbox)return"checkbox";if(g.className==b.nodeIcon)return"icon"}}return"prefix"},getEventTargetType:function(a){var b=a&&a.target?a.target.className:"",c=this.tree.options.classNames;return b==c.title?"title":b==c.expander?"expander":b==c.checkbox?"checkbox":b==c.nodeIcon?"icon":b==c.empty||b==c.vline||b==c.connector?"prefix":b.indexOf(c.folder)>=0||b.indexOf(c.document)>=0?this._getTypeForOuterNodeEvent(a):null},isVisible:function(){for(var a=this._parentList(!0,!1),b=0;ba").focus()}catch(a){}},_activate:function(a,b){this.tree.logDebug("dtnode._activate(%o, fireEvents=%o) - %o",a,b,this);var c=this.tree.options;if(!(this.data.isStatusNode||b&&c.onQueryActivate&&0==c.onQueryActivate.call(this.span,a,this)))if(a){if(this.tree.activeNode){if(this.tree.activeNode===this)return;this.tree.activeNode.deactivate()}c.activeVisible&&this.makeVisible(),this.tree.activeNode=this,c.persist&&$.cookie(c.cookieId+"-active",this.data.key,c.cookie),this.tree.persistence.activeKey=this.data.key,$(this.span).addClass(c.classNames.active),b&&c.onActivate&&c.onActivate.call(this.span,this)}else if(this.tree.activeNode===this){var c=this.tree.options;if(c.onQueryActivate&&0==c.onQueryActivate.call(this.span,!1,this))return;$(this.span).removeClass(c.classNames.active),c.persist&&$.cookie(c.cookieId+"-active","",c.cookie),this.tree.persistence.activeKey=null,this.tree.activeNode=null,b&&c.onDeactivate&&c.onDeactivate.call(this.span,this)}},activate:function(){this._activate(!0,!0)},deactivate:function(){this._activate(!1,!0)},isActive:function(){return this.tree.activeNode===this},_userActivate:function(){var a=!0,b=!1;if(this.data.isFolder)switch(this.tree.options.clickFolderMode){case 2:a=!1,b=!0;break;case 3:a=b=!0}null==this.parent&&this.tree.options.minExpandLevel>0&&(b=!1),b&&(this.toggleExpand(),this.focus()),a&&this.activate()},_setSubSel:function(a){a?(this.hasSubSel=!0,$(this.span).addClass(this.tree.options.classNames.partsel)):(this.hasSubSel=!1,$(this.span).removeClass(this.tree.options.classNames.partsel))},_fixSelectionState:function(){if(this.bSelected){this.visit(function(a){a.parent._setSubSel(!0),a._select(!0,!1,!1)});for(var a=this.parent;a;){a._setSubSel(!0);for(var b=!0,c=0;c0&&!a||this._expand(a))},toggleExpand:function(){this.expand(!this.bExpanded)},collapseSiblings:function(){if(null!=this.parent)for(var a=this.parent.childList,b=0;b=0&&!(c=d[e].nextSibling());e--);c&&c.focus();break;default:b=!1}return!b},onKeypress:function(){},onFocus:function(a){var b=this.tree.options;"blur"==a.type||"focusout"==a.type?(b.onBlur&&b.onBlur.call(this.span,this),this.tree.tnFocused&&$(this.tree.tnFocused.span).removeClass(b.classNames.focused),this.tree.tnFocused=null,b.persist&&$.cookie(b.cookieId+"-focus","",b.cookie)):("focus"==a.type||"focusin"==a.type)&&(this.tree.tnFocused&&this.tree.tnFocused!==this&&(this.tree.logDebug("dtnode.onFocus: out of sync: curFocus: %o",this.tree.tnFocused),$(this.tree.tnFocused.span).removeClass(b.classNames.focused)),this.tree.tnFocused=this,b.onFocus&&b.onFocus.call(this.span,this),$(this.tree.tnFocused.span).addClass(b.classNames.focused),b.persist&&$.cookie(b.cookieId+"-focus",this.data.key,b.cookie))},visit:function(a,b,c){var d=0;if(1==c){if(0==a(this,b))return 1;d++}if(this.childList)for(var e=0;ef)throw" must be a child of ";this.childList.splice(f,0,a)}else this.childList.push(a);var g=c.isInitializing();if(d.persist&&e.cookiesFound&&g?(e.activeKey==a.data.key&&(c.activeNode=a),e.focusedKey==a.data.key&&(c.focusNode=a),a.bExpanded=$.inArray(a.data.key,e.expandedKeyList)>=0,a.bSelected=$.inArray(a.data.key,e.selectedKeyList)>=0):(a.data.activate&&(c.activeNode=a,d.persist&&(e.activeKey=a.data.key)),a.data.focus&&(c.focusNode=a,d.persist&&(e.focusedKey=a.data.key)),a.bExpanded=1==a.data.expand,a.bExpanded&&d.persist&&e.addExpand(a.data.key),a.bSelected=1==a.data.select,a.bSelected&&d.persist&&e.addSelect(a.data.key)),d.minExpandLevel>=a.getLevel()&&(this.bExpanded=!0),a.bSelected&&3==d.selectMode)for(var h=this;h;)h.hasSubSel||h._setSubSel(!0),h=h.parent;return c.bEnableUpdate&&this.render(!0,!0),a},addChild:function(a,b){if(a&&0!=a.length){if(a instanceof DynaTreeNode)return this._addChildNode(a,b);a.length||(a=[a]);for(var c=this.tree.enableUpdate(!1),d=null,e=0;e=0&&(this.expandedKeyList.splice(b,1),$.cookie(this.cookieId+"-expand",this.expandedKeyList.join(","),this.cookieOpts))},addSelect:function(a){this._log("addSelect(%o)",a),$.inArray(a,this.selectedKeyList)<0&&(this.selectedKeyList.push(a),$.cookie(this.cookieId+"-select",this.selectedKeyList.join(","),this.cookieOpts))},clearSelect:function(a){this._log("clearSelect(%o)",a);var b=$.inArray(a,this.selectedKeyList);b>=0&&(this.selectedKeyList.splice(b,1),$.cookie(this.cookieId+"-select",this.selectedKeyList.join(","),this.cookieOpts))},isReloading:function(){return 1==this.cookiesFound},toDict:function(){return{cookiesFound:this.cookiesFound,activeKey:this.activeKey,focusedKey:this.activeKey,expandedKeyList:this.expandedKeyList,selectedKeyList:this.selectedKeyList}},lastentry:void 0};var DynaTree=Class.create();DynaTree.version="$Version: 0.5.4$",DynaTree.prototype={initialize:function(a){this.phase="init",this.$widget=a,this.options=a.options,this.$tree=a.element,this.divTree=this.$tree.get(0)},_load:function(){var a=(this.$widget,this.options);this.bEnableUpdate=!0,this._nodeCount=1,this.activeNode=null,this.focusNode=null,a.classNames!==$.ui.dynatree.defaults.classNames&&(a.classNames=$.extend({},$.ui.dynatree.defaults.classNames,a.classNames)),a.imagePath||$("script").each(function(){return this.src.search(_rexDtLibName)>=0?(a.imagePath=this.src.indexOf("/")>=0?this.src.slice(0,this.src.lastIndexOf("/"))+"/skin/":"skin/",!1):void 0}),this.persistence=new DynaTreeStatus(a.cookieId,a.cookie),a.persist&&($.cookie||_log("warn","Please include jquery.cookie.js to use persistence."),this.persistence.read()),this.logDebug("DynaTree.persistence: %o",this.persistence.toDict()),this.cache={tagEmpty:"",tagVline:"",tagExpander:"",tagConnector:"",tagNodeIcon:"",tagCheckbox:"",lastentry:void 0},a.children||a.initAjax&&a.initAjax.url||a.initId?$(this.divTree).empty():this.divRoot&&$(this.divRoot).remove(),this.tnRoot=new DynaTreeNode(null,this,{title:a.title,key:"root"}),this.tnRoot.data.isFolder=!0,this.tnRoot.render(!1,!1),this.divRoot=this.tnRoot.div,this.divRoot.className=a.classNames.container,this.divTree.appendChild(this.divRoot);var b=this.tnRoot,c=a.persist&&this.persistence.isReloading(),d=!1,e=this.enableUpdate(!1);if(this.logDebug("Dynatree._load(): read tree structure..."),a.children)b.addChild(a.children);else if(a.initAjax&&a.initAjax.url)d=!0,b.data.isLazy=!0,this._reloadAjax();else if(a.initId)this._createFromTag(b,$("#"+a.initId));else{var f=this.$tree.find(">ul").hide();this._createFromTag(b,f),f.remove()}this._checkConsistency(),this.logDebug("Dynatree._load(): render nodes..."),this.enableUpdate(e),this.logDebug("Dynatree._load(): bind events..."),this.$widget.bind(),this.logDebug("Dynatree._load(): postInit..."),this.phase="postInit",a.persist&&this.persistence.write(),this.focusNode&&this.focusNode.isVisible()&&(this.logDebug("Focus on init: %o",this.focusNode),this.focusNode.focus()),!d&&a.onPostInit&&a.onPostInit.call(this,c,!1),this.phase="idle"},_reloadAjax:function(){var a=this.options;if(!a.initAjax||!a.initAjax.url)throw"tree.reload() requires 'initAjax' mode.";var b=this.persistence,c=$.extend({},a.initAjax);if(c.addActiveKey&&(c.data.activeKey=b.activeKey),c.addFocusedKey&&(c.data.focusedKey=b.focusedKey),c.addExpandedKeyList&&(c.data.expandedKeyList=b.expandedKeyList.join(",")),c.addSelectedKeyList&&(c.data.selectedKeyList=b.selectedKeyList.join(",")),a.onPostInit){c.success&&this.logWarning("initAjax: success callback is ignored when onPostInit was specified."),c.error&&this.logWarning("initAjax: error callback is ignored when onPostInit was specified.");var d=b.isReloading();c.success=function(b){a.onPostInit.call(b.tree,d,!1)},c.error=function(b){a.onPostInit.call(b.tree,d,!0)}}this.logDebug("Dynatree._init(): send Ajax request..."),this.tnRoot.appendAjax(c)},toString:function(){return"DynaTree '"+this.options.title+"'"},toDict:function(){return this.tnRoot.toDict(!0)},getPersistData:function(){return this.persistence.toDict()},logDebug:function(){this.options.debugLevel>=2&&(Array.prototype.unshift.apply(arguments,["debug"]),_log.apply(this,arguments))},logInfo:function(){this.options.debugLevel>=1&&(Array.prototype.unshift.apply(arguments,["info"]),_log.apply(this,arguments))},logWarning:function(){Array.prototype.unshift.apply(arguments,["warn"]),_log.apply(this,arguments)},isInitializing:function(){return"init"==this.phase||"postInit"==this.phase},isReloading:function(){return("init"==this.phase||"postInit"==this.phase)&&this.options.persist&&this.persistence.cookiesFound},isUserEvent:function(){return"userEvent"==this.phase},redraw:function(){this.logDebug("dynatree.redraw()..."),this.tnRoot.render(!0,!0),this.logDebug("dynatree.redraw() done.")},reloadAjax:function(){this.logWarning("tree.reloadAjax() is deprecated since v0.5.2 (use reload() instead).")},reload:function(){this._load()},getRoot:function(){return this.tnRoot},getNodeByKey:function(a){var b=document.getElementById(this.options.idPrefix+a);return b&&b.dtnode?b.dtnode:null},getActiveNode:function(){return this.activeNode},reactivate:function(a){var b=this.activeNode;b&&(this.activeNode=null,b.activate(),a&&b.focus())},getSelectedNodes:function(a){var b=[];return this.tnRoot.visit(function(c){return c.bSelected&&(b.push(c),1==a)?!1:void 0}),b},activateKey:function(a){var b=null===a?null:this.getNodeByKey(a);return b?(b.focus(),b.activate(),b):(this.activeNode&&this.activeNode.deactivate(),this.activeNode=null,null)},selectKey:function(a,b){var c=this.getNodeByKey(a);return c?(c.select(b),c):null},enableUpdate:function(a){return this.bEnableUpdate==a?a:(this.bEnableUpdate=a,a&&this.redraw(),!a)},visit:function(a,b,c){return this.tnRoot.visit(a,b,c)},_createFromTag:function(parentTreeNode,$ulParent){var self=this;$ulParent.find(">li").each(function(){var $li=$(this),$liSpan=$li.find(">span:first"),title;if($liSpan.length)title=$liSpan.html();else{title=$li.html();var iPos=title.search(/
    =0?title.substring(0,iPos):title)}var data={title:title,isFolder:$li.hasClass("folder"),isLazy:$li.hasClass("lazy"),expand:$li.hasClass("expanded"),select:$li.hasClass("selected"),activate:$li.hasClass("active"),focus:$li.hasClass("focused")};if($li.attr("title")&&(data.tooltip=$li.attr("title")),$li.attr("id")&&(data.key=$li.attr("id")),$li.attr("data")){var dataAttr=$.trim($li.attr("data"));if(dataAttr){"{"!=dataAttr.charAt(0)&&(dataAttr="{"+dataAttr+"}");try{$.extend(data,eval("("+dataAttr+")"))}catch(e){throw"Error parsing node data: "+e+"\ndata:\n'"+dataAttr+"'"}}}childNode=parentTreeNode.addChild(data);var $ul=$li.find(">ul:first");$ul.length&&self._createFromTag(childNode,$ul)})},_checkConsistency:function(){},lastentry:void 0},$.widget("ui.dynatree",{init:function(){return _log("warn","ui.dynatree.init() was called; you should upgrade to ui.core.js v1.6 or higher."),this._init()},_init:function(){return parseFloat($.ui.version)<1.8?(_log("info","ui.dynatree._init() was called; consider upgrading to jquery.ui.core.js v1.8 or higher."),this._create()):void _log("debug","ui.dynatree._init() was called; no current default functionality.")},_create:function(){parseFloat($.ui.version)>=1.8&&(this.options=$.extend(!0,{},$[this.namespace][this.widgetName].defaults,this.options)),logMsg("Dynatree._create(): version='%s', debugLevel=%o.",DynaTree.version,this.options.debugLevel);this.options;this.options.event+=".dynatree";this.element.get(0);this.tree=new DynaTree(this),this.tree._load(),this.tree.logDebug("Dynatree._create(): done.")},bind:function(){function a(a){for(var b=5;a&&b--;){if(a.dtnode)return a.dtnode;a=a.parentNode}return null}function b(b){b=arguments[0]=$.event.fix(b||window.event);var c=a(b.target);return c?c.onFocus(b):!1}var c=this.element,d=this.options;this.unbind();var e="click.dynatree dblclick.dynatree";d.keyboard&&(e+=" keypress.dynatree keydown.dynatree"),c.bind(e,function(b){var c=a(b.target);if(!c)return!0;var e=c.tree.phase;c.tree.phase="userEvent";try{switch(c.tree.logDebug("bind(%o): dtnode: %o",b,c),b.type){case"click":return d.onClick&&d.onClick(c,b)===!1?!1:c.onClick(b);case"dblclick":return d.onDblClick&&d.onDblClick(c,b)===!1?!1:c.onDblClick(b);case"keydown":return d.onKeydown&&d.onKeydown(c,b)===!1?!1:c.onKeydown(b);case"keypress":return d.onKeypress&&d.onKeypress(c,b)===!1?!1:c.onKeypress(b)}}catch(f){}finally{c.tree.phase=e}});var f=this.tree.divTree;f.addEventListener?(f.addEventListener("focus",b,!0),f.addEventListener("blur",b,!0)):f.onfocusin=f.onfocusout=b},unbind:function(){this.element.unbind(".dynatree")},enable:function(){this.bind(),$.widget.prototype.enable.apply(this,arguments)},disable:function(){this.unbind(),$.widget.prototype.disable.apply(this,arguments)},getTree:function(){return this.tree},getRoot:function(){return this.tree.getRoot()},getActiveNode:function(){return this.tree.getActiveNode()},getSelectedNodes:function(){return this.tree.getSelectedNodes()},lastentry:void 0}),$.ui.dynatree.getter="getTree getRoot getActiveNode getSelectedNodes",$.ui.dynatree.defaults={title:"Dynatree root",rootVisible:!1,minExpandLevel:1,imagePath:null,children:null,initId:null,initAjax:null,autoFocus:!0,keyboard:!0,persist:!1,autoCollapse:!1,clickFolderMode:3,activeVisible:!0,checkbox:!1,selectMode:2,fx:null,onClick:null,onDblClick:null,onKeydown:null,onKeypress:null,onFocus:null,onBlur:null,onQueryActivate:null,onQuerySelect:null,onQueryExpand:null,onPostInit:null,onActivate:null,onDeactivate:null,onSelect:null,onExpand:null,onLazyRead:null,ajaxDefaults:{cache:!1,dataType:"json"},strings:{loading:"Loading…",loadError:"Load error!"},idPrefix:"ui-dynatree-id-",cookieId:"dynatree",cookie:{expires:null},classNames:{container:"ui-dynatree-container",folder:"ui-dynatree-folder",document:"ui-dynatree-document",empty:"ui-dynatree-empty",vline:"ui-dynatree-vline",expander:"ui-dynatree-expander",connector:"ui-dynatree-connector",checkbox:"ui-dynatree-checkbox",nodeIcon:"ui-dynatree-icon",title:"ui-dynatree-title",nodeError:"ui-dynatree-statusnode-error",nodeWait:"ui-dynatree-statusnode-wait",hidden:"ui-dynatree-hidden",combinedExpanderPrefix:"ui-dynatree-exp-",combinedIconPrefix:"ui-dynatree-ico-",hasChildren:"ui-dynatree-has-children",active:"ui-dynatree-active",selected:"ui-dynatree-selected",expanded:"ui-dynatree-expanded",lazy:"ui-dynatree-lazy",focused:"ui-dynatree-focused",partsel:"ui-dynatree-partsel",lastsib:"ui-dynatree-lastsib"},debugLevel:1,lastentry:void 0},$.ui.dynatree.nodedatadefaults={title:null,key:null,isFolder:!1,isLazy:!1,tooltip:null,icon:null,addClass:null,activate:!1,focus:!1,expand:!1,select:!1,hideCheckbox:!1,unselectable:!1,children:null,lastentry:void 0}}(jQuery);var _rexDtLibName=/.*dynatree[^/]*\.js$/i; +function _log(a){if(_canLog){var b=Array.prototype.slice.apply(arguments,[1]),c=new Date,d=c.getHours()+":"+c.getMinutes()+":"+c.getSeconds()+"."+c.getMilliseconds();b[0]=d+" - "+b[0];try{switch(a){case"info":window.console.info.apply(window.console,b);break;case"warn":window.console.warn.apply(window.console,b);break;default:window.console.log.apply(window.console,b)}}catch(e){window.console||(_canLog=!1)}}}function logMsg(){Array.prototype.unshift.apply(arguments,["debug"]),_log.apply(this,arguments)}var _canLog=!0,getDynaTreePersistData=void 0,DTNodeStatus_Error=-1,DTNodeStatus_Loading=1,DTNodeStatus_Ok=0;!function($){var Class={create:function(){return function(){this.initialize.apply(this,arguments)}}},DynaTreeNode=Class.create();DynaTreeNode.prototype={initialize:function(a,b,c){this.parent=a,this.tree=b,"string"==typeof c&&(c={title:c}),void 0==c.key&&(c.key="_"+b._nodeCount++),this.data=$.extend({},$.ui.dynatree.nodedatadefaults,c),this.div=null,this.span=null,this.childList=null,this.isLoading=!1,this.hasSubSel=!1},toString:function(){return"dtnode<"+this.data.key+">: '"+this.data.title+"'"},toDict:function(a,b){var c=$.extend({},this.data);if(c.activate=this.tree.activeNode===this,c.focus=this.tree.focusNode===this,c.expand=this.bExpanded,c.select=this.bSelected,b&&b(c),a&&this.childList){c.children=[];for(var d=0;d0||a.minExpandLevel>1,e=a.rootVisible||a.minExpandLevel>0,f="",g=this.parent;g&&(!e||g!=c);)f=(g.isLastSibling()?b.tagEmpty:b.tagVline)+f,g=g.parent;d&&this.parent==c||(f+=this.childList||this.data.isLazy?b.tagExpander:b.tagConnector),a.checkbox&&1!=this.data.hideCheckbox&&!this.data.isStatusNode&&(f+=b.tagCheckbox),this.data.icon?f+="":0==this.data.icon||(f+=b.tagNodeIcon);var h=this.data&&"string"==typeof this.data.tooltip?" title='"+this.data.tooltip+"'":"";return f+=""+this.data.title+""},_fixOrder:function(){var a=this.childList;if(a)for(var b=this.div.firstChild.nextSibling,c=0;c=h&&h+j>=d&&e>=i&&i+k>=e){if(g.className==b.title)return"title";if(g.className==b.expander)return"expander";if(g.className==b.checkbox)return"checkbox";if(g.className==b.nodeIcon)return"icon"}}return"prefix"},getEventTargetType:function(a){var b=a&&a.target?a.target.className:"",c=this.tree.options.classNames;return b==c.title?"title":b==c.expander?"expander":b==c.checkbox?"checkbox":b==c.nodeIcon?"icon":b==c.empty||b==c.vline||b==c.connector?"prefix":b.indexOf(c.folder)>=0||b.indexOf(c.document)>=0?this._getTypeForOuterNodeEvent(a):null},isVisible:function(){for(var a=this._parentList(!0,!1),b=0;ba").focus()}catch(a){}},_activate:function(a,b){this.tree.logDebug("dtnode._activate(%o, fireEvents=%o) - %o",a,b,this);var c=this.tree.options;if(!(this.data.isStatusNode||b&&c.onQueryActivate&&0==c.onQueryActivate.call(this.span,a,this)))if(a){if(this.tree.activeNode){if(this.tree.activeNode===this)return;this.tree.activeNode.deactivate()}c.activeVisible&&this.makeVisible(),this.tree.activeNode=this,c.persist&&$.cookie(c.cookieId+"-active",this.data.key,c.cookie),this.tree.persistence.activeKey=this.data.key,$(this.span).addClass(c.classNames.active),b&&c.onActivate&&c.onActivate.call(this.span,this)}else if(this.tree.activeNode===this){var c=this.tree.options;if(c.onQueryActivate&&0==c.onQueryActivate.call(this.span,!1,this))return;$(this.span).removeClass(c.classNames.active),c.persist&&$.cookie(c.cookieId+"-active","",c.cookie),this.tree.persistence.activeKey=null,this.tree.activeNode=null,b&&c.onDeactivate&&c.onDeactivate.call(this.span,this)}},activate:function(){this._activate(!0,!0)},deactivate:function(){this._activate(!1,!0)},isActive:function(){return this.tree.activeNode===this},_userActivate:function(){var a=!0,b=!1;if(this.data.isFolder)switch(this.tree.options.clickFolderMode){case 2:a=!1,b=!0;break;case 3:a=b=!0}null==this.parent&&this.tree.options.minExpandLevel>0&&(b=!1),b&&(this.toggleExpand(),this.focus()),a&&this.activate()},_setSubSel:function(a){a?(this.hasSubSel=!0,$(this.span).addClass(this.tree.options.classNames.partsel)):(this.hasSubSel=!1,$(this.span).removeClass(this.tree.options.classNames.partsel))},_fixSelectionState:function(){if(this.bSelected){this.visit(function(a){a.parent._setSubSel(!0),a._select(!0,!1,!1)});for(var a=this.parent;a;){a._setSubSel(!0);for(var b=!0,c=0;c0&&!a||this._expand(a))},toggleExpand:function(){this.expand(!this.bExpanded)},collapseSiblings:function(){if(null!=this.parent)for(var a=this.parent.childList,b=0;b=0&&!(c=d[e].nextSibling());e--);c&&c.focus();break;default:b=!1}return!b},onKeypress:function(){},onFocus:function(a){var b=this.tree.options;"blur"==a.type||"focusout"==a.type?(b.onBlur&&b.onBlur.call(this.span,this),this.tree.tnFocused&&$(this.tree.tnFocused.span).removeClass(b.classNames.focused),this.tree.tnFocused=null,b.persist&&$.cookie(b.cookieId+"-focus","",b.cookie)):("focus"==a.type||"focusin"==a.type)&&(this.tree.tnFocused&&this.tree.tnFocused!==this&&(this.tree.logDebug("dtnode.onFocus: out of sync: curFocus: %o",this.tree.tnFocused),$(this.tree.tnFocused.span).removeClass(b.classNames.focused)),this.tree.tnFocused=this,b.onFocus&&b.onFocus.call(this.span,this),$(this.tree.tnFocused.span).addClass(b.classNames.focused),b.persist&&$.cookie(b.cookieId+"-focus",this.data.key,b.cookie))},visit:function(a,b,c){var d=0;if(1==c){if(0==a(this,b))return 1;d++}if(this.childList)for(var e=0;ef)throw" must be a child of ";this.childList.splice(f,0,a)}else this.childList.push(a);var g=c.isInitializing();if(d.persist&&e.cookiesFound&&g?(e.activeKey==a.data.key&&(c.activeNode=a),e.focusedKey==a.data.key&&(c.focusNode=a),a.bExpanded=$.inArray(a.data.key,e.expandedKeyList)>=0,a.bSelected=$.inArray(a.data.key,e.selectedKeyList)>=0):(a.data.activate&&(c.activeNode=a,d.persist&&(e.activeKey=a.data.key)),a.data.focus&&(c.focusNode=a,d.persist&&(e.focusedKey=a.data.key)),a.bExpanded=1==a.data.expand,a.bExpanded&&d.persist&&e.addExpand(a.data.key),a.bSelected=1==a.data.select,a.bSelected&&d.persist&&e.addSelect(a.data.key)),d.minExpandLevel>=a.getLevel()&&(this.bExpanded=!0),a.bSelected&&3==d.selectMode)for(var h=this;h;)h.hasSubSel||h._setSubSel(!0),h=h.parent;return c.bEnableUpdate&&this.render(!0,!0),a},addChild:function(a,b){if(a&&0!=a.length){if(a instanceof DynaTreeNode)return this._addChildNode(a,b);a.length||(a=[a]);for(var c=this.tree.enableUpdate(!1),d=null,e=0;e=0&&(this.expandedKeyList.splice(b,1),$.cookie(this.cookieId+"-expand",this.expandedKeyList.join(","),this.cookieOpts))},addSelect:function(a){this._log("addSelect(%o)",a),$.inArray(a,this.selectedKeyList)<0&&(this.selectedKeyList.push(a),$.cookie(this.cookieId+"-select",this.selectedKeyList.join(","),this.cookieOpts))},clearSelect:function(a){this._log("clearSelect(%o)",a);var b=$.inArray(a,this.selectedKeyList);b>=0&&(this.selectedKeyList.splice(b,1),$.cookie(this.cookieId+"-select",this.selectedKeyList.join(","),this.cookieOpts))},isReloading:function(){return 1==this.cookiesFound},toDict:function(){return{cookiesFound:this.cookiesFound,activeKey:this.activeKey,focusedKey:this.activeKey,expandedKeyList:this.expandedKeyList,selectedKeyList:this.selectedKeyList}},lastentry:void 0};var DynaTree=Class.create();DynaTree.version="$Version: 0.5.4$",DynaTree.prototype={initialize:function(a){this.phase="init",this.$widget=a,this.options=a.options,this.$tree=a.element,this.divTree=this.$tree.get(0)},_load:function(){var a=(this.$widget,this.options);this.bEnableUpdate=!0,this._nodeCount=1,this.activeNode=null,this.focusNode=null,a.classNames!==$.ui.dynatree.defaults.classNames&&(a.classNames=$.extend({},$.ui.dynatree.defaults.classNames,a.classNames)),a.imagePath||$("script").each(function(){return this.src.search(_rexDtLibName)>=0?(a.imagePath=this.src.indexOf("/")>=0?this.src.slice(0,this.src.lastIndexOf("/"))+"/skin/":"skin/",!1):void 0}),this.persistence=new DynaTreeStatus(a.cookieId,a.cookie),a.persist&&($.cookie||_log("warn","Please include jquery.cookie.js to use persistence."),this.persistence.read()),this.logDebug("DynaTree.persistence: %o",this.persistence.toDict()),this.cache={tagEmpty:"",tagVline:"",tagExpander:"",tagConnector:"",tagNodeIcon:"",tagCheckbox:"",lastentry:void 0},a.children||a.initAjax&&a.initAjax.url||a.initId?$(this.divTree).empty():this.divRoot&&$(this.divRoot).remove(),this.tnRoot=new DynaTreeNode(null,this,{title:a.title,key:"root"}),this.tnRoot.data.isFolder=!0,this.tnRoot.render(!1,!1),this.divRoot=this.tnRoot.div,this.divRoot.className=a.classNames.container,this.divTree.appendChild(this.divRoot);var b=this.tnRoot,c=a.persist&&this.persistence.isReloading(),d=!1,e=this.enableUpdate(!1);if(this.logDebug("Dynatree._load(): read tree structure..."),a.children)b.addChild(a.children);else if(a.initAjax&&a.initAjax.url)d=!0,b.data.isLazy=!0,this._reloadAjax();else if(a.initId)this._createFromTag(b,$("#"+a.initId));else{var f=this.$tree.find(">ul").hide();this._createFromTag(b,f),f.remove()}this._checkConsistency(),this.logDebug("Dynatree._load(): render nodes..."),this.enableUpdate(e),this.logDebug("Dynatree._load(): bind events..."),this.$widget.bind(),this.logDebug("Dynatree._load(): postInit..."),this.phase="postInit",a.persist&&this.persistence.write(),this.focusNode&&this.focusNode.isVisible()&&(this.logDebug("Focus on init: %o",this.focusNode),this.focusNode.focus()),!d&&a.onPostInit&&a.onPostInit.call(this,c,!1),this.phase="idle"},_reloadAjax:function(){var a=this.options;if(!a.initAjax||!a.initAjax.url)throw"tree.reload() requires 'initAjax' mode.";var b=this.persistence,c=$.extend({},a.initAjax);if(c.addActiveKey&&(c.data.activeKey=b.activeKey),c.addFocusedKey&&(c.data.focusedKey=b.focusedKey),c.addExpandedKeyList&&(c.data.expandedKeyList=b.expandedKeyList.join(",")),c.addSelectedKeyList&&(c.data.selectedKeyList=b.selectedKeyList.join(",")),a.onPostInit){c.success&&this.logWarning("initAjax: success callback is ignored when onPostInit was specified."),c.error&&this.logWarning("initAjax: error callback is ignored when onPostInit was specified.");var d=b.isReloading();c.success=function(b){a.onPostInit.call(b.tree,d,!1)},c.error=function(b){a.onPostInit.call(b.tree,d,!0)}}this.logDebug("Dynatree._init(): send Ajax request..."),this.tnRoot.appendAjax(c)},toString:function(){return"DynaTree '"+this.options.title+"'"},toDict:function(){return this.tnRoot.toDict(!0)},getPersistData:function(){return this.persistence.toDict()},logDebug:function(){this.options.debugLevel>=2&&(Array.prototype.unshift.apply(arguments,["debug"]),_log.apply(this,arguments))},logInfo:function(){this.options.debugLevel>=1&&(Array.prototype.unshift.apply(arguments,["info"]),_log.apply(this,arguments))},logWarning:function(){Array.prototype.unshift.apply(arguments,["warn"]),_log.apply(this,arguments)},isInitializing:function(){return"init"==this.phase||"postInit"==this.phase},isReloading:function(){return("init"==this.phase||"postInit"==this.phase)&&this.options.persist&&this.persistence.cookiesFound},isUserEvent:function(){return"userEvent"==this.phase},redraw:function(){this.logDebug("dynatree.redraw()..."),this.tnRoot.render(!0,!0),this.logDebug("dynatree.redraw() done.")},reloadAjax:function(){this.logWarning("tree.reloadAjax() is deprecated since v0.5.2 (use reload() instead).")},reload:function(){this._load()},getRoot:function(){return this.tnRoot},getNodeByKey:function(a){var b=document.getElementById(this.options.idPrefix+a);return b&&b.dtnode?b.dtnode:null},getActiveNode:function(){return this.activeNode},reactivate:function(a){var b=this.activeNode;b&&(this.activeNode=null,b.activate(),a&&b.focus())},getSelectedNodes:function(a){var b=[];return this.tnRoot.visit(function(c){return c.bSelected&&(b.push(c),1==a)?!1:void 0}),b},activateKey:function(a){var b=null===a?null:this.getNodeByKey(a);return b?(b.focus(),b.activate(),b):(this.activeNode&&this.activeNode.deactivate(),this.activeNode=null,null)},selectKey:function(a,b){var c=this.getNodeByKey(a);return c?(c.select(b),c):null},enableUpdate:function(a){return this.bEnableUpdate==a?a:(this.bEnableUpdate=a,a&&this.redraw(),!a)},visit:function(a,b,c){return this.tnRoot.visit(a,b,c)},_createFromTag:function(parentTreeNode,$ulParent){var self=this;$ulParent.find(">li").each(function(){var $li=$(this),$liSpan=$li.find(">span:first"),title;if($liSpan.length)title=$liSpan.html();else{title=$li.html();var iPos=title.search(/
      =0?title.substring(0,iPos):title)}var data={title:title,isFolder:$li.hasClass("folder"),isLazy:$li.hasClass("lazy"),expand:$li.hasClass("expanded"),select:$li.hasClass("selected"),activate:$li.hasClass("active"),focus:$li.hasClass("focused")};if($li.attr("title")&&(data.tooltip=$li.attr("title")),$li.attr("id")&&(data.key=$li.attr("id")),$li.attr("data")){var dataAttr=$.trim($li.attr("data"));if(dataAttr){"{"!=dataAttr.charAt(0)&&(dataAttr="{"+dataAttr+"}");try{$.extend(data,eval("("+dataAttr+")"))}catch(e){throw"Error parsing node data: "+e+"\ndata:\n'"+dataAttr+"'"}}}childNode=parentTreeNode.addChild(data);var $ul=$li.find(">ul:first");$ul.length&&self._createFromTag(childNode,$ul)})},_checkConsistency:function(){},lastentry:void 0},$.widget("ui.dynatree",{init:function(){return _log("warn","ui.dynatree.init() was called; you should upgrade to ui.core.js v1.6 or higher."),this._init()},_init:function(){return parseFloat($.ui.version)<1.8?(_log("info","ui.dynatree._init() was called; consider upgrading to jquery.ui.core.js v1.8 or higher."),this._create()):void _log("debug","ui.dynatree._init() was called; no current default functionality.")},_create:function(){parseFloat($.ui.version)>=1.8&&(this.options=$.extend(!0,{},$[this.namespace][this.widgetName].defaults,this.options)),logMsg("Dynatree._create(): version='%s', debugLevel=%o.",DynaTree.version,this.options.debugLevel);this.options;this.options.event+=".dynatree";this.element.get(0);this.tree=new DynaTree(this),this.tree._load(),this.tree.logDebug("Dynatree._create(): done.")},bind:function(){function a(a){for(var b=5;a&&b--;){if(a.dtnode)return a.dtnode;a=a.parentNode}return null}function b(b){b=arguments[0]=$.event.fix(b||window.event);var c=a(b.target);return c?c.onFocus(b):!1}var c=this.element,d=this.options;this.unbind();var e="click.dynatree dblclick.dynatree";d.keyboard&&(e+=" keypress.dynatree keydown.dynatree"),c.bind(e,function(b){var c=a(b.target);if(!c)return!0;var e=c.tree.phase;c.tree.phase="userEvent";try{switch(c.tree.logDebug("bind(%o): dtnode: %o",b,c),b.type){case"click":return d.onClick&&d.onClick(c,b)===!1?!1:c.onClick(b);case"dblclick":return d.onDblClick&&d.onDblClick(c,b)===!1?!1:c.onDblClick(b);case"keydown":return d.onKeydown&&d.onKeydown(c,b)===!1?!1:c.onKeydown(b);case"keypress":return d.onKeypress&&d.onKeypress(c,b)===!1?!1:c.onKeypress(b)}}catch(f){}finally{c.tree.phase=e}});var f=this.tree.divTree;f.addEventListener?(f.addEventListener("focus",b,!0),f.addEventListener("blur",b,!0)):f.onfocusin=f.onfocusout=b},unbind:function(){this.element.unbind(".dynatree")},enable:function(){this.bind(),$.widget.prototype.enable.apply(this,arguments)},disable:function(){this.unbind(),$.widget.prototype.disable.apply(this,arguments)},getTree:function(){return this.tree},getRoot:function(){return this.tree.getRoot()},getActiveNode:function(){return this.tree.getActiveNode()},getSelectedNodes:function(){return this.tree.getSelectedNodes()},lastentry:void 0}),$.ui.dynatree.getter="getTree getRoot getActiveNode getSelectedNodes",$.ui.dynatree.defaults={title:"Dynatree root",rootVisible:!1,minExpandLevel:1,imagePath:null,children:null,initId:null,initAjax:null,autoFocus:!0,keyboard:!0,persist:!1,autoCollapse:!1,clickFolderMode:3,activeVisible:!0,checkbox:!1,selectMode:2,fx:null,onClick:null,onDblClick:null,onKeydown:null,onKeypress:null,onFocus:null,onBlur:null,onQueryActivate:null,onQuerySelect:null,onQueryExpand:null,onPostInit:null,onActivate:null,onDeactivate:null,onSelect:null,onExpand:null,onLazyRead:null,ajaxDefaults:{cache:!1,dataType:"json"},strings:{loading:"Loading…",loadError:"Load error!"},idPrefix:"ui-dynatree-id-",cookieId:"dynatree",cookie:{expires:null},classNames:{container:"ui-dynatree-container",folder:"ui-dynatree-folder",document:"ui-dynatree-document",empty:"ui-dynatree-empty",vline:"ui-dynatree-vline",expander:"ui-dynatree-expander",connector:"ui-dynatree-connector",checkbox:"ui-dynatree-checkbox",nodeIcon:"ui-dynatree-icon",title:"ui-dynatree-title",nodeError:"ui-dynatree-statusnode-error",nodeWait:"ui-dynatree-statusnode-wait",hidden:"ui-dynatree-hidden",combinedExpanderPrefix:"ui-dynatree-exp-",combinedIconPrefix:"ui-dynatree-ico-",hasChildren:"ui-dynatree-has-children",active:"ui-dynatree-active",selected:"ui-dynatree-selected",expanded:"ui-dynatree-expanded",lazy:"ui-dynatree-lazy",focused:"ui-dynatree-focused",partsel:"ui-dynatree-partsel",lastsib:"ui-dynatree-lastsib"},debugLevel:1,lastentry:void 0},$.ui.dynatree.nodedatadefaults={title:null,key:null,isFolder:!1,isLazy:!1,tooltip:null,icon:null,addClass:null,activate:!1,focus:!1,expand:!1,select:!1,hideCheckbox:!1,unselectable:!1,children:null,lastentry:void 0}}(jQuery);var _rexDtLibName=/.*dynatree[^\/]*\.js$/i; //# sourceMappingURL=../../../maps/libs/jquery/jquery.dynatree.js.map \ No newline at end of file diff --git a/static/scripts/mvc/collection/list-collection-creator.js b/static/scripts/mvc/collection/list-collection-creator.js index 6a211d3740f..b73a39d7cac 100644 --- a/static/scripts/mvc/collection/list-collection-creator.js +++ b/static/scripts/mvc/collection/list-collection-creator.js @@ -1,2 +1,2 @@ -define(["mvc/history/hdca-model","mvc/dataset/states","mvc/base-mvc","mvc/ui/ui-modal","utils/natural-sort","utils/localization","ui/hoverhighlight"],function(a,b,c,d,e,f){function g(a){var b=a.toJSON(),c=k(b,{creationFn:function(b,c){return b=b.map(function(a){return{id:a.id,name:a.name,src:"dataset"===a.history_content_type?"hda":"hdca"}}),a.createHDCA(b,"list",c)}});return c}var h=Backbone.View.extend(c.LoggableMixin).extend({tagName:"li",className:"collection-element",initialize:function(a){this.element=a.element||{},this.selected=a.selected||!1},render:function(){return this.$el.attr("data-element-id",this.element.id).attr("draggable",!0).html(this.template({element:this.element})),this.selected&&this.$el.addClass("selected"),this},template:_.template(['',"<%= element.name %>","",'"].join("")),select:function(a){this.$el.toggleClass("selected",a),this.trigger("select",{source:this,selected:this.$el.hasClass("selected")})},discard:function(){var a=this,b=this.$el.parent().width();this.$el.animate({"margin-right":b},"fast",function(){a.trigger("discard",{source:a}),a.destroy()})},destroy:function(){this.off(),this.$el.remove()},events:{click:"_click","click .name":"_clickName","click .discard":"_clickDiscard",dragstart:"_dragstart",dragend:"_dragend",dragover:"_sendToParent",drop:"_sendToParent"},_click:function(a){a.stopPropagation(),this.select(a)},_clickName:function(a){a.stopPropagation(),a.preventDefault();var b=([f("Enter a new name for the element"),":\n(",f("Note that changing the name here will not rename the dataset"),")"].join(""),prompt(f("Enter a new name for the element")+":",this.element.name));b&&(this.element.name=b,this.render())},_clickDiscard:function(a){a.stopPropagation(),this.discard()},_dragstart:function(a){a.originalEvent&&(a=a.originalEvent),a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",JSON.stringify(this.element)),this.$el.addClass("dragging"),this.$el.parent().trigger("collection-element.dragstart",[this])},_dragend:function(){this.$el.removeClass("dragging"),this.$el.parent().trigger("collection-element.dragend",[this])},_sendToParent:function(a){this.$el.parent().trigger(a)},toString:function(){return"DatasetCollectionElementView()"}}),i=Backbone.View.extend(c.LoggableMixin).extend({elementViewClass:h,collectionClass:a.HistoryListDatasetCollection,className:"list-collection-creator collection-creator flex-row-container",minElements:1,defaultAttributes:{creationFn:function(){throw new TypeError("no creation fn for creator")},oncreate:function(){},oncancel:function(){},autoscrollDist:24,highlightClr:"rgba( 64, 255, 255, 1.0 )"},initialize:function(a){this.metric("ListCollectionCreator.initialize",a);var b=this;_.each(this.defaultAttributes,function(c,d){c=a[d]||c,b[d]=c}),b.initialElements=a.elements||[],this._instanceSetUp(),this._elementsSetUp(),this._setUpBehaviors()},_instanceSetUp:function(){this.selectedIds={},this.$dragging=null,this.blocking=!1},_elementsSetUp:function(){this.invalidElements=[],this.workingElements=[],this.elementViews=[],this.workingElements=this.initialElements.slice(0),this._ensureElementIds(),this._validateElements(),this._mangleDuplicateNames(),this._sortElements()},_ensureElementIds:function(){return this.workingElements.forEach(function(a){a.hasOwnProperty("id")||(a.id=_.uniqueId())}),this.workingElements},_validateElements:function(){var a=this;return a.invalidElements=[],this.workingElements=this.workingElements.filter(function(b){var c=a._isElementInvalid(b);return c&&a.invalidElements.push({element:b,text:c}),!c}),this.workingElements},_isElementInvalid:function(a){return"dataset"!==a.history_content_type?f("is not a dataset"):a.state!==b.OK?f(_.contains(b.NOT_READY_STATES,a.state)?"hasn't finished running yet":"has errored, is paused, or is not accessible"):a.deleted||a.purged?f("has been deleted or purged"):null},_mangleDuplicateNames:function(){var a=900,b=1,c={};this.workingElements.forEach(function(d){for(var e=d.name;c.hasOwnProperty(e);)if(e=d.name+" ("+b+")",b+=1,b>=a)throw new Error("Safety hit in while loop - thats impressive");d.name=e,c[d.name]=!0})},_sortElements:function(){},render:function(a,b){return this.workingElements.length .clear-selected").show():this.$(".collection-elements-controls > .clear-selected").hide()},_renderList:function(){var a=this,b=jQuery("
      "),c=a.$list();_.each(this.elementViews,function(b){b.destroy(),a.removeElementView(b)}),a.workingElements.forEach(function(c){var d=a._createElementView(c);b.append(d.$el)}),a._renderClearSelected(),c.empty().append(b.children()),_.invoke(a.elementViews,"render"),c.height()>c.css("max-height")?c.css("border-width","1px 0px 1px 0px"):c.css("border-width","0px")},_createElementView:function(a){var b=new this.elementViewClass({element:a,selected:_.has(this.selectedIds,a.id)});return this.elementViews.push(b),this._listenToElementView(b),b},_listenToElementView:function(a){var b=this;b.listenTo(a,{select:function(a){var c=a.source.element;a.selected?b.selectedIds[c.id]=!0:delete b.selectedIds[c.id],b.trigger("elements:select",a)},discard:function(a){b.trigger("elements:discard",a)}})},addElementView:function(){},removeElementView:function(a){delete this.selectedIds[a.element.id],this._renderClearSelected(),this.elementViews=_.without(this.elementViews,a),this.stopListening(a)},_renderNoElementsLeft:function(){this._disableNameAndCreate(!0),this.$(".collection-elements").append(this.templates.noElementsLeft())},_elementToJSON:function(a){return a},createList:function(a){if(!this.workingElements.length){var b=f("No valid elements for final list")+". ";return b+=''+f("Cancel")+" ",b+=f("or"),b+=' '+f("start over")+".",void this._showAlert(b)}var c=this,d=this.workingElements.map(function(a){return c._elementToJSON(a)});return c.blocking=!0,c.creationFn(d,a).always(function(){c.blocking=!1}).fail(function(a,b){c.trigger("error",{xhr:a,status:b,message:f("An error occurred while creating this collection")})}).done(function(a,b,d){c.trigger("collection:created",a,b,d),c.metric("collection:created",a),"function"==typeof c.oncreate&&c.oncreate.call(this,a,b,d)})},_setUpBehaviors:function(){return this.on("error",this._errorHandler),this.once("rendered",function(){this.trigger("rendered:initial",this)}),this.on("elements:select",function(){this._renderClearSelected()}),this.on("elements:discard",function(a){var b=a.source.element;this.removeElementView(a.source),this.workingElements=_.without(this.workingElements,b),this.workingElements.length||this._renderNoElementsLeft()}),this},_errorHandler:function(a){this.error(a);var b=this;if(content=a.message||f("An error occurred"),a.xhr){var c=a.xhr,d=a.message;content+=0===c.readyState&&0===c.status?": "+f("Galaxy could not be reached and may be updating.")+f(" Try again in a few minutes."):c.responseJSON?":
      "+JSON.stringify(c.responseJSON)+"
      ":": "+d}b._showAlert(content,"alert-danger")},events:{"click .more-help":"_clickMoreHelp","click .less-help":"_clickLessHelp","click .main-help":"_toggleHelp","click .header .alert button":"_hideAlert","click .reset":"reset","click .clear-selected":"clearSelectedElements","click .collection-elements":"clearSelectedElements","dragover .collection-elements":"_dragoverElements","drop .collection-elements":"_dropElements","collection-element.dragstart .collection-elements":"_elementDragstart","collection-element.dragend .collection-elements":"_elementDragend","change .collection-name":"_changeName","keydown .collection-name":"_nameCheckForEnter","click .cancel-create":function(){"function"==typeof this.oncancel&&this.oncancel.call(this)},"click .create-collection":"_clickCreate"},_clickMoreHelp:function(a){a.stopPropagation(),this.$(".main-help").addClass("expanded"),this.$(".more-help").hide()},_clickLessHelp:function(a){a.stopPropagation(),this.$(".main-help").removeClass("expanded"),this.$(".more-help").show()},_toggleHelp:function(a){a.stopPropagation(),this.$(".main-help").toggleClass("expanded"),this.$(".more-help").toggle()},_showAlert:function(a,b){b=b||"alert-danger",this.$(".main-help").hide(),this.$(".header .alert").attr("class","alert alert-dismissable").addClass(b).show().find(".alert-message").html(a)},_hideAlert:function(){this.$(".main-help").show(),this.$(".header .alert").hide()},reset:function(){this._instanceSetUp(),this._elementsSetUp(),this.render()},clearSelectedElements:function(){this.$(".collection-elements .collection-element").removeClass("selected"),this.$(".collection-elements-controls > .clear-selected").hide()},_dragoverElements:function(a){a.preventDefault();var b=this.$list();this._checkForAutoscroll(b,a.originalEvent.clientY);var c=this._getNearestElement(a.originalEvent.clientY);this.$(".element-drop-placeholder").remove();var d=$('
      ');c.size()?c.before(d):b.append(d)},_checkForAutoscroll:function(a,b){var c=2,d=a.offset(),e=a.scrollTop(),f=b-d.top,g=d.top+a.outerHeight()-b;f>=0&&f=0&&ga&&a>f-g)return e}return $()},_dropElements:function(a){a.originalEvent&&(a=a.originalEvent),a.preventDefault(),a.dataTransfer.dropEffect="move";var b=this._getNearestElement(a.clientY);return b.size()?this.$dragging.insertBefore(b):this.$dragging.insertAfter(this.$(".collection-elements .collection-element").last()),this._syncOrderToDom(),!1},_syncOrderToDom:function(){var a=this,b=[];this.$(".collection-elements .collection-element").each(function(){var c=$(this).attr("data-element-id"),d=_.findWhere(a.workingElements,{id:c});d?b.push(d):console.error("missing element: ",c)}),this.workingElements=b,this._renderList()},_elementDragstart:function(a,b){b.select(!0),this.$dragging=this.$(".collection-elements .collection-element.selected")},_elementDragend:function(){$(".element-drop-placeholder").remove(),this.$dragging=null},_changeName:function(){this._validationWarning("name",!!this._getName())},_nameCheckForEnter:function(a){13!==a.keyCode||this.blocking||this._clickCreate()},_getName:function(){return _.escape(this.$(".collection-name").val())},_clickCreate:function(){var a=this._getName();a?this.blocking||this.createList(a):this._validationWarning("name")},templates:{main:_.template(['
      ','
      ',''].join("")),header:_.template(['",'
      ','','',"
      "].join("")),middle:_.template(['",'
      ',"
      "].join("")),footer:_.template(['
      ','
      ','','
      ',f("Name"),":
      ","
      ","
      ",'
      ','
      ','",'
      ','",'","
      ","
      ",'
      ','","
      ","
      "].join("")),helpContent:_.template(["

      ",f(["Collections of datasets are permanent, ordered lists of datasets that can be passed to tools and ","workflows in order to have analyses done on each member of the entire group. This interface allows ","you to create a collection and re-order the final collection."].join("")),"

      ","
        ","
      • ",f(["Rename elements in the list by clicking on ",'the existing name.'].join("")),"
      • ","
      • ",f(["Discard elements from the final created list by clicking on the ",'"Discard" button.'].join("")),"
      • ","
      • ",f(["Reorder the list by clicking and dragging elements. Select multiple elements by clicking on ",'them and you can then move those selected by dragging the ',"entire group. Deselect them by clicking them again or by clicking the ",'the "Clear selected" link.'].join("")),"
      • ","
      • ",f(['Click the "Start over" link to begin again as if you had just opened ',"the interface."].join("")),"
      • ","
      • ",f(['Click the "Cancel" button to exit the interface.'].join("")),"
      • ","

      ","

      ",f(['Once your collection is complete, enter a name and ','click "Create list".'].join("")),"

      "].join("")),invalidElements:_.template([f("The following selections could not be included due to problems:"),"
        <% _.each( problems, function( problem ){ %>","
      • <%= problem.element.name %>: <%= problem.text %>
      • ","<% }); %>
      "].join("")),noElementsLeft:_.template(['
    • ',f("No elements left! "),f("Would you like to "),'',f("start over"),"?","
    • "].join("")),invalidInitial:_.template(['
      ','
      ','',"<% if( _.size( problems ) ){ %>",f("The following selections could not be included due to problems"),":","
        <% _.each( problems, function( problem ){ %>","
      • <%= problem.element.name %>: <%= problem.text %>
      • ","<% }); %>
      ","<% } else if( _.size( elements ) < 1 ){ %>",f("No datasets were selected"),".","<% } %>","
      ",f("At least one element is needed for the collection"),". ",f("You may need to "),'',f("cancel")," ",f("and reselect new elements"),".","
      ","
      ","
      ",'"].join(""))},toString:function(){return"ListCollectionCreator"}}),j=function(a,b,c){var e,g=jQuery.Deferred(),h=Galaxy.modal||new d.View;return b=_.defaults(b||{},{elements:a,oncancel:function(){h.hide(),g.reject("cancelled")},oncreate:function(a,b){h.hide(),g.resolve(b)}}),e=new c(b),h.show({title:b.title||f("Create a collection"),body:e.$el,width:"80%",height:"min-content",closing_events:!0}),e.render(),window._collectionCreator=e,g},k=function(a,b){return b=b||{},b.title=f("Create a collection from a list of datasets"),j(a,b,i)};return{DatasetCollectionElementView:h,ListCollectionCreator:i,collectionCreatorModal:j,listCollectionCreatorModal:k,createListCollection:g}}); +define(["mvc/history/hdca-model","mvc/dataset/states","mvc/base-mvc","mvc/ui/ui-modal","utils/natural-sort","utils/localization","ui/hoverhighlight"],function(a,b,c,d,e,f){function g(a){var b=a.toJSON(),c=k(b,{creationFn:function(b,c){return b=b.map(function(a){return{id:a.id,name:a.name,src:"dataset"===a.history_content_type?"hda":"hdca"}}),a.createHDCA(b,"list",c)}});return c}var h=Backbone.View.extend(c.LoggableMixin).extend({tagName:"li",className:"collection-element",initialize:function(a){this.element=a.element||{},this.selected=a.selected||!1},render:function(){return this.$el.attr("data-element-id",this.element.id).attr("draggable",!0).html(this.template({element:this.element})),this.selected&&this.$el.addClass("selected"),this},template:_.template(['',"<%- element.name %>","",'"].join("")),select:function(a){this.$el.toggleClass("selected",a),this.trigger("select",{source:this,selected:this.$el.hasClass("selected")})},discard:function(){var a=this,b=this.$el.parent().width();this.$el.animate({"margin-right":b},"fast",function(){a.trigger("discard",{source:a}),a.destroy()})},destroy:function(){this.off(),this.$el.remove()},events:{click:"_click","click .name":"_clickName","click .discard":"_clickDiscard",dragstart:"_dragstart",dragend:"_dragend",dragover:"_sendToParent",drop:"_sendToParent"},_click:function(a){a.stopPropagation(),this.select(a)},_clickName:function(a){a.stopPropagation(),a.preventDefault();var b=([f("Enter a new name for the element"),":\n(",f("Note that changing the name here will not rename the dataset"),")"].join(""),prompt(f("Enter a new name for the element")+":",this.element.name));b&&(this.element.name=b,this.render())},_clickDiscard:function(a){a.stopPropagation(),this.discard()},_dragstart:function(a){a.originalEvent&&(a=a.originalEvent),a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",JSON.stringify(this.element)),this.$el.addClass("dragging"),this.$el.parent().trigger("collection-element.dragstart",[this])},_dragend:function(){this.$el.removeClass("dragging"),this.$el.parent().trigger("collection-element.dragend",[this])},_sendToParent:function(a){this.$el.parent().trigger(a)},toString:function(){return"DatasetCollectionElementView()"}}),i=Backbone.View.extend(c.LoggableMixin).extend({elementViewClass:h,collectionClass:a.HistoryListDatasetCollection,className:"list-collection-creator collection-creator flex-row-container",minElements:1,defaultAttributes:{creationFn:function(){throw new TypeError("no creation fn for creator")},oncreate:function(){},oncancel:function(){},autoscrollDist:24,highlightClr:"rgba( 64, 255, 255, 1.0 )"},initialize:function(a){this.metric("ListCollectionCreator.initialize",a);var b=this;_.each(this.defaultAttributes,function(c,d){c=a[d]||c,b[d]=c}),b.initialElements=a.elements||[],this._instanceSetUp(),this._elementsSetUp(),this._setUpBehaviors()},_instanceSetUp:function(){this.selectedIds={},this.$dragging=null,this.blocking=!1},_elementsSetUp:function(){this.invalidElements=[],this.workingElements=[],this.elementViews=[],this.workingElements=this.initialElements.slice(0),this._ensureElementIds(),this._validateElements(),this._mangleDuplicateNames(),this._sortElements()},_ensureElementIds:function(){return this.workingElements.forEach(function(a){a.hasOwnProperty("id")||(a.id=_.uniqueId())}),this.workingElements},_validateElements:function(){var a=this;return a.invalidElements=[],this.workingElements=this.workingElements.filter(function(b){var c=a._isElementInvalid(b);return c&&a.invalidElements.push({element:b,text:c}),!c}),this.workingElements},_isElementInvalid:function(a){return"dataset"!==a.history_content_type?f("is not a dataset"):a.state!==b.OK?f(_.contains(b.NOT_READY_STATES,a.state)?"hasn't finished running yet":"has errored, is paused, or is not accessible"):a.deleted||a.purged?f("has been deleted or purged"):null},_mangleDuplicateNames:function(){var a=900,b=1,c={};this.workingElements.forEach(function(d){for(var e=d.name;c.hasOwnProperty(e);)if(e=d.name+" ("+b+")",b+=1,b>=a)throw new Error("Safety hit in while loop - thats impressive");d.name=e,c[d.name]=!0})},_sortElements:function(){},render:function(a,b){return this.workingElements.length .clear-selected").show():this.$(".collection-elements-controls > .clear-selected").hide()},_renderList:function(){var a=this,b=jQuery("
      "),c=a.$list();_.each(this.elementViews,function(b){b.destroy(),a.removeElementView(b)}),a.workingElements.forEach(function(c){var d=a._createElementView(c);b.append(d.$el)}),a._renderClearSelected(),c.empty().append(b.children()),_.invoke(a.elementViews,"render"),c.height()>c.css("max-height")?c.css("border-width","1px 0px 1px 0px"):c.css("border-width","0px")},_createElementView:function(a){var b=new this.elementViewClass({element:a,selected:_.has(this.selectedIds,a.id)});return this.elementViews.push(b),this._listenToElementView(b),b},_listenToElementView:function(a){var b=this;b.listenTo(a,{select:function(a){var c=a.source.element;a.selected?b.selectedIds[c.id]=!0:delete b.selectedIds[c.id],b.trigger("elements:select",a)},discard:function(a){b.trigger("elements:discard",a)}})},addElementView:function(){},removeElementView:function(a){delete this.selectedIds[a.element.id],this._renderClearSelected(),this.elementViews=_.without(this.elementViews,a),this.stopListening(a)},_renderNoElementsLeft:function(){this._disableNameAndCreate(!0),this.$(".collection-elements").append(this.templates.noElementsLeft())},_elementToJSON:function(a){return a},createList:function(a){if(!this.workingElements.length){var b=f("No valid elements for final list")+". ";return b+=''+f("Cancel")+" ",b+=f("or"),b+=' '+f("start over")+".",void this._showAlert(b)}var c=this,d=this.workingElements.map(function(a){return c._elementToJSON(a)});return c.blocking=!0,c.creationFn(d,a).always(function(){c.blocking=!1}).fail(function(a,b){c.trigger("error",{xhr:a,status:b,message:f("An error occurred while creating this collection")})}).done(function(a,b,d){c.trigger("collection:created",a,b,d),c.metric("collection:created",a),"function"==typeof c.oncreate&&c.oncreate.call(this,a,b,d)})},_setUpBehaviors:function(){return this.on("error",this._errorHandler),this.once("rendered",function(){this.trigger("rendered:initial",this)}),this.on("elements:select",function(){this._renderClearSelected()}),this.on("elements:discard",function(a){var b=a.source.element;this.removeElementView(a.source),this.workingElements=_.without(this.workingElements,b),this.workingElements.length||this._renderNoElementsLeft()}),this},_errorHandler:function(a){this.error(a);var b=this;if(content=a.message||f("An error occurred"),a.xhr){var c=a.xhr,d=a.message;content+=0===c.readyState&&0===c.status?": "+f("Galaxy could not be reached and may be updating.")+f(" Try again in a few minutes."):c.responseJSON?":
      "+JSON.stringify(c.responseJSON)+"
      ":": "+d}b._showAlert(content,"alert-danger")},events:{"click .more-help":"_clickMoreHelp","click .less-help":"_clickLessHelp","click .main-help":"_toggleHelp","click .header .alert button":"_hideAlert","click .reset":"reset","click .clear-selected":"clearSelectedElements","click .collection-elements":"clearSelectedElements","dragover .collection-elements":"_dragoverElements","drop .collection-elements":"_dropElements","collection-element.dragstart .collection-elements":"_elementDragstart","collection-element.dragend .collection-elements":"_elementDragend","change .collection-name":"_changeName","keydown .collection-name":"_nameCheckForEnter","click .cancel-create":function(){"function"==typeof this.oncancel&&this.oncancel.call(this)},"click .create-collection":"_clickCreate"},_clickMoreHelp:function(a){a.stopPropagation(),this.$(".main-help").addClass("expanded"),this.$(".more-help").hide()},_clickLessHelp:function(a){a.stopPropagation(),this.$(".main-help").removeClass("expanded"),this.$(".more-help").show()},_toggleHelp:function(a){a.stopPropagation(),this.$(".main-help").toggleClass("expanded"),this.$(".more-help").toggle()},_showAlert:function(a,b){b=b||"alert-danger",this.$(".main-help").hide(),this.$(".header .alert").attr("class","alert alert-dismissable").addClass(b).show().find(".alert-message").html(a)},_hideAlert:function(){this.$(".main-help").show(),this.$(".header .alert").hide()},reset:function(){this._instanceSetUp(),this._elementsSetUp(),this.render()},clearSelectedElements:function(){this.$(".collection-elements .collection-element").removeClass("selected"),this.$(".collection-elements-controls > .clear-selected").hide()},_dragoverElements:function(a){a.preventDefault();var b=this.$list();this._checkForAutoscroll(b,a.originalEvent.clientY);var c=this._getNearestElement(a.originalEvent.clientY);this.$(".element-drop-placeholder").remove();var d=$('
      ');c.size()?c.before(d):b.append(d)},_checkForAutoscroll:function(a,b){var c=2,d=a.offset(),e=a.scrollTop(),f=b-d.top,g=d.top+a.outerHeight()-b;f>=0&&f=0&&ga&&a>f-g)return e}return $()},_dropElements:function(a){a.originalEvent&&(a=a.originalEvent),a.preventDefault(),a.dataTransfer.dropEffect="move";var b=this._getNearestElement(a.clientY);return b.size()?this.$dragging.insertBefore(b):this.$dragging.insertAfter(this.$(".collection-elements .collection-element").last()),this._syncOrderToDom(),!1},_syncOrderToDom:function(){var a=this,b=[];this.$(".collection-elements .collection-element").each(function(){var c=$(this).attr("data-element-id"),d=_.findWhere(a.workingElements,{id:c});d?b.push(d):console.error("missing element: ",c)}),this.workingElements=b,this._renderList()},_elementDragstart:function(a,b){b.select(!0),this.$dragging=this.$(".collection-elements .collection-element.selected")},_elementDragend:function(){$(".element-drop-placeholder").remove(),this.$dragging=null},_changeName:function(){this._validationWarning("name",!!this._getName())},_nameCheckForEnter:function(a){13!==a.keyCode||this.blocking||this._clickCreate()},_getName:function(){return _.escape(this.$(".collection-name").val())},_clickCreate:function(){var a=this._getName();a?this.blocking||this.createList(a):this._validationWarning("name")},templates:{main:_.template(['
      ','
      ',''].join("")),header:_.template(['",'
      ','','',"
      "].join("")),middle:_.template(['",'
      ',"
      "].join("")),footer:_.template(['
      ','
      ','','
      ',f("Name"),":
      ","
      ","
      ",'
      ','
      ','",'
      ','",'","
      ","
      ",'
      ','","
      ","
      "].join("")),helpContent:_.template(["

      ",f(["Collections of datasets are permanent, ordered lists of datasets that can be passed to tools and ","workflows in order to have analyses done on each member of the entire group. This interface allows ","you to create a collection and re-order the final collection."].join("")),"

      ","
        ","
      • ",f(["Rename elements in the list by clicking on ",'the existing name.'].join("")),"
      • ","
      • ",f(["Discard elements from the final created list by clicking on the ",'"Discard" button.'].join("")),"
      • ","
      • ",f(["Reorder the list by clicking and dragging elements. Select multiple elements by clicking on ",'them and you can then move those selected by dragging the ',"entire group. Deselect them by clicking them again or by clicking the ",'the "Clear selected" link.'].join("")),"
      • ","
      • ",f(['Click the "Start over" link to begin again as if you had just opened ',"the interface."].join("")),"
      • ","
      • ",f(['Click the "Cancel" button to exit the interface.'].join("")),"
      • ","

      ","

      ",f(['Once your collection is complete, enter a name and ','click "Create list".'].join("")),"

      "].join("")),invalidElements:_.template([f("The following selections could not be included due to problems:"),"
        <% _.each( problems, function( problem ){ %>","
      • <%- problem.element.name %>: <%- problem.text %>
      • ","<% }); %>
      "].join("")),noElementsLeft:_.template(['
    • ',f("No elements left! "),f("Would you like to "),'',f("start over"),"?","
    • "].join("")),invalidInitial:_.template(['
      ','
      ','',"<% if( _.size( problems ) ){ %>",f("The following selections could not be included due to problems"),":","
        <% _.each( problems, function( problem ){ %>","
      • <%- problem.element.name %>: <%- problem.text %>
      • ","<% }); %>
      ","<% } else if( _.size( elements ) < 1 ){ %>",f("No datasets were selected"),".","<% } %>","
      ",f("At least one element is needed for the collection"),". ",f("You may need to "),'',f("cancel")," ",f("and reselect new elements"),".","
      ","
      ","
      ",'"].join(""))},toString:function(){return"ListCollectionCreator"}}),j=function(a,b,c){var e,g=jQuery.Deferred(),h=Galaxy.modal||new d.View;return b=_.defaults(b||{},{elements:a,oncancel:function(){h.hide(),g.reject("cancelled")},oncreate:function(a,b){h.hide(),g.resolve(b)}}),e=new c(b),h.show({title:b.title||f("Create a collection"),body:e.$el,width:"80%",height:"min-content",closing_events:!0}),e.render(),window._collectionCreator=e,g},k=function(a,b){return b=b||{},b.title=f("Create a collection from a list of datasets"),j(a,b,i)};return{DatasetCollectionElementView:h,ListCollectionCreator:i,collectionCreatorModal:j,listCollectionCreatorModal:k,createListCollection:g}}); //# sourceMappingURL=../../../maps/mvc/collection/list-collection-creator.js.map \ No newline at end of file diff --git a/static/scripts/mvc/collection/list-of-pairs-collection-creator.js b/static/scripts/mvc/collection/list-of-pairs-collection-creator.js index ebd395c3013..e6968d6c49f 100644 --- a/static/scripts/mvc/collection/list-of-pairs-collection-creator.js +++ b/static/scripts/mvc/collection/list-of-pairs-collection-creator.js @@ -1,2 +1,2 @@ -define(["utils/levenshtein","utils/natural-sort","mvc/collection/list-collection-creator","mvc/base-mvc","utils/localization","ui/hoverhighlight"],function(a,b,c,d,e){function f(a){function b(){return c.length||(c=[new RegExp(this.filters[0]),new RegExp(this.filters[1])]),c}a=a||{},a.createPair=a.createPair||function(a){return this.debug("creating pair:",a.listA[a.indexA].name,a.listB[a.indexB].name),a=a||{},this._pair(a.listA.splice(a.indexA,1)[0],a.listB.splice(a.indexB,1)[0],{silent:!0})};var c=[];return a.preprocessMatch=a.preprocessMatch||function(a){var c=b.call(this);return _.extend(a,{matchTo:a.matchTo.name.replace(c[0],""),possible:a.possible.name.replace(c[1],"")})},function(b){this.debug("autopair _strategy ---------------------------"),b=b||{};var c,d=b.listA,e=b.listB,f=0,g={score:0,index:null},h=[];for(this.debug("starting list lens:",d.length,e.length),this.debug("bestMatch (starting):",JSON.stringify(g,null," "));f=k?(this.debug("creating pair"),h.push(a.createPair.call(this,{listA:d,indexA:f,listB:e,indexB:g.index})),this.debug("list lens now:",d.length,e.length)):f+=1,!d.length||!e.length)return h}return this.debug("paired:",JSON.stringify(h,null," ")),this.debug("autopair _strategy ---------------------------"),h}}function g(a){var b=a.toJSON();return j(b,{historyId:a.historyId})}var h=Backbone.View.extend(d.LoggableMixin).extend({tagName:"li",className:"dataset paired",initialize:function(a){this.pair=a.pair||{}},template:_.template(['<%= pair.forward.name %>','','<%= pair.name %>',"",'<%= pair.reverse.name %>'].join("")),render:function(){return this.$el.attr("draggable",!0).data("pair",this.pair).html(this.template({pair:this.pair})).addClass("flex-column-container"),this},events:{dragstart:"_dragstart",dragend:"_dragend",dragover:"_sendToParent",drop:"_sendToParent"},_dragstart:function(a){a.currentTarget.style.opacity="0.4",a.originalEvent&&(a=a.originalEvent),a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",JSON.stringify(this.pair)),this.$el.parent().trigger("pair.dragstart",[this])},_dragend:function(a){a.currentTarget.style.opacity="1.0",this.$el.parent().trigger("pair.dragend",[this])},_sendToParent:function(a){this.$el.parent().trigger(a)},toString:function(){return"PairView("+this.pair.name+")"}}),i=Backbone.View.extend(d.LoggableMixin).extend({className:"list-of-pairs-collection-creator collection-creator flex-row-container",initialize:function(a){this.metric("PairedCollectionCreator.initialize",a),a=_.defaults(a,{datasets:[],filters:this.DEFAULT_FILTERS,automaticallyPair:!0,strategy:"lcs",matchPercentage:.9,twoPassAutopairing:!0}),this.initialList=a.datasets,this.historyId=a.historyId,this.filters=this.commonFilters[a.filters]||this.commonFilters[this.DEFAULT_FILTERS],_.isArray(a.filters)&&(this.filters=a.filters),this.automaticallyPair=a.automaticallyPair,this.strategy=this.strategies[a.strategy]||this.strategies[this.DEFAULT_STRATEGY],_.isFunction(a.strategy)&&(this.strategy=a.strategy),this.matchPercentage=a.matchPercentage,this.twoPassAutopairing=a.twoPassAutopairing,this.removeExtensions=!0,this.oncancel=a.oncancel,this.oncreate=a.oncreate,this.autoscrollDist=a.autoscrollDist||24,this.unpairedPanelHidden=!1,this.pairedPanelHidden=!1,this.$dragging=null,this.blocking=!1,this._setUpBehaviors(),this._dataSetUp()},commonFilters:{illumina:["_1","_2"],Rs:["_R1","_R2"]},DEFAULT_FILTERS:"illumina",strategies:{simple:"autopairSimple",lcs:"autopairLCS",levenshtein:"autopairLevenshtein"},DEFAULT_STRATEGY:"lcs",_dataSetUp:function(){this.paired=[],this.unpaired=[],this.selectedIds=[],this._sortInitialList(),this._ensureIds(),this.unpaired=this.initialList.slice(0),this.automaticallyPair&&(this.autoPair(),this.once("rendered:initial",function(){this.trigger("autopair")}))},_sortInitialList:function(){this._sortDatasetList(this.initialList)},_sortDatasetList:function(a){return a.sort(function(a,c){return b(a.name,c.name)}),a},_ensureIds:function(){return this.initialList.forEach(function(a){a.hasOwnProperty("id")||(a.id=_.uniqueId())}),this.initialList},_splitByFilters:function(){function a(a,b){return b.test(a.name)}var b=this.filters.map(function(a){return new RegExp(a)}),c=[[],[]];return this.unpaired.forEach(function(d){b.forEach(function(b,e){a(d,b)&&c[e].push(d)})}),c},_addToUnpaired:function(a){var c=function(d,e){if(d===e)return d;var f=Math.floor((e-d)/2)+d,g=b(a.name,this.unpaired[f].name);if(0>g)return c(d,f);if(g>0)return c(f+1,e);for(;this.unpaired[f]&&this.unpaired[f].name===a.name;)f++;return f}.bind(this);this.unpaired.splice(c(0,this.unpaired.length),0,a)},autoPair:function(a){var b=this._splitByFilters(),c=[];return this.twoPassAutopairing&&(c=this.autopairSimple({listA:b[0],listB:b[1]}),b=this._splitByFilters()),a=a||this.strategy,b=this._splitByFilters(),c=c.concat(this[a].call(this,{listA:b[0],listB:b[1]}))},autopairSimple:f({scoreThreshold:function(){return 1},match:function(a){return a=a||{},a.matchTo===a.possible?{index:a.index,score:1}:a.bestMatch}}),autopairLevenshtein:f({scoreThreshold:function(){return this.matchPercentage},match:function(b){b=b||{};var c=a(b.matchTo,b.possible),d=1-c/Math.max(b.matchTo.length,b.possible.length);return d>b.bestMatch.score?{index:b.index,score:d}:b.bestMatch}}),autopairLCS:f({scoreThreshold:function(){return this.matchPercentage},match:function(a){a=a||{};var b=this._naiveStartingAndEndingLCS(a.matchTo,a.possible).length,c=b/Math.max(a.matchTo.length,a.possible.length);return c>a.bestMatch.score?{index:a.index,score:c}:a.bestMatch}}),_naiveStartingAndEndingLCS:function(a,b){for(var c="",d="",e=0,f=0;e=0&&f>=0&&a[e]===b[f];)d=[a[e],d].join(""),e-=1,f-=1;return c+d},_pair:function(a,b,c){c=c||{};var d=this._createPair(a,b,c.name);return this.paired.push(d),this.unpaired=_.without(this.unpaired,a,b),c.silent||this.trigger("pair:new",d),d},_createPair:function(a,b,c){if(!a||!b||a===b)throw new Error("Bad pairing: "+[JSON.stringify(a),JSON.stringify(b)]);return c=c||this._guessNameForPair(a,b),{forward:a,name:c,reverse:b}},_guessNameForPair:function(a,b,c){c=void 0!==c?c:this.removeExtensions;var d=a.name,e=b.name,f=this._naiveStartingAndEndingLCS(d.replace(this.filters[0],""),e.replace(this.filters[1],""));if(c){var g=f.lastIndexOf(".");if(g>0){var h=f.slice(g,f.length);f=f.replace(h,""),d=d.replace(h,""),e=e.replace(h,"")}}return f||d+" & "+e},_unpair:function(a,b){if(b=b||{},!a)throw new Error("Bad pair: "+JSON.stringify(a));return this.paired=_.without(this.paired,a),this._addToUnpaired(a.forward),this._addToUnpaired(a.reverse),b.silent||this.trigger("pair:unpair",[a]),a},unpairAll:function(){for(var a=[];this.paired.length;)a.push(this._unpair(this.paired[0],{silent:!0}));this.trigger("pair:unpair",a)},_pairToJSON:function(a,b){return b=b||"hda",{collection_type:"paired",src:"new_collection",name:a.name,element_identifiers:[{name:"forward",id:a.forward.id,src:b},{name:"reverse",id:a.reverse.id,src:b}]}},createList:function(a){var b=this,c=window.Galaxy&&Galaxy.options.root?Galaxy.options.root:"/",d=c+"api/histories/"+this.historyId+"/contents/dataset_collections",e={type:"dataset_collection",collection_type:"list:paired",name:_.escape(a||b.$(".collection-name").val()),element_identifiers:b.paired.map(function(a){return b._pairToJSON(a)})};return b.blocking=!0,jQuery.ajax(d,{type:"POST",contentType:"application/json",dataType:"json",data:JSON.stringify(e)}).always(function(){b.blocking=!1}).fail(function(a,c,d){b._ajaxErrHandler(a,c,d)}).done(function(a,c,d){b.trigger("collection:created",a,c,d),b.metric("collection:created",a),"function"==typeof b.oncreate&&b.oncreate.call(this,a,c,d)})},_ajaxErrHandler:function(a,b,c){this.error(a,b,c);var d=e("An error occurred while creating this collection");a&&(d+=0===a.readyState&&0===a.status?": "+e("Galaxy could not be reached and may be updating.")+e(" Try again in a few minutes."):a.responseJSON?"
      "+JSON.stringify(a.responseJSON)+"
      ":": "+c),creator._showAlert(d,"alert-danger")},render:function(a){return this.$el.empty().html(i.templates.main()),this._renderHeader(a),this._renderMiddle(a),this._renderFooter(a),this._addPluginComponents(),this.trigger("rendered",this),this},_renderHeader:function(){var a=this.$(".header").empty().html(i.templates.header()).find(".help-content").prepend($(i.templates.helpContent()));return this._renderFilters(),a},_renderFilters:function(){return this.$(".forward-column .column-header input").val(this.filters[0]).add(this.$(".reverse-column .column-header input").val(this.filters[1]))},_renderMiddle:function(){var a=this.$(".middle").empty().html(i.templates.middle());return this.unpairedPanelHidden?this.$(".unpaired-columns").hide():this.pairedPanelHidden&&this.$(".paired-columns").hide(),this._renderUnpaired(),this._renderPaired(),a},_renderUnpaired:function(){var a,b,c=this,d=[],f=this._splitByFilters();return this.$(".forward-column .title").text([f[0].length,e("unpaired forward")].join(" ")),this.$(".forward-column .unpaired-info").text(this._renderUnpairedDisplayStr(this.unpaired.length-f[0].length)),this.$(".reverse-column .title").text([f[1].length,e("unpaired reverse")].join(" ")),this.$(".reverse-column .unpaired-info").text(this._renderUnpairedDisplayStr(this.unpaired.length-f[1].length)),this.$(".unpaired-columns .column-datasets").empty(),this.$(".autopair-link").toggle(0!==this.unpaired.length),0===this.unpaired.length?void this._renderUnpairedEmpty():(b=f[1].map(function(a,b){return void 0!==f[0][b]&&f[0][b]!==a&&d.push(c._renderPairButton()),c._renderUnpairedDataset(a)}),a=f[0].map(function(a){return c._renderUnpairedDataset(a)}),a.length||b.length?(this.$(".unpaired-columns .forward-column .column-datasets").append(a).add(this.$(".unpaired-columns .paired-column .column-datasets").append(d)).add(this.$(".unpaired-columns .reverse-column .column-datasets").append(b)),void this._adjUnpairedOnScrollbar()):void this._renderUnpairedNotShown())},_renderUnpairedDisplayStr:function(a){return["(",a," ",e("filtered out"),")"].join("")},_renderUnpairedDataset:function(a){return $("
    • ").attr("id","dataset-"+a.id).addClass("dataset unpaired").attr("draggable",!0).addClass(a.selected?"selected":"").append($("").addClass("dataset-name").text(a.name)).data("dataset",a)},_renderPairButton:function(){return $("
    • ").addClass("dataset unpaired").append($("").addClass("dataset-name").text(e("Pair these datasets")))},_renderUnpairedEmpty:function(){var a=$('
      ').text("("+e("no remaining unpaired datasets")+")");return this.$(".unpaired-columns .paired-column .column-datasets").empty().prepend(a),a},_renderUnpairedNotShown:function(){var a=$('
      ').text("("+e("no datasets were found matching the current filters")+")");return this.$(".unpaired-columns .paired-column .column-datasets").empty().prepend(a),a},_adjUnpairedOnScrollbar:function(){var a=this.$(".unpaired-columns").last(),b=this.$(".unpaired-columns .reverse-column .dataset").first();if(b.size()){var c=a.offset().left+a.outerWidth(),d=b.offset().left+b.outerWidth(),e=Math.floor(c)-Math.floor(d);this.$(".unpaired-columns .forward-column").css("margin-left",e>0?e:0)}},_renderPaired:function(){if(this.$(".paired-column-title .title").text([this.paired.length,e("paired")].join(" ")),this.$(".unpair-all-link").toggle(0!==this.paired.length),0===this.paired.length)return void this._renderPairedEmpty();this.$(".remove-extensions-link").show(),this.$(".paired-columns .column-datasets").empty();var a=this;this.paired.forEach(function(b){var c=new h({pair:b});a.$(".paired-columns .column-datasets").append(c.render().$el).append(['"].join(""))})},_renderPairedEmpty:function(){var a=$('
      ').text("("+e("no paired datasets yet")+")");return this.$(".paired-columns .column-datasets").empty().prepend(a),a},_renderFooter:function(){var a=this.$(".footer").empty().html(i.templates.footer());return this.$(".remove-extensions").prop("checked",this.removeExtensions),"function"==typeof this.oncancel&&this.$(".cancel-create.btn").show(),a},_addPluginComponents:function(){this._chooseFiltersPopover(".choose-filters-link"),this.$(".help-content i").hoverhighlight(".collection-creator","rgba( 64, 255, 255, 1.0 )")},_chooseFiltersPopover:function(a){function b(a,b){return['"].join("")}var c=$(_.template(['
      ','
      ',e("Choose from the following filters to change which unpaired reads are shown in the display"),":
      ",_.values(this.commonFilters).map(function(a){return b(a[0],a[1])}).join(""),"
      "].join(""))({}));return this.$(a).popover({container:".collection-creator",placement:"bottom",html:!0,content:c})},_validationWarning:function(a,b){var c="validation-warning";"name"===a&&(a=this.$(".collection-name").add(this.$(".collection-name-prompt")),this.$(".collection-name").focus().select()),b?(a=a||this.$("."+c),a.removeClass(c)):a.addClass(c)},_setUpBehaviors:function(){return this.once("rendered",function(){this.trigger("rendered:initial",this)}),this.on("pair:new",function(){this._renderUnpaired(),this._renderPaired(),this.$(".paired-columns").scrollTop(8e6)}),this.on("pair:unpair",function(){this._renderUnpaired(),this._renderPaired(),this.splitView()}),this.on("filter-change",function(){this.filters=[this.$(".forward-unpaired-filter input").val(),this.$(".reverse-unpaired-filter input").val()],this.metric("filter-change",this.filters),this._renderFilters(),this._renderUnpaired()}),this.on("autopair",function(){this._renderUnpaired(),this._renderPaired();var a,b=null;this.paired.length?(b="alert-success",a=this.paired.length+" "+e("pairs created"),this.unpaired.length||(a+=": "+e("all datasets have been successfully paired"),this.hideUnpaired(),this.$(".collection-name").focus())):a=e("Could not automatically create any pairs from the given dataset names"),this._showAlert(a,b)}),this},events:{"click .more-help":"_clickMoreHelp","click .less-help":"_clickLessHelp","click .header .alert button":"_hideAlert","click .forward-column .column-title":"_clickShowOnlyUnpaired","click .reverse-column .column-title":"_clickShowOnlyUnpaired","click .unpair-all-link":"_clickUnpairAll","change .forward-unpaired-filter input":function(){this.trigger("filter-change")},"focus .forward-unpaired-filter input":function(a){$(a.currentTarget).select()},"click .autopair-link":"_clickAutopair","click .choose-filters .filter-choice":"_clickFilterChoice","click .clear-filters-link":"_clearFilters","change .reverse-unpaired-filter input":function(){this.trigger("filter-change")},"focus .reverse-unpaired-filter input":function(a){$(a.currentTarget).select()},"click .forward-column .dataset.unpaired":"_clickUnpairedDataset","click .reverse-column .dataset.unpaired":"_clickUnpairedDataset","click .paired-column .dataset.unpaired":"_clickPairRow","click .unpaired-columns":"clearSelectedUnpaired","mousedown .unpaired-columns .dataset":"_mousedownUnpaired","click .paired-column-title":"_clickShowOnlyPaired","mousedown .flexible-partition-drag":"_startPartitionDrag","click .paired-columns .dataset.paired":"selectPair","click .paired-columns":"clearSelectedPaired","click .paired-columns .pair-name":"_clickPairName","click .unpair-btn":"_clickUnpair","dragover .paired-columns .column-datasets":"_dragoverPairedColumns","drop .paired-columns .column-datasets":"_dropPairedColumns","pair.dragstart .paired-columns .column-datasets":"_pairDragstart","pair.dragend .paired-columns .column-datasets":"_pairDragend","change .remove-extensions":function(){this.toggleExtensions()},"change .collection-name":"_changeName","keydown .collection-name":"_nameCheckForEnter","click .cancel-create":function(){"function"==typeof this.oncancel&&this.oncancel.call(this)},"click .create-collection":"_clickCreate"},_clickMoreHelp:function(){this.$(".main-help").addClass("expanded"),this.$(".more-help").hide()},_clickLessHelp:function(){this.$(".main-help").removeClass("expanded"),this.$(".more-help").show()},_showAlert:function(a,b){b=b||"alert-danger",this.$(".main-help").hide(),this.$(".header .alert").attr("class","alert alert-dismissable").addClass(b).show().find(".alert-message").html(a)},_hideAlert:function(){this.$(".main-help").show(),this.$(".header .alert").hide()},_clickShowOnlyUnpaired:function(){this.$(".paired-columns").is(":visible")?this.hidePaired():this.splitView()},_clickShowOnlyPaired:function(){this.$(".unpaired-columns").is(":visible")?this.hideUnpaired():this.splitView()},hideUnpaired:function(a,b){this.unpairedPanelHidden=!0,this.pairedPanelHidden=!1,this._renderMiddle(a,b)},hidePaired:function(a,b){this.unpairedPanelHidden=!1,this.pairedPanelHidden=!0,this._renderMiddle(a,b)},splitView:function(a,b){return this.unpairedPanelHidden=this.pairedPanelHidden=!1,this._renderMiddle(a,b),this},_clickUnpairAll:function(){this.metric("unpairAll"),this.unpairAll()},_clickAutopair:function(){var a=this.autoPair();this.metric("autopair",a.length,this.unpaired.length),this.trigger("autopair")},_clickFilterChoice:function(a){var b=$(a.currentTarget);this.$(".forward-unpaired-filter input").val(b.data("forward")),this.$(".reverse-unpaired-filter input").val(b.data("reverse")),this._hideChooseFilters(),this.trigger("filter-change")},_hideChooseFilters:function(){this.$(".choose-filters-link").popover("hide"),this.$(".popover").css("display","none")},_clearFilters:function(){this.$(".forward-unpaired-filter input").val(""),this.$(".reverse-unpaired-filter input").val(""),this.trigger("filter-change")},_clickUnpairedDataset:function(a){return a.stopPropagation(),this.toggleSelectUnpaired($(a.currentTarget))},toggleSelectUnpaired:function(a,b){b=b||{};var c=a.data("dataset"),d=void 0!==b.force?b.force:!a.hasClass("selected");return a.size()&&void 0!==c?(d?(a.addClass("selected"),b.waitToPair||this.pairAllSelected()):a.removeClass("selected"),a):a},pairAllSelected:function(a){a=a||{};var b=this,c=[],d=[],e=[];return b.$(".unpaired-columns .forward-column .dataset.selected").each(function(){c.push($(this).data("dataset"))}),b.$(".unpaired-columns .reverse-column .dataset.selected").each(function(){d.push($(this).data("dataset"))}),c.length=d.length=Math.min(c.length,d.length),c.forEach(function(a,c){try{e.push(b._pair(a,d[c],{silent:!0}))}catch(f){b.error(f)}}),e.length&&!a.silent&&this.trigger("pair:new",e),e},clearSelectedUnpaired:function(){this.$(".unpaired-columns .dataset.selected").removeClass("selected")},_mousedownUnpaired:function(a){if(a.shiftKey){var b=this,c=$(a.target).addClass("selected"),d=function(a){b.$(a.target).filter(".dataset").addClass("selected")};c.parent().on("mousemove",d),$(document).one("mouseup",function(){c.parent().off("mousemove",d),b.pairAllSelected()})}},_clickPairRow:function(a){var b=$(a.currentTarget).index(),c=$(".unpaired-columns .forward-column .dataset").eq(b).data("dataset"),d=$(".unpaired-columns .reverse-column .dataset").eq(b).data("dataset");this._pair(c,d)},_startPartitionDrag:function(a){function b(){d.$(".flexible-partition-drag").css("color",""),$("body").css("cursor","").unbind("mousemove",c)}function c(a){var b=a.pageY-e;d.adjPartition(b)||$("body").trigger("mouseup"),d._adjUnpairedOnScrollbar(),e+=b}var d=this,e=a.pageY;$("body").css("cursor","ns-resize"),d.$(".flexible-partition-drag").css("color","black"),$("body").mousemove(c),$("body").one("mouseup",b)},adjPartition:function(a){var b=this.$(".unpaired-columns"),c=this.$(".paired-columns"),d=parseInt(b.css("height"),10),e=parseInt(c.css("height"),10);d=Math.max(10,d+a),e-=a;var f=0>a;if(f){if(this.unpairedPanelHidden)return!1;if(10>=d)return this.hideUnpaired(),!1}else this.unpairedPanelHidden&&(b.show(),this.unpairedPanelHidden=!1);if(f)this.pairedPanelHidden&&(c.show(),this.pairedPanelHidden=!1);else{if(this.pairedPanelHidden)return!1;if(15>=e)return this.hidePaired(),!1}return b.css({height:d+"px",flex:"0 0 auto"}),!0},selectPair:function(a){a.stopPropagation(),$(a.currentTarget).toggleClass("selected")},clearSelectedPaired:function(){this.$(".paired-columns .dataset.selected").removeClass("selected")},_clickPairName:function(a){a.stopPropagation();var b=$(a.currentTarget),c=b.parent().parent(),d=c.index(".dataset.paired"),e=this.paired[d],f=prompt("Enter a new name for the pair:",e.name);f&&(e.name=f,e.customizedName=!0,b.text(e.name))},_clickUnpair:function(a){var b=Math.floor($(a.currentTarget).index(".unpair-btn"));this._unpair(this.paired[b])},_dragoverPairedColumns:function(a){a.preventDefault();var b=this.$(".paired-columns .column-datasets");this._checkForAutoscroll(b,a.originalEvent.clientY);var c=this._getNearestPairedDatasetLi(a.originalEvent.clientY);$(".element-drop-placeholder").remove();var d=$('
      ');c.size()?c.before(d):b.append(d)},_checkForAutoscroll:function(a,b){var c=2,d=a.offset(),e=a.scrollTop(),f=b-d.top,g=d.top+a.outerHeight()-b;f>=0&&f=0&&ga&&a>f-g)return e}return $()},_dropPairedColumns:function(a){a.preventDefault(),a.dataTransfer.dropEffect="move";var b=this._getNearestPairedDatasetLi(a.originalEvent.clientY);return b.size()?this.$dragging.insertBefore(b):this.$dragging.insertAfter(this.$(".paired-columns .unpair-btn").last()),this._syncPairsToDom(),!1},_syncPairsToDom:function(){var a=[];this.$(".paired-columns .dataset.paired").each(function(){a.push($(this).data("pair"))}),this.paired=a,this._renderPaired()},_pairDragstart:function(a,b){b.$el.addClass("selected");var c=this.$(".paired-columns .dataset.selected");this.$dragging=c},_pairDragend:function(){$(".element-drop-placeholder").remove(),this.$dragging=null},toggleExtensions:function(a){var b=this;b.removeExtensions=void 0!==a?a:!b.removeExtensions,_.each(b.paired,function(a){a.customizedName||(a.name=b._guessNameForPair(a.forward,a.reverse))}),b._renderPaired(),b._renderFooter()},_changeName:function(){this._validationWarning("name",!!this._getName())},_nameCheckForEnter:function(a){13!==a.keyCode||this.blocking||this._clickCreate()},_getName:function(){return _.escape(this.$(".collection-name").val())},_clickCreate:function(){var a=this._getName();a?this.blocking||this.createList():this._validationWarning("name")},_printList:function(a){var b=this;_.each(a,function(c){a===b.paired&&b._printPair(c)})},_printPair:function(a){this.debug(a.forward.name,a.reverse.name,": ->",a.name)},toString:function(){return"PairedCollectionCreator"}});i.templates=i.templates||{main:_.template(['
      ','
      ','
    • ").attr("id","dataset-"+a.id).addClass("dataset unpaired").attr("draggable",!0).addClass(a.selected?"selected":"").append($("").addClass("dataset-name").text(a.name)).data("dataset",a)},_renderPairButton:function(){return $("
    • ").addClass("dataset unpaired").append($("").addClass("dataset-name").text(e("Pair these datasets")))},_renderUnpairedEmpty:function(){var a=$('
      ').text("("+e("no remaining unpaired datasets")+")");return this.$(".unpaired-columns .paired-column .column-datasets").empty().prepend(a),a},_renderUnpairedNotShown:function(){var a=$('
      ').text("("+e("no datasets were found matching the current filters")+")");return this.$(".unpaired-columns .paired-column .column-datasets").empty().prepend(a),a},_adjUnpairedOnScrollbar:function(){var a=this.$(".unpaired-columns").last(),b=this.$(".unpaired-columns .reverse-column .dataset").first();if(b.size()){var c=a.offset().left+a.outerWidth(),d=b.offset().left+b.outerWidth(),e=Math.floor(c)-Math.floor(d);this.$(".unpaired-columns .forward-column").css("margin-left",e>0?e:0)}},_renderPaired:function(){if(this.$(".paired-column-title .title").text([this.paired.length,e("paired")].join(" ")),this.$(".unpair-all-link").toggle(0!==this.paired.length),0===this.paired.length)return void this._renderPairedEmpty();this.$(".remove-extensions-link").show(),this.$(".paired-columns .column-datasets").empty();var a=this;this.paired.forEach(function(b){var c=new h({pair:b});a.$(".paired-columns .column-datasets").append(c.render().$el).append(['"].join(""))})},_renderPairedEmpty:function(){var a=$('
      ').text("("+e("no paired datasets yet")+")");return this.$(".paired-columns .column-datasets").empty().prepend(a),a},_renderFooter:function(){var a=this.$(".footer").empty().html(i.templates.footer());return this.$(".remove-extensions").prop("checked",this.removeExtensions),"function"==typeof this.oncancel&&this.$(".cancel-create.btn").show(),a},_addPluginComponents:function(){this._chooseFiltersPopover(".choose-filters-link"),this.$(".help-content i").hoverhighlight(".collection-creator","rgba( 64, 255, 255, 1.0 )")},_chooseFiltersPopover:function(a){function b(a,b){return['"].join("")}var c=$(_.template(['
      ','
      ',e("Choose from the following filters to change which unpaired reads are shown in the display"),":
      ",_.values(this.commonFilters).map(function(a){return b(a[0],a[1])}).join(""),"
      "].join(""))({}));return this.$(a).popover({container:".collection-creator",placement:"bottom",html:!0,content:c})},_validationWarning:function(a,b){var c="validation-warning";"name"===a&&(a=this.$(".collection-name").add(this.$(".collection-name-prompt")),this.$(".collection-name").focus().select()),b?(a=a||this.$("."+c),a.removeClass(c)):a.addClass(c)},_setUpBehaviors:function(){return this.once("rendered",function(){this.trigger("rendered:initial",this)}),this.on("pair:new",function(){this._renderUnpaired(),this._renderPaired(),this.$(".paired-columns").scrollTop(8e6)}),this.on("pair:unpair",function(){this._renderUnpaired(),this._renderPaired(),this.splitView()}),this.on("filter-change",function(){this.filters=[this.$(".forward-unpaired-filter input").val(),this.$(".reverse-unpaired-filter input").val()],this.metric("filter-change",this.filters),this._renderFilters(),this._renderUnpaired()}),this.on("autopair",function(){this._renderUnpaired(),this._renderPaired();var a,b=null;this.paired.length?(b="alert-success",a=this.paired.length+" "+e("pairs created"),this.unpaired.length||(a+=": "+e("all datasets have been successfully paired"),this.hideUnpaired(),this.$(".collection-name").focus())):a=e("Could not automatically create any pairs from the given dataset names"),this._showAlert(a,b)}),this},events:{"click .more-help":"_clickMoreHelp","click .less-help":"_clickLessHelp","click .header .alert button":"_hideAlert","click .forward-column .column-title":"_clickShowOnlyUnpaired","click .reverse-column .column-title":"_clickShowOnlyUnpaired","click .unpair-all-link":"_clickUnpairAll","change .forward-unpaired-filter input":function(){this.trigger("filter-change")},"focus .forward-unpaired-filter input":function(a){$(a.currentTarget).select()},"click .autopair-link":"_clickAutopair","click .choose-filters .filter-choice":"_clickFilterChoice","click .clear-filters-link":"_clearFilters","change .reverse-unpaired-filter input":function(){this.trigger("filter-change")},"focus .reverse-unpaired-filter input":function(a){$(a.currentTarget).select()},"click .forward-column .dataset.unpaired":"_clickUnpairedDataset","click .reverse-column .dataset.unpaired":"_clickUnpairedDataset","click .paired-column .dataset.unpaired":"_clickPairRow","click .unpaired-columns":"clearSelectedUnpaired","mousedown .unpaired-columns .dataset":"_mousedownUnpaired","click .paired-column-title":"_clickShowOnlyPaired","mousedown .flexible-partition-drag":"_startPartitionDrag","click .paired-columns .dataset.paired":"selectPair","click .paired-columns":"clearSelectedPaired","click .paired-columns .pair-name":"_clickPairName","click .unpair-btn":"_clickUnpair","dragover .paired-columns .column-datasets":"_dragoverPairedColumns","drop .paired-columns .column-datasets":"_dropPairedColumns","pair.dragstart .paired-columns .column-datasets":"_pairDragstart","pair.dragend .paired-columns .column-datasets":"_pairDragend","change .remove-extensions":function(){this.toggleExtensions()},"change .collection-name":"_changeName","keydown .collection-name":"_nameCheckForEnter","click .cancel-create":function(){"function"==typeof this.oncancel&&this.oncancel.call(this)},"click .create-collection":"_clickCreate"},_clickMoreHelp:function(){this.$(".main-help").addClass("expanded"),this.$(".more-help").hide()},_clickLessHelp:function(){this.$(".main-help").removeClass("expanded"),this.$(".more-help").show()},_showAlert:function(a,b){b=b||"alert-danger",this.$(".main-help").hide(),this.$(".header .alert").attr("class","alert alert-dismissable").addClass(b).show().find(".alert-message").html(a)},_hideAlert:function(){this.$(".main-help").show(),this.$(".header .alert").hide()},_clickShowOnlyUnpaired:function(){this.$(".paired-columns").is(":visible")?this.hidePaired():this.splitView()},_clickShowOnlyPaired:function(){this.$(".unpaired-columns").is(":visible")?this.hideUnpaired():this.splitView()},hideUnpaired:function(a,b){this.unpairedPanelHidden=!0,this.pairedPanelHidden=!1,this._renderMiddle(a,b)},hidePaired:function(a,b){this.unpairedPanelHidden=!1,this.pairedPanelHidden=!0,this._renderMiddle(a,b)},splitView:function(a,b){return this.unpairedPanelHidden=this.pairedPanelHidden=!1,this._renderMiddle(a,b),this},_clickUnpairAll:function(){this.metric("unpairAll"),this.unpairAll()},_clickAutopair:function(){var a=this.autoPair();this.metric("autopair",a.length,this.unpaired.length),this.trigger("autopair")},_clickFilterChoice:function(a){var b=$(a.currentTarget);this.$(".forward-unpaired-filter input").val(b.data("forward")),this.$(".reverse-unpaired-filter input").val(b.data("reverse")),this._hideChooseFilters(),this.trigger("filter-change")},_hideChooseFilters:function(){this.$(".choose-filters-link").popover("hide"),this.$(".popover").css("display","none")},_clearFilters:function(){this.$(".forward-unpaired-filter input").val(""),this.$(".reverse-unpaired-filter input").val(""),this.trigger("filter-change")},_clickUnpairedDataset:function(a){return a.stopPropagation(),this.toggleSelectUnpaired($(a.currentTarget))},toggleSelectUnpaired:function(a,b){b=b||{};var c=a.data("dataset"),d=void 0!==b.force?b.force:!a.hasClass("selected");return a.size()&&void 0!==c?(d?(a.addClass("selected"),b.waitToPair||this.pairAllSelected()):a.removeClass("selected"),a):a},pairAllSelected:function(a){a=a||{};var b=this,c=[],d=[],e=[];return b.$(".unpaired-columns .forward-column .dataset.selected").each(function(){c.push($(this).data("dataset"))}),b.$(".unpaired-columns .reverse-column .dataset.selected").each(function(){d.push($(this).data("dataset"))}),c.length=d.length=Math.min(c.length,d.length),c.forEach(function(a,c){try{e.push(b._pair(a,d[c],{silent:!0}))}catch(f){b.error(f)}}),e.length&&!a.silent&&this.trigger("pair:new",e),e},clearSelectedUnpaired:function(){this.$(".unpaired-columns .dataset.selected").removeClass("selected")},_mousedownUnpaired:function(a){if(a.shiftKey){var b=this,c=$(a.target).addClass("selected"),d=function(a){b.$(a.target).filter(".dataset").addClass("selected")};c.parent().on("mousemove",d),$(document).one("mouseup",function(){c.parent().off("mousemove",d),b.pairAllSelected()})}},_clickPairRow:function(a){var b=$(a.currentTarget).index(),c=$(".unpaired-columns .forward-column .dataset").eq(b).data("dataset"),d=$(".unpaired-columns .reverse-column .dataset").eq(b).data("dataset");this._pair(c,d)},_startPartitionDrag:function(a){function b(){d.$(".flexible-partition-drag").css("color",""),$("body").css("cursor","").unbind("mousemove",c)}function c(a){var b=a.pageY-e;d.adjPartition(b)||$("body").trigger("mouseup"),d._adjUnpairedOnScrollbar(),e+=b}var d=this,e=a.pageY;$("body").css("cursor","ns-resize"),d.$(".flexible-partition-drag").css("color","black"),$("body").mousemove(c),$("body").one("mouseup",b)},adjPartition:function(a){var b=this.$(".unpaired-columns"),c=this.$(".paired-columns"),d=parseInt(b.css("height"),10),e=parseInt(c.css("height"),10);d=Math.max(10,d+a),e-=a;var f=0>a;if(f){if(this.unpairedPanelHidden)return!1;if(10>=d)return this.hideUnpaired(),!1}else this.unpairedPanelHidden&&(b.show(),this.unpairedPanelHidden=!1);if(f)this.pairedPanelHidden&&(c.show(),this.pairedPanelHidden=!1);else{if(this.pairedPanelHidden)return!1;if(15>=e)return this.hidePaired(),!1}return b.css({height:d+"px",flex:"0 0 auto"}),!0},selectPair:function(a){a.stopPropagation(),$(a.currentTarget).toggleClass("selected")},clearSelectedPaired:function(){this.$(".paired-columns .dataset.selected").removeClass("selected")},_clickPairName:function(a){a.stopPropagation();var b=$(a.currentTarget),c=b.parent().parent(),d=c.index(".dataset.paired"),e=this.paired[d],f=prompt("Enter a new name for the pair:",e.name);f&&(e.name=f,e.customizedName=!0,b.text(e.name))},_clickUnpair:function(a){var b=Math.floor($(a.currentTarget).index(".unpair-btn"));this._unpair(this.paired[b])},_dragoverPairedColumns:function(a){a.preventDefault();var b=this.$(".paired-columns .column-datasets");this._checkForAutoscroll(b,a.originalEvent.clientY);var c=this._getNearestPairedDatasetLi(a.originalEvent.clientY);$(".element-drop-placeholder").remove();var d=$('
      ');c.size()?c.before(d):b.append(d)},_checkForAutoscroll:function(a,b){var c=2,d=a.offset(),e=a.scrollTop(),f=b-d.top,g=d.top+a.outerHeight()-b;f>=0&&f=0&&ga&&a>f-g)return e}return $()},_dropPairedColumns:function(a){a.preventDefault(),a.dataTransfer.dropEffect="move";var b=this._getNearestPairedDatasetLi(a.originalEvent.clientY);return b.size()?this.$dragging.insertBefore(b):this.$dragging.insertAfter(this.$(".paired-columns .unpair-btn").last()),this._syncPairsToDom(),!1},_syncPairsToDom:function(){var a=[];this.$(".paired-columns .dataset.paired").each(function(){a.push($(this).data("pair"))}),this.paired=a,this._renderPaired()},_pairDragstart:function(a,b){b.$el.addClass("selected");var c=this.$(".paired-columns .dataset.selected");this.$dragging=c},_pairDragend:function(){$(".element-drop-placeholder").remove(),this.$dragging=null},toggleExtensions:function(a){var b=this;b.removeExtensions=void 0!==a?a:!b.removeExtensions,_.each(b.paired,function(a){a.customizedName||(a.name=b._guessNameForPair(a.forward,a.reverse))}),b._renderPaired(),b._renderFooter()},_changeName:function(){this._validationWarning("name",!!this._getName())},_nameCheckForEnter:function(a){13!==a.keyCode||this.blocking||this._clickCreate()},_getName:function(){return _.escape(this.$(".collection-name").val())},_clickCreate:function(){var a=this._getName();a?this.blocking||this.createList():this._validationWarning("name")},_printList:function(a){var b=this;_.each(a,function(c){a===b.paired&&b._printPair(c)})},_printPair:function(a){this.debug(a.forward.name,a.reverse.name,": ->",a.name)},toString:function(){return"PairedCollectionCreator"}});i.templates=i.templates||{main:_.template(['
      ','
      ','