forked from enviPath/enviPy
Compare commits
67 Commits
beta_2025-
...
feature/fr
| Author | SHA1 | Date | |
|---|---|---|---|
| 34d5318534 | |||
| 34d3b75c6f | |||
| b9ac713cb2 | |||
| 05bee9b718 | |||
| 0d9947e6ce | |||
| e3b381ab41 | |||
| 97626337aa | |||
| 2aded2ddd7 | |||
| f5133c1980 | |||
| 7fbc49afd3 | |||
| a087a518f6 | |||
| 881e0e6798 | |||
| 2eab66e9ee | |||
| ab927b11a2 | |||
| fde60c3ad3 | |||
| 61a43da822 | |||
| 211ebfd19b | |||
| 06a6c23d05 | |||
| 3536a14e47 | |||
| 7eb4029ac9 | |||
| 7b38fc2e37 | |||
| 4834348454 | |||
| 0a52b12f02 | |||
| 14571d23a6 | |||
| ea8475f0e2 | |||
| 442d139217 | |||
| 1ba511a31d | |||
| 5d89341955 | |||
| 5f390ac2d2 | |||
| 46d21e60d2 | |||
| 13be240226 | |||
| 167a72f5a3 | |||
| 1736319bd7 | |||
| e87aae6bf7 | |||
| 253523c81f | |||
| 15809a4ccf | |||
| b7e1dac66a | |||
| 849ebbe7f8 | |||
| c5dcb36452 | |||
| 16a991220a | |||
| 05c8e130b1 | |||
| 4fd7856043 | |||
| f5efaf1b3f | |||
| 4a2ef3a237 | |||
| d097013853 | |||
| 63cc7cf460 | |||
| 9ca94eeb42 | |||
| de1dc75a12 | |||
| 43a034427d | |||
| d98b60fc57 | |||
| 86c3f9b808 | |||
| 4408a09e82 | |||
| f5889b270a | |||
| f76861a83f | |||
| 110fbe12c1 | |||
| d8dc9598ff | |||
| b7e4abae1c | |||
| 2fa0be52ef | |||
| be5ff369e0 | |||
| ee776e7d14 | |||
| f27bc56379 | |||
| 547eac3411 | |||
| 9e66169d23 | |||
| 9a43942f12 | |||
| 1bad6e4b03 | |||
| ad38704ffe | |||
| 0775ad30d4 |
@ -105,7 +105,7 @@ jobs:
|
|||||||
until pg_isready -h postgres -U postgres; do sleep 2; done
|
until pg_isready -h postgres -U postgres; do sleep 2; done
|
||||||
# until redis-cli -h redis ping; do sleep 2; done
|
# until redis-cli -h redis ping; do sleep 2; done
|
||||||
|
|
||||||
- name: Run Django Migrations
|
- name: Run Django migrations
|
||||||
run: |
|
run: |
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
python manage.py migrate --noinput
|
python manage.py migrate --noinput
|
||||||
|
|||||||
@ -87,7 +87,6 @@ TEMPLATES = [
|
|||||||
"django.template.context_processors.request",
|
"django.template.context_processors.request",
|
||||||
"django.contrib.auth.context_processors.auth",
|
"django.contrib.auth.context_processors.auth",
|
||||||
"django.contrib.messages.context_processors.messages",
|
"django.contrib.messages.context_processors.messages",
|
||||||
"epdb.context_processors.package_context",
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -21,7 +21,6 @@ from .models import (
|
|||||||
ExternalDatabase,
|
ExternalDatabase,
|
||||||
ExternalIdentifier,
|
ExternalIdentifier,
|
||||||
JobLog,
|
JobLog,
|
||||||
License,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -63,10 +62,6 @@ class EnviFormerAdmin(EPAdmin):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class LicenseAdmin(admin.ModelAdmin):
|
|
||||||
list_display = ["cc_string", "link", "image_link"]
|
|
||||||
|
|
||||||
|
|
||||||
class CompoundAdmin(EPAdmin):
|
class CompoundAdmin(EPAdmin):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -123,7 +118,6 @@ admin.site.register(JobLog, JobLogAdmin)
|
|||||||
admin.site.register(Package, PackageAdmin)
|
admin.site.register(Package, PackageAdmin)
|
||||||
admin.site.register(MLRelativeReasoning, MLRelativeReasoningAdmin)
|
admin.site.register(MLRelativeReasoning, MLRelativeReasoningAdmin)
|
||||||
admin.site.register(EnviFormer, EnviFormerAdmin)
|
admin.site.register(EnviFormer, EnviFormerAdmin)
|
||||||
admin.site.register(License, LicenseAdmin)
|
|
||||||
admin.site.register(Compound, CompoundAdmin)
|
admin.site.register(Compound, CompoundAdmin)
|
||||||
admin.site.register(CompoundStructure, CompoundStructureAdmin)
|
admin.site.register(CompoundStructure, CompoundStructureAdmin)
|
||||||
admin.site.register(SimpleAmbitRule, SimpleAmbitRuleAdmin)
|
admin.site.register(SimpleAmbitRule, SimpleAmbitRuleAdmin)
|
||||||
|
|||||||
@ -1,32 +0,0 @@
|
|||||||
"""
|
|
||||||
Context processors for enviPy application.
|
|
||||||
|
|
||||||
Context processors automatically make variables available to all templates.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from .logic import PackageManager
|
|
||||||
from .models import Package
|
|
||||||
|
|
||||||
|
|
||||||
def package_context(request):
|
|
||||||
"""
|
|
||||||
Provides package data for the search modal which is included globally
|
|
||||||
in framework_modern.html.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
dict: Context dictionary with reviewed and unreviewed packages
|
|
||||||
"""
|
|
||||||
current_user = request.user
|
|
||||||
|
|
||||||
reviewed_package_qs = PackageManager.get_reviewed_packages()
|
|
||||||
|
|
||||||
unreviewed_package_qs = Package.objects.none()
|
|
||||||
|
|
||||||
# Only get user-specific packages if user is authenticated
|
|
||||||
if current_user.is_authenticated:
|
|
||||||
unreviewed_package_qs = PackageManager.get_all_readable_packages(current_user)
|
|
||||||
|
|
||||||
return {
|
|
||||||
"reviewed_packages": reviewed_package_qs,
|
|
||||||
"unreviewed_packages": unreviewed_package_qs,
|
|
||||||
}
|
|
||||||
@ -12,16 +12,10 @@ from epdb.models import (
|
|||||||
Permission,
|
Permission,
|
||||||
User,
|
User,
|
||||||
ExternalDatabase,
|
ExternalDatabase,
|
||||||
License,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
def add_arguments(self, parser):
|
|
||||||
parser.add_argument(
|
|
||||||
"-ol", "--only-licenses", action="store_true", help="Only create licenses."
|
|
||||||
)
|
|
||||||
|
|
||||||
def create_users(self):
|
def create_users(self):
|
||||||
# Anonymous User
|
# Anonymous User
|
||||||
if not User.objects.filter(email="anon@envipath.com").exists():
|
if not User.objects.filter(email="anon@envipath.com").exists():
|
||||||
@ -89,17 +83,6 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
return anon, admin, g, user0
|
return anon, admin, g, user0
|
||||||
|
|
||||||
def create_licenses(self):
|
|
||||||
"""Create the six default licenses supported by enviPath"""
|
|
||||||
cc_strings = ["by", "by-nc", "by-nc-nd", "by-nc-sa", "by-nd", "by-sa"]
|
|
||||||
for cc_string in cc_strings:
|
|
||||||
if not License.objects.filter(cc_string=cc_string).exists():
|
|
||||||
new_license = License()
|
|
||||||
new_license.cc_string = cc_string
|
|
||||||
new_license.link = f"https://creativecommons.org/licenses/{cc_string}/4.0/"
|
|
||||||
new_license.image_link = f"https://licensebuttons.net/l/{cc_string}/4.0/88x31.png"
|
|
||||||
new_license.save()
|
|
||||||
|
|
||||||
def import_package(self, data, owner):
|
def import_package(self, data, owner):
|
||||||
return PackageManager.import_legacy_package(
|
return PackageManager.import_legacy_package(
|
||||||
data, owner, keep_ids=True, add_import_timestamp=False, trust_reviewed=True
|
data, owner, keep_ids=True, add_import_timestamp=False, trust_reviewed=True
|
||||||
@ -174,10 +157,6 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
# Create licenses
|
|
||||||
self.create_licenses()
|
|
||||||
if options.get("only_licenses", False):
|
|
||||||
return
|
|
||||||
# Create users
|
# Create users
|
||||||
anon, admin, g, user0 = self.create_users()
|
anon, admin, g, user0 = self.create_users()
|
||||||
|
|
||||||
|
|||||||
@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 5.2.7 on 2025-11-11 14:11
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
dependencies = [
|
|
||||||
("epdb", "0009_joblog"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name="license",
|
|
||||||
name="cc_string",
|
|
||||||
field=models.TextField(default="by-nc-sa", verbose_name="CC string"),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
# Generated by Django 5.2.7 on 2025-11-11 14:13
|
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
from django.contrib.postgres.aggregates import ArrayAgg
|
|
||||||
from django.db import migrations
|
|
||||||
from django.db.models import Min
|
|
||||||
|
|
||||||
|
|
||||||
def set_cc(apps, schema_editor):
|
|
||||||
License = apps.get_model("epdb", "License")
|
|
||||||
|
|
||||||
# For all existing licenses extract cc_string from link
|
|
||||||
for license in License.objects.all():
|
|
||||||
pattern = r"/licenses/([^/]+)/4\.0"
|
|
||||||
match = re.search(pattern, license.link)
|
|
||||||
if match:
|
|
||||||
license.cc_string = match.group(1)
|
|
||||||
license.save()
|
|
||||||
else:
|
|
||||||
raise ValueError(f"Could not find license for {license.link}")
|
|
||||||
|
|
||||||
# Ensure we have all licenses
|
|
||||||
cc_strings = ["by", "by-nc", "by-nc-nd", "by-nc-sa", "by-nd", "by-sa"]
|
|
||||||
for cc_string in cc_strings:
|
|
||||||
if not License.objects.filter(cc_string=cc_string).exists():
|
|
||||||
new_license = License()
|
|
||||||
new_license.cc_string = cc_string
|
|
||||||
new_license.link = f"https://creativecommons.org/licenses/{cc_string}/4.0/"
|
|
||||||
new_license.image_link = f"https://licensebuttons.net/l/{cc_string}/4.0/88x31.png"
|
|
||||||
new_license.save()
|
|
||||||
|
|
||||||
# As we might have existing Licenses representing the same License,
|
|
||||||
# get min pk and all pks as a list
|
|
||||||
license_lookup_qs = License.objects.values("cc_string").annotate(
|
|
||||||
lowest_pk=Min("id"), all_pks=ArrayAgg("id", order_by=("id",))
|
|
||||||
)
|
|
||||||
|
|
||||||
license_lookup = {
|
|
||||||
row["cc_string"]: (row["lowest_pk"], row["all_pks"]) for row in license_lookup_qs
|
|
||||||
}
|
|
||||||
|
|
||||||
Packages = apps.get_model("epdb", "Package")
|
|
||||||
|
|
||||||
for k, v in license_lookup.items():
|
|
||||||
# Set min pk to all packages pointing to any of the duplicates
|
|
||||||
Packages.objects.filter(pk__in=v[1]).update(license_id=v[0])
|
|
||||||
# remove the min pk from "other" pks as we use them for deletion
|
|
||||||
v[1].remove(v[0])
|
|
||||||
# Delete redundant License objects
|
|
||||||
License.objects.filter(pk__in=v[1]).delete()
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
dependencies = [
|
|
||||||
("epdb", "0010_license_cc_string"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [migrations.RunPython(set_cc)]
|
|
||||||
@ -655,7 +655,6 @@ class ScenarioMixin(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class License(models.Model):
|
class License(models.Model):
|
||||||
cc_string = models.TextField(blank=False, null=False, verbose_name="CC string")
|
|
||||||
link = models.URLField(blank=False, null=False, verbose_name="link")
|
link = models.URLField(blank=False, null=False, verbose_name="link")
|
||||||
image_link = models.URLField(blank=False, null=False, verbose_name="Image link")
|
image_link = models.URLField(blank=False, null=False, verbose_name="Image link")
|
||||||
|
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
import csv
|
import csv
|
||||||
import io
|
import io
|
||||||
import logging
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
from typing import Any, Callable, List, Optional
|
from typing import Any, Callable, List, Optional
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from celery.utils.functional import LRUCache
|
from celery.utils.functional import LRUCache
|
||||||
from django.utils import timezone
|
|
||||||
|
|
||||||
from epdb.logic import SPathway
|
from epdb.logic import SPathway
|
||||||
from epdb.models import Edge, EPModel, JobLog, Node, Package, Pathway, Rule, Setting, User
|
from epdb.models import EPModel, JobLog, Node, Package, Pathway, Rule, Setting, User, Edge
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
ML_CACHE = LRUCache(3) # Cache the three most recent ML models to reduce load times.
|
ML_CACHE = LRUCache(3) # Cache the three most recent ML models to reduce load times.
|
||||||
@ -29,7 +29,7 @@ def dispatch_eager(user: "User", job: Callable, *args, **kwargs):
|
|||||||
log.task_id = uuid4()
|
log.task_id = uuid4()
|
||||||
log.job_name = job.__name__
|
log.job_name = job.__name__
|
||||||
log.status = "SUCCESS"
|
log.status = "SUCCESS"
|
||||||
log.done_at = timezone.now()
|
log.done_at = datetime.now()
|
||||||
log.task_result = str(x) if x else None
|
log.task_result = str(x) if x else None
|
||||||
log.save()
|
log.save()
|
||||||
|
|
||||||
|
|||||||
@ -48,7 +48,6 @@ urlpatterns = [
|
|||||||
re_path(r"^user$", v.users, name="users"),
|
re_path(r"^user$", v.users, name="users"),
|
||||||
re_path(r"^group$", v.groups, name="groups"),
|
re_path(r"^group$", v.groups, name="groups"),
|
||||||
re_path(r"^search$", v.search, name="search"),
|
re_path(r"^search$", v.search, name="search"),
|
||||||
re_path(r"^predict$", v.predict_pathway, name="predict_pathway"),
|
|
||||||
# User Detail
|
# User Detail
|
||||||
re_path(rf"^user/(?P<user_uuid>{UUID})", v.user, name="user"),
|
re_path(rf"^user/(?P<user_uuid>{UUID})", v.user, name="user"),
|
||||||
# Group Detail
|
# Group Detail
|
||||||
@ -142,11 +141,6 @@ urlpatterns = [
|
|||||||
v.package_pathway,
|
v.package_pathway,
|
||||||
name="package pathway detail",
|
name="package pathway detail",
|
||||||
),
|
),
|
||||||
re_path(
|
|
||||||
rf"^package/(?P<package_uuid>{UUID})/predict$",
|
|
||||||
v.package_predict_pathway,
|
|
||||||
name="package predict pathway",
|
|
||||||
),
|
|
||||||
# Pathway Nodes
|
# Pathway Nodes
|
||||||
re_path(
|
re_path(
|
||||||
rf"^package/(?P<package_uuid>{UUID})/pathway/(?P<pathway_uuid>{UUID})/node$",
|
rf"^package/(?P<package_uuid>{UUID})/pathway/(?P<pathway_uuid>{UUID})/node$",
|
||||||
|
|||||||
@ -362,34 +362,6 @@ def index(request):
|
|||||||
return render(request, "index/index.html", context)
|
return render(request, "index/index.html", context)
|
||||||
|
|
||||||
|
|
||||||
def predict_pathway(request):
|
|
||||||
"""Top-level predict pathway view using user's default package."""
|
|
||||||
if request.method != "GET":
|
|
||||||
return HttpResponseNotAllowed(["GET"])
|
|
||||||
|
|
||||||
context = get_base_context(request)
|
|
||||||
context["title"] = "enviPath - Predict Pathway"
|
|
||||||
context["meta"]["current_package"] = context["meta"]["user"].default_package
|
|
||||||
|
|
||||||
return render(request, "predict_pathway.html", context)
|
|
||||||
|
|
||||||
|
|
||||||
@package_permission_required()
|
|
||||||
def package_predict_pathway(request, package_uuid):
|
|
||||||
"""Package-specific predict pathway view."""
|
|
||||||
if request.method != "GET":
|
|
||||||
return HttpResponseNotAllowed(["GET"])
|
|
||||||
|
|
||||||
current_user = _anonymous_or_real(request)
|
|
||||||
current_package = PackageManager.get_package_by_id(current_user, package_uuid)
|
|
||||||
|
|
||||||
context = get_base_context(request)
|
|
||||||
context["title"] = f"enviPath - {current_package.name} - Predict Pathway"
|
|
||||||
context["meta"]["current_package"] = current_package
|
|
||||||
|
|
||||||
return render(request, "predict_pathway.html", context)
|
|
||||||
|
|
||||||
|
|
||||||
def packages(request):
|
def packages(request):
|
||||||
current_user = _anonymous_or_real(request)
|
current_user = _anonymous_or_real(request)
|
||||||
|
|
||||||
@ -710,6 +682,7 @@ def search(request):
|
|||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
package_urls = request.GET.getlist("packages")
|
package_urls = request.GET.getlist("packages")
|
||||||
searchterm = request.GET.get("search", "").strip()
|
searchterm = request.GET.get("search", "").strip()
|
||||||
|
|
||||||
mode = request.GET.get("mode")
|
mode = request.GET.get("mode")
|
||||||
|
|
||||||
# add HTTP_ACCEPT check to differentiate between index and ajax call
|
# add HTTP_ACCEPT check to differentiate between index and ajax call
|
||||||
@ -810,7 +783,6 @@ def package_models(request, package_uuid):
|
|||||||
|
|
||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
log_post_params(request)
|
log_post_params(request)
|
||||||
|
|
||||||
name = request.POST.get("model-name")
|
name = request.POST.get("model-name")
|
||||||
description = request.POST.get("model-description")
|
description = request.POST.get("model-description")
|
||||||
|
|
||||||
@ -971,12 +943,6 @@ def package_model(request, package_uuid, model_uuid):
|
|||||||
]
|
]
|
||||||
dispatch(current_user, evaluate_model, current_model.pk, multigen, eval_package_ids)
|
dispatch(current_user, evaluate_model, current_model.pk, multigen, eval_package_ids)
|
||||||
|
|
||||||
return redirect(current_model.url)
|
|
||||||
elif hidden == "retrain":
|
|
||||||
from .tasks import dispatch, retrain
|
|
||||||
|
|
||||||
dispatch(current_user, retrain, current_model.pk)
|
|
||||||
|
|
||||||
return redirect(current_model.url)
|
return redirect(current_model.url)
|
||||||
else:
|
else:
|
||||||
return HttpResponseBadRequest()
|
return HttpResponseBadRequest()
|
||||||
@ -1106,7 +1072,9 @@ def package(request, package_uuid):
|
|||||||
write = request.POST.get("write") == "on"
|
write = request.POST.get("write") == "on"
|
||||||
owner = request.POST.get("owner") == "on"
|
owner = request.POST.get("owner") == "on"
|
||||||
|
|
||||||
cc_string = request.POST.get("license")
|
license = request.POST.get("license")
|
||||||
|
license_link = request.POST.get("license-link")
|
||||||
|
license_image_link = request.POST.get("license-image-link")
|
||||||
|
|
||||||
if new_package_name:
|
if new_package_name:
|
||||||
current_package.name = new_package_name
|
current_package.name = new_package_name
|
||||||
@ -1134,15 +1102,24 @@ def package(request, package_uuid):
|
|||||||
|
|
||||||
PackageManager.update_permissions(current_user, current_package, grantee, max_perm)
|
PackageManager.update_permissions(current_user, current_package, grantee, max_perm)
|
||||||
return redirect(current_package.url)
|
return redirect(current_package.url)
|
||||||
|
elif license is not None:
|
||||||
|
if license == "no-license":
|
||||||
|
if current_package.license is not None:
|
||||||
|
current_package.license.delete()
|
||||||
|
|
||||||
elif cc_string is not None:
|
|
||||||
cc_string = cc_string.strip()
|
|
||||||
if cc_string == "no-license": # Reset the package's license
|
|
||||||
current_package.license = None
|
current_package.license = None
|
||||||
current_package.save()
|
current_package.save()
|
||||||
return redirect(current_package.url)
|
return redirect(current_package.url)
|
||||||
else: # Get the license and assign it to the package
|
else:
|
||||||
current_package.license = License.objects.get(cc_string=cc_string)
|
if current_package.license is not None:
|
||||||
|
current_package.license.delete()
|
||||||
|
|
||||||
|
license = License()
|
||||||
|
license.link = license_link
|
||||||
|
license.image_link = license_image_link
|
||||||
|
license.save()
|
||||||
|
|
||||||
|
current_package.license = license
|
||||||
current_package.save()
|
current_package.save()
|
||||||
|
|
||||||
return redirect(current_package.url)
|
return redirect(current_package.url)
|
||||||
@ -1197,7 +1174,7 @@ def package_compounds(request, package_uuid):
|
|||||||
|
|
||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
compound_name = request.POST.get("compound-name")
|
compound_name = request.POST.get("compound-name")
|
||||||
compound_smiles = request.POST.get("compound-smiles")
|
compound_smiles = request.POST.get("compound-smiles").strip()
|
||||||
compound_description = request.POST.get("compound-description")
|
compound_description = request.POST.get("compound-description")
|
||||||
|
|
||||||
c = Compound.create(current_package, compound_smiles, compound_name, compound_description)
|
c = Compound.create(current_package, compound_smiles, compound_name, compound_description)
|
||||||
@ -1324,7 +1301,7 @@ def package_compound_structures(request, package_uuid, compound_uuid):
|
|||||||
|
|
||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
structure_name = request.POST.get("structure-name")
|
structure_name = request.POST.get("structure-name")
|
||||||
structure_smiles = request.POST.get("structure-smiles")
|
structure_smiles = request.POST.get("structure-smiles").strip()
|
||||||
structure_description = request.POST.get("structure-description")
|
structure_description = request.POST.get("structure-description")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -1506,11 +1483,11 @@ def package_rules(request, package_uuid):
|
|||||||
|
|
||||||
# Obtain parameters as required by rule type
|
# Obtain parameters as required by rule type
|
||||||
if rule_type == "SimpleAmbitRule":
|
if rule_type == "SimpleAmbitRule":
|
||||||
params["smirks"] = request.POST.get("rule-smirks")
|
params["smirks"] = request.POST.get("rule-smirks").strip()
|
||||||
params["reactant_filter_smarts"] = request.POST.get("rule-reactant-smarts")
|
params["reactant_filter_smarts"] = request.POST.get("rule-reactant-smarts")
|
||||||
params["product_filter_smarts"] = request.POST.get("rule-product-smarts")
|
params["product_filter_smarts"] = request.POST.get("rule-product-smarts")
|
||||||
elif rule_type == "SimpleRDKitRule":
|
elif rule_type == "SimpleRDKitRule":
|
||||||
params["reaction_smarts"] = request.POST.get("rule-reaction-smarts")
|
params["reaction_smarts"] = request.POST.get("rule-reaction-smarts").strip()
|
||||||
elif rule_type == "ParallelRule":
|
elif rule_type == "ParallelRule":
|
||||||
pass
|
pass
|
||||||
elif rule_type == "SequentialRule":
|
elif rule_type == "SequentialRule":
|
||||||
@ -1707,7 +1684,8 @@ def package_reactions(request, package_uuid):
|
|||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
reaction_name = request.POST.get("reaction-name")
|
reaction_name = request.POST.get("reaction-name")
|
||||||
reaction_description = request.POST.get("reaction-description")
|
reaction_description = request.POST.get("reaction-description")
|
||||||
reactions_smirks = request.POST.get("reaction-smirks")
|
|
||||||
|
reactions_smirks = request.POST.get("reaction-smirks").strip()
|
||||||
educts = reactions_smirks.split(">>")[0].split(".")
|
educts = reactions_smirks.split(">>")[0].split(".")
|
||||||
products = reactions_smirks.split(">>")[1].split(".")
|
products = reactions_smirks.split(">>")[1].split(".")
|
||||||
|
|
||||||
@ -2281,7 +2259,6 @@ def package_pathway_edges(request, package_uuid, pathway_uuid):
|
|||||||
|
|
||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
log_post_params(request)
|
log_post_params(request)
|
||||||
|
|
||||||
edge_name = request.POST.get("edge-name")
|
edge_name = request.POST.get("edge-name")
|
||||||
edge_description = request.POST.get("edge-description")
|
edge_description = request.POST.get("edge-description")
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,6 @@
|
|||||||
/* Import DaisyUI plugin */
|
/* Import DaisyUI plugin */
|
||||||
@plugin "daisyui" {
|
@plugin "daisyui" {
|
||||||
logs: true;
|
logs: true;
|
||||||
exclude: rootscrollgutter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@import "./daisyui-theme.css";
|
@import "./daisyui-theme.css";
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_compound_modal">
|
<a role="button" data-toggle="modal" data-target="#new_compound_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Compound</a
|
<span class="glyphicon glyphicon-plus"></span> New Compound</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,11 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#new_compound_structure_modal">
|
||||||
role="button"
|
<span class="glyphicon glyphicon-plus"></span> New Compound Structure</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#new_compound_structure_modal"
|
|
||||||
>
|
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Compound Structure</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_edge_modal">
|
<a role="button" data-toggle="modal" data-target="#new_edge_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Edge</a
|
<span class="glyphicon glyphicon-plus"></span> New Edge</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,5 +1,4 @@
|
|||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_group_modal">
|
<a role="button" data-toggle="modal" data-target="#new_group_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Group</a
|
<span class="glyphicon glyphicon-plus"></span> New Group</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit and meta.enabled_features.MODEL_BUILDING %}
|
{% if meta.can_edit and meta.enabled_features.MODEL_BUILDING %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_model_modal">
|
<a role="button" data-toggle="modal" data-target="#new_model_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Model</a
|
<span class="glyphicon glyphicon-plus"></span> New Model</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_node_modal">
|
<a role="button" data-toggle="modal" data-target="#new_node_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Node</a
|
<span class="glyphicon glyphicon-plus"></span> New Node</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,20 +1,12 @@
|
|||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_package_modal">
|
<a role="button" data-toggle="modal" data-target="#new_package_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Package</a
|
<span class="glyphicon glyphicon-plus"></span> New Package</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#import_package_modal">
|
<a role="button" data-toggle="modal" data-target="#import_package_modal">
|
||||||
<span class="glyphicon glyphicon-import"></span> Import Package from JSON</a
|
<span class="glyphicon glyphicon-import"></span> Import Package from JSON</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#import_legacy_package_modal">
|
||||||
role="button"
|
<span class="glyphicon glyphicon-import"></span> Import Package from legacy JSON</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#import_legacy_package_modal"
|
|
||||||
>
|
|
||||||
<span class="glyphicon glyphicon-import"></span> Import Package from legacy
|
|
||||||
JSON</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
@ -1,9 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#predict_modal">
|
||||||
href="{% if meta.current_package %}{{ meta.current_package.url }}/predict{% else %}{{ meta.server_url }}/predict{% endif %}"
|
<span class="glyphicon glyphicon-plus"></span> New Pathway</a>
|
||||||
>
|
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Pathway</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_reaction_modal">
|
<a role="button" data-toggle="modal" data-target="#new_reaction_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Reaction</a
|
<span class="glyphicon glyphicon-plus"></span> New Reaction</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_rule_modal">
|
<a role="button" data-toggle="modal" data-target="#new_rule_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Rule</a
|
<span class="glyphicon glyphicon-plus"></span> New Rule</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#new_scenario_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span> New Scenario</a
|
<span class="glyphicon glyphicon-plus"></span> New Scenario</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_setting_modal">
|
<a role="button" data-toggle="modal" data-target="#new_setting_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span>New Setting</a
|
<span class="glyphicon glyphicon-plus"></span>New Setting</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,43 +1,32 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_compound_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_compound_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Compound</a
|
<i class="glyphicon glyphicon-edit"></i> Edit Compound</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a
|
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#add_structure_modal">
|
<a role="button" data-toggle="modal" data-target="#add_structure_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Add Structure</a
|
<i class="glyphicon glyphicon-plus"></i> Add Structure</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a
|
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#generic_set_external_reference_modal">
|
||||||
role="button"
|
<i class="glyphicon glyphicon-plus"></i> Set External Reference</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#generic_set_external_reference_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set External Reference</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
||||||
<i class="glyphicon glyphicon-duplicate"></i> Copy</a
|
<i class="glyphicon glyphicon-duplicate"></i> Copy</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Compound</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Compound</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,35 +1,22 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#edit_compound_structure_modal">
|
||||||
role="button"
|
<i class="glyphicon glyphicon-edit"></i> Edit Compound Structure</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#edit_compound_structure_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Compound Structure</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a
|
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a
|
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#generic_set_external_reference_modal">
|
||||||
role="button"
|
<i class="glyphicon glyphicon-plus"></i> Set External Reference</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#generic_set_external_reference_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set External Reference</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Compound Structure</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Compound Structure</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,17 +1,14 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a
|
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a
|
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Edge</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Edge</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,12 +1,10 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_group_member_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_group_member_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Add/Remove Member</a
|
<i class="glyphicon glyphicon-trash"></i> Add/Remove Member</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a role="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Group</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Group</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,22 +1,18 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_model_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_model_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Model</a
|
<i class="glyphicon glyphicon-edit"></i> Edit Model</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#evaluate_model_modal">
|
<a role="button" data-toggle="modal" data-target="#evaluate_model_modal">
|
||||||
<i class="glyphicon glyphicon-ok"></i> Evaluate Model</a
|
<i class="glyphicon glyphicon-ok"></i> Evaluate Model</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#retrain_model_modal">
|
<a role="button" data-toggle="modal" data-target="#retrain_model_modal">
|
||||||
<i class="glyphicon glyphicon-repeat"></i> Retrain Model</a
|
<i class="glyphicon glyphicon-repeat"></i> Retrain Model</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Model</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Model</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,22 +1,18 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_node_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_node_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Node</a
|
<i class="glyphicon glyphicon-edit"></i> Edit Node</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a
|
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a
|
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Node</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Node</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,36 +1,26 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_package_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_package_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Package</a
|
<i class="glyphicon glyphicon-edit"></i> Edit Package</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#edit_package_permissions_modal">
|
||||||
role="button"
|
<i class="glyphicon glyphicon-user"></i> Edit Permissions</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#edit_package_permissions_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-user"></i> Edit Permissions</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#publish_package_modal">
|
<a role="button" data-toggle="modal" data-target="#publish_package_modal">
|
||||||
<i class="glyphicon glyphicon-bullhorn"></i> Publish Package</a
|
<i class="glyphicon glyphicon-bullhorn"></i> Publish Package</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#export_package_modal">
|
<a role="button" data-toggle="modal" data-target="#export_package_modal">
|
||||||
<i class="glyphicon glyphicon-bullhorn"></i> Export Package as JSON</a
|
<i class="glyphicon glyphicon-bullhorn"></i> Export Package as JSON</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_license_modal">
|
<a role="button" data-toggle="modal" data-target="#set_license_modal">
|
||||||
<i class="glyphicon glyphicon-duplicate"></i> License</a
|
<i class="glyphicon glyphicon-duplicate"></i> License</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Package</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Package</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,65 +1,43 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#add_pathway_node_modal">
|
<a class="button" data-toggle="modal" data-target="#add_pathway_node_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Add Compound</a
|
<i class="glyphicon glyphicon-plus"></i> Add Compound</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#add_pathway_edge_modal">
|
<a class="button" data-toggle="modal" data-target="#add_pathway_edge_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Add Reaction</a
|
<i class="glyphicon glyphicon-plus"></i> Add Reaction</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li role="separator" class="divider"></li>
|
<li role="separator" class="divider"></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
||||||
<i class="glyphicon glyphicon-duplicate"></i> Copy</a
|
<i class="glyphicon glyphicon-duplicate"></i> Copy</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a class="button" data-toggle="modal" data-target="#download_pathway_csv_modal">
|
||||||
class="button"
|
<i class="glyphicon glyphicon-floppy-save"></i> Download Pathway as CSV</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#download_pathway_csv_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-floppy-save"></i> Download Pathway as CSV</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a class="button" data-toggle="modal" data-target="#download_pathway_image_modal">
|
||||||
class="button"
|
<i class="glyphicon glyphicon-floppy-save"></i> Download Pathway as Image</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#download_pathway_image_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-floppy-save"></i> Download Pathway as Image</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a class="button" data-toggle="modal" data-target="#identify_missing_rules_modal">
|
||||||
class="button"
|
<i class="glyphicon glyphicon-question-sign"></i> Identify Missing Rules</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#identify_missing_rules_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-question-sign"></i> Identify Missing
|
|
||||||
Rules</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li role="separator" class="divider"></li>
|
<li role="separator" class="divider"></li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#edit_pathway_modal">
|
<a class="button" data-toggle="modal" data-target="#edit_pathway_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Pathway</a
|
<i class="glyphicon glyphicon-edit"></i> Edit Pathway</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a
|
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a
|
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{# <li>#}
|
{# <li>#}
|
||||||
{# <a class="button" data-toggle="modal" data-target="#add_pathway_edge_modal">#}
|
{# <a class="button" data-toggle="modal" data-target="#add_pathway_edge_modal">#}
|
||||||
@ -67,26 +45,15 @@
|
|||||||
{# </li>#}
|
{# </li>#}
|
||||||
<li role="separator" class="divider"></li>
|
<li role="separator" class="divider"></li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a class="button" data-toggle="modal" data-target="#delete_pathway_node_modal">
|
||||||
class="button"
|
<i class="glyphicon glyphicon-trash"></i> Delete Compound</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#delete_pathway_node_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Compound</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a class="button" data-toggle="modal" data-target="#delete_pathway_edge_modal">
|
||||||
class="button"
|
<i class="glyphicon glyphicon-trash"></i> Delete Reaction</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#delete_pathway_edge_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Reaction</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Pathway</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Pathway</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,38 +1,28 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_reaction_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_reaction_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Reaction</a
|
<i class="glyphicon glyphicon-edit"></i> Edit Reaction</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a
|
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a
|
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#generic_set_external_reference_modal">
|
||||||
role="button"
|
<i class="glyphicon glyphicon-plus"></i> Set External Reference</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#generic_set_external_reference_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set External Reference</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
||||||
<i class="glyphicon glyphicon-duplicate"></i> Copy</a
|
<i class="glyphicon glyphicon-duplicate"></i> Copy</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Reaction</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Reaction</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,29 +1,24 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_rule_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_rule_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Edit Rule</a
|
<i class="glyphicon glyphicon-edit"></i> Edit Rule</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
<a role="button" data-toggle="modal" data-target="#set_aliases_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a
|
<i class="glyphicon glyphicon-plus"></i> Set Aliases</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
<a role="button" data-toggle="modal" data-target="#set_scenario_modal">
|
||||||
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a
|
<i class="glyphicon glyphicon-plus"></i> Set Scenarios</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
<a role="button" data-toggle="modal" data-target="#generic_copy_object_modal">
|
||||||
<i class="glyphicon glyphicon-duplicate"></i> Copy</a
|
<i class="glyphicon glyphicon-duplicate"></i> Copy</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Rule</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Rule</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,25 +1,14 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a class="button" data-toggle="modal" data-target="#add_additional_information_modal">
|
||||||
class="button"
|
<i class="glyphicon glyphicon-trash"></i> Add Additional Information</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#add_additional_information_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-trash"></i> Add Additional Information</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a class="button" data-toggle="modal" data-target="#update_scenario_additional_information_modal">
|
||||||
class="button"
|
<i class="glyphicon glyphicon-trash"></i> Set Additional Information</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#update_scenario_additional_information_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-trash"></i> Set Additional Information</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a class="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Scenario</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Scenario</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,22 +1,15 @@
|
|||||||
{% if meta.can_edit %}
|
{% if meta.can_edit %}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_user_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_user_modal">
|
||||||
<i class="glyphicon glyphicon-edit"></i> Update</a
|
<i class="glyphicon glyphicon-edit"></i> Update</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#edit_password_modal">
|
<a role="button" data-toggle="modal" data-target="#edit_password_modal">
|
||||||
<i class="glyphicon glyphicon-lock"></i> Update Password</a
|
<i class="glyphicon glyphicon-lock"></i> Update Password</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a role="button" data-toggle="modal" data-target="#new_prediction_setting_modal">
|
||||||
role="button"
|
<i class="glyphicon glyphicon-plus"></i> New Prediction Setting</a>
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#new_prediction_setting_modal"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-plus"></i> New Prediction Setting</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{# <li>#}
|
{# <li>#}
|
||||||
{# <a role="button" data-toggle="modal" data-target="#manage_api_token_modal">#}
|
{# <a role="button" data-toggle="modal" data-target="#manage_api_token_modal">#}
|
||||||
@ -24,7 +17,6 @@
|
|||||||
{# </li>#}
|
{# </li>#}
|
||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#generic_delete_modal">
|
<a role="button" data-toggle="modal" data-target="#generic_delete_modal">
|
||||||
<i class="glyphicon glyphicon-trash"></i> Delete Account</a
|
<i class="glyphicon glyphicon-trash"></i> Delete Account</a>
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -1,17 +1,12 @@
|
|||||||
{% extends "framework.html" %}
|
{% extends "framework.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div id="searchContent">
|
|
||||||
|
<div id=searchContent>
|
||||||
<form id="admin-form" action="{{ SERVER_BASE }}/admin" method="post">
|
<form id="admin-form" action="{{ SERVER_BASE }}/admin" method="post">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="textarea">Query</label>
|
<label for="textarea">Query</label>
|
||||||
<textarea
|
<textarea id="textarea" class="form-control" rows="10" placeholder="Paste query here" required>
|
||||||
id="textarea"
|
|
||||||
class="form-control"
|
|
||||||
rows="10"
|
|
||||||
placeholder="Paste query here"
|
|
||||||
required
|
|
||||||
>
|
|
||||||
PREFIX pps: <http://localhost:8080/vocabulary#>
|
PREFIX pps: <http://localhost:8080/vocabulary#>
|
||||||
SELECT ?name (count(?objId) as ?xcnt)
|
SELECT ?name (count(?objId) as ?xcnt)
|
||||||
WHERE {
|
WHERE {
|
||||||
@ -20,29 +15,32 @@ WHERE {
|
|||||||
?packageId pps:reviewStatus 'reviewed' .
|
?packageId pps:reviewStatus 'reviewed' .
|
||||||
?packageId pps:pathway ?objId .
|
?packageId pps:pathway ?objId .
|
||||||
} GROUP BY ?name
|
} GROUP BY ?name
|
||||||
</textarea
|
</textarea>
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<button id="submit" type="button" class="btn btn-primary">Submit</button>
|
<button id="submit" type="button" class="btn btn-primary">Submit</button>
|
||||||
</form>
|
</form>
|
||||||
<p></p>
|
<p></p>
|
||||||
</div>
|
</div>
|
||||||
<div id="results"></div>
|
<div id="results">
|
||||||
|
</div>
|
||||||
<div id="loading"></div>
|
<div id="loading"></div>
|
||||||
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#submit").on("click", function () {
|
$('#submit').on('click', function() {
|
||||||
|
|
||||||
makeLoadingGif("#loading", "{% static '/images/wait.gif' %}");
|
makeLoadingGif("#loading", "{% static '/images/wait.gif' %}");
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
query: $("#textarea").val(),
|
"query": $("#textarea").val()
|
||||||
};
|
}
|
||||||
|
|
||||||
$.post("{{ SERVER_BASE }}/expire", data, function(result) {
|
$.post("{{ SERVER_BASE }}/expire", data, function(result) {
|
||||||
$("#loading").empty();
|
$("#loading").empty();
|
||||||
queryResultToTable("results", result);
|
queryResultToTable("results", result);
|
||||||
|
})
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -1,38 +1,30 @@
|
|||||||
{% extends "framework.html" %}
|
{% extends "framework.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load envipytags %}
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="panel-group" id="reviewListAccordion">
|
<div class="panel-group" id="reviewListAccordion">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div
|
<div class="panel-heading" id="headingPanel" style="font-size:2rem;height: 46px">
|
||||||
class="panel-heading"
|
|
||||||
id="headingPanel"
|
|
||||||
style="font-size:2rem;height: 46px"
|
|
||||||
>
|
|
||||||
Jobs
|
Jobs
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<p>Job Logs Desc</p>
|
<p>
|
||||||
|
Job Logs Desc
|
||||||
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div class="panel panel-default panel-heading list-group-item" style="background-color:silver">
|
||||||
class="panel panel-default panel-heading list-group-item"
|
|
||||||
style="background-color:silver"
|
|
||||||
>
|
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a
|
<a id="job-accordion-link" data-toggle="collapse" data-parent="#job-accordion" href="#jobs">
|
||||||
id="job-accordion-link"
|
|
||||||
data-toggle="collapse"
|
|
||||||
data-parent="#job-accordion"
|
|
||||||
href="#jobs"
|
|
||||||
>
|
|
||||||
Jobs
|
Jobs
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="jobs" class="panel-collapse in collapse">
|
<div id="jobs"
|
||||||
|
class="panel-collapse collapse in">
|
||||||
<div class="panel-body list-group-item" id="job-content">
|
<div class="panel-body list-group-item" id="job-content">
|
||||||
<table class="table-bordered table-hover table">
|
<table class="table table-bordered table-hover">
|
||||||
<tr style="background-color: rgba(0, 0, 0, 0.08);">
|
<tr style="background-color: rgba(0, 0, 0, 0.08);">
|
||||||
<th scope="col">ID</th>
|
<th scope="col">ID</th>
|
||||||
<th scope="col">Name</th>
|
<th scope="col">Name</th>
|
||||||
@ -64,12 +56,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Unreviewable objects such as User / Group / Setting -->
|
<!-- Unreviewable objects such as User / Group / Setting -->
|
||||||
<ul class="list-group">
|
<ul class='list-group'>
|
||||||
{% for obj in objects %}
|
{% for obj in objects %}
|
||||||
{% if object_type == 'user' %}
|
{% if object_type == 'user' %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}"
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.username }}</a>
|
||||||
>{{ obj.username }}</a
|
|
||||||
>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}">{{ obj.name }}</a>
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.name }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -6,22 +6,14 @@
|
|||||||
<div>
|
<div>
|
||||||
<div id="load-all-error" style="display: none;">
|
<div id="load-all-error" style="display: none;">
|
||||||
<div class="alert alert-danger" role="alert">
|
<div class="alert alert-danger" role="alert">
|
||||||
<span
|
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
|
||||||
class="glyphicon glyphicon-exclamation-sign"
|
|
||||||
aria-hidden="true"
|
|
||||||
></span>
|
|
||||||
<span class="sr-only">Error:</span>
|
<span class="sr-only">Error:</span>
|
||||||
Getting objects failed!
|
Getting objects failed!
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input
|
<input type="text" id="object-search" class="form-control" placeholder="Search by name"
|
||||||
type="text"
|
style="display: none;">
|
||||||
id="object-search"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Search by name"
|
|
||||||
style="display: none;"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -58,11 +50,7 @@
|
|||||||
|
|
||||||
<div class="panel-group" id="reviewListAccordion">
|
<div class="panel-group" id="reviewListAccordion">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div
|
<div class="panel-heading" id="headingPanel" style="font-size:2rem;height: 46px">
|
||||||
class="panel-heading"
|
|
||||||
id="headingPanel"
|
|
||||||
style="font-size:2rem;height: 46px"
|
|
||||||
>
|
|
||||||
{% if object_type == 'package' %}
|
{% if object_type == 'package' %}
|
||||||
Packages
|
Packages
|
||||||
{% elif object_type == 'compound' %}
|
{% elif object_type == 'compound' %}
|
||||||
@ -90,21 +78,12 @@
|
|||||||
{% elif object_type == 'group' %}
|
{% elif object_type == 'group' %}
|
||||||
Groups
|
Groups
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div
|
<div id="actionsButton"
|
||||||
id="actionsButton"
|
|
||||||
style="float: right;font-weight: normal;font-size: medium;position: relative; top: 50%; transform: translateY(-50%);z-index:100;display: none;"
|
style="float: right;font-weight: normal;font-size: medium;position: relative; top: 50%; transform: translateY(-50%);z-index:100;display: none;"
|
||||||
class="dropdown"
|
class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"
|
||||||
>
|
aria-haspopup="true" aria-expanded="false"><span
|
||||||
<a
|
class="glyphicon glyphicon-wrench"></span> Actions <span class="caret"></span><span
|
||||||
href="#"
|
style="padding-right:1em"></span></a>
|
||||||
class="dropdown-toggle"
|
|
||||||
data-toggle="dropdown"
|
|
||||||
role="button"
|
|
||||||
aria-haspopup="true"
|
|
||||||
aria-expanded="false"
|
|
||||||
><span class="glyphicon glyphicon-wrench"></span> Actions
|
|
||||||
<span class="caret"></span><span style="padding-right:1em"></span
|
|
||||||
></a>
|
|
||||||
<ul id="actionsList" class="dropdown-menu">
|
<ul id="actionsList" class="dropdown-menu">
|
||||||
{% block actions %}
|
{% block actions %}
|
||||||
{% if object_type == 'package' %}
|
{% if object_type == 'package' %}
|
||||||
@ -139,204 +118,93 @@
|
|||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<!-- Set Text above links -->
|
<!-- Set Text above links -->
|
||||||
{% if object_type == 'package' %}
|
{% if object_type == 'package' %}
|
||||||
<p>
|
<p>A package contains pathways, rules, etc. and can reflect specific experimental
|
||||||
A package contains pathways, rules, etc. and can reflect specific
|
conditions. <a target="_blank" href="https://wiki.envipath.org/index.php/packages" role="button">Learn
|
||||||
experimental conditions.
|
more >></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/packages"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'compound' %}
|
{% elif object_type == 'compound' %}
|
||||||
<p>
|
<p>A compound stores the structure of a molecule and can include meta-information.
|
||||||
A compound stores the structure of a molecule and can include
|
<a target="_blank" href="https://wiki.envipath.org/index.php/compounds" role="button">Learn more
|
||||||
meta-information.
|
>></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/compounds"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'structure' %}
|
{% elif object_type == 'structure' %}
|
||||||
<p>
|
<p>The structures stored in this compound
|
||||||
The structures stored in this compound
|
<a target="_blank" href="https://wiki.envipath.org/index.php/compounds" role="button">Learn more
|
||||||
<a
|
>></a></p>
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/compounds"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'rule' %}
|
{% elif object_type == 'rule' %}
|
||||||
<p>
|
<p>A rule describes a biotransformation reaction template that is defined as SMIRKS.
|
||||||
A rule describes a biotransformation reaction template that is
|
<a target="_blank" href="https://wiki.envipath.org/index.php/Rules" role="button">Learn more
|
||||||
defined as SMIRKS.
|
>></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/Rules"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'reaction' %}
|
{% elif object_type == 'reaction' %}
|
||||||
<p>
|
<p>A reaction is a specific biotransformation from educt compounds to product compounds.
|
||||||
A reaction is a specific biotransformation from educt compounds to
|
<a target="_blank" href="https://wiki.envipath.org/index.php/reactions" role="button">Learn more
|
||||||
product compounds.
|
>></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/reactions"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'pathway' %}
|
{% elif object_type == 'pathway' %}
|
||||||
<p>
|
<p>A pathway displays the (predicted) biodegradation of a compound as graph.
|
||||||
A pathway displays the (predicted) biodegradation of a compound as
|
<a target="_blank" href="https://wiki.envipath.org/index.php/pathways" role="button">Learn more
|
||||||
graph.
|
>></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/pathways"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'node' %}
|
{% elif object_type == 'node' %}
|
||||||
<p>
|
<p>Nodes represent the (predicted) compounds in a graph.
|
||||||
Nodes represent the (predicted) compounds in a graph.
|
<a target="_blank" href="https://wiki.envipath.org/index.php/nodes" role="button">Learn more
|
||||||
<a
|
>></a></p>
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/nodes"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'edge' %}
|
{% elif object_type == 'edge' %}
|
||||||
<p>
|
<p>Edges represent the links between Nodes in a graph
|
||||||
Edges represent the links between Nodes in a graph
|
<a target="_blank" href="https://wiki.envipath.org/index.php/edges" role="button">Learn more
|
||||||
<a
|
>></a></p>
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/edges"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'scenario' %}
|
{% elif object_type == 'scenario' %}
|
||||||
<p>
|
<p>A scenario contains meta-information that can be attached to other data (compounds, rules, ..).
|
||||||
A scenario contains meta-information that can be attached to other
|
<a target="_blank" href="https://wiki.envipath.org/index.php/scenarios" role="button">Learn more
|
||||||
data (compounds, rules, ..).
|
>></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/scenarios"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'model' %}
|
{% elif object_type == 'model' %}
|
||||||
<p>
|
<p>A model applies machine learning to limit the combinatorial explosion.
|
||||||
A model applies machine learning to limit the combinatorial
|
<a target="_blank" href="https://wiki.envipath.org/index.php/relative_reasoning" role="button">Learn
|
||||||
explosion.
|
more
|
||||||
<a
|
>></a></p>
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/relative_reasoning"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'setting' %}
|
{% elif object_type == 'setting' %}
|
||||||
<p>
|
<p>A setting includes configuration parameters for pathway predictions.
|
||||||
A setting includes configuration parameters for pathway predictions.
|
<a target="_blank" href="https://wiki.envipath.org/index.php/settings" role="button">Learn more
|
||||||
<a
|
>></a></p>
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/settings"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'user' %}
|
{% elif object_type == 'user' %}
|
||||||
<p>
|
<p>Register now to create own packages and to submit and manage your data.
|
||||||
Register now to create own packages and to submit and manage your
|
<a target="_blank" href="https://wiki.envipath.org/index.php/users" role="button">Learn more
|
||||||
data.
|
>></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/users"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% elif object_type == 'group' %}
|
{% elif object_type == 'group' %}
|
||||||
<p>
|
<p>Users can team up in groups to share packages.
|
||||||
Users can team up in groups to share packages.
|
<a target="_blank" href="https://wiki.envipath.org/index.php/groups" role="button">Learn more
|
||||||
<a
|
>></a></p>
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/groups"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- If theres nothing to show extend the text above -->
|
<!-- If theres nothing to show extend the text above -->
|
||||||
{% if reviewed_objects and unreviewed_objects %}
|
{% if reviewed_objects and unreviewed_objects %}
|
||||||
{% if reviewed_objects|length == 0 and unreviewed_objects|length == 0 %}
|
{% if reviewed_objects|length == 0 and unreviewed_objects|length == 0 %}
|
||||||
<p>
|
<p>Nothing found. There are two possible reasons: <br><br>1. There is no content yet.<br>2. You have no
|
||||||
Nothing found. There are two possible reasons: <br /><br />1.
|
reading permissions.<br><br>Please be sure you have at least reading permissions.</p>
|
||||||
There is no content yet.<br />2. You have no reading
|
|
||||||
permissions.<br /><br />Please be sure you have at least reading
|
|
||||||
permissions.
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% if reviewed_objects %}
|
{% if reviewed_objects %}
|
||||||
{% if reviewed_objects|length > 0 %}
|
{% if reviewed_objects|length > 0 %}
|
||||||
<div
|
<div class="panel panel-default panel-heading list-group-item" style="background-color:silver">
|
||||||
class="panel panel-default panel-heading list-group-item"
|
|
||||||
style="background-color:silver"
|
|
||||||
>
|
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a
|
<a id="ReviewedLink" data-toggle="collapse" data-parent="#reviewListAccordion"
|
||||||
id="ReviewedLink"
|
href="#Reviewed">Reviewed</a>
|
||||||
data-toggle="collapse"
|
|
||||||
data-parent="#reviewListAccordion"
|
|
||||||
href="#Reviewed"
|
|
||||||
>Reviewed</a
|
|
||||||
>
|
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="Reviewed" class="panel-collapse in collapse">
|
<div id="Reviewed" class="panel-collapse collapse in">
|
||||||
<div class="panel-body list-group-item" id="ReviewedContent">
|
<div class="panel-body list-group-item" id="ReviewedContent">
|
||||||
{% if object_type == 'package' %}
|
{% if object_type == 'package' %}
|
||||||
{% for obj in reviewed_objects %}
|
{% for obj in reviewed_objects %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}"
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.name|safe }}
|
||||||
>{{ obj.name|safe }}
|
<span class="glyphicon glyphicon-star" aria-hidden="true"
|
||||||
<span
|
style="float:right" data-toggle="tooltip"
|
||||||
class="glyphicon glyphicon-star"
|
data-placement="top" title="" data-original-title="Reviewed">
|
||||||
aria-hidden="true"
|
|
||||||
style="float:right"
|
|
||||||
data-toggle="tooltip"
|
|
||||||
data-placement="top"
|
|
||||||
title=""
|
|
||||||
data-original-title="Reviewed"
|
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for obj in reviewed_objects|slice:":50" %}
|
{% for obj in reviewed_objects|slice:":50" %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}"
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.name|safe }}{# <i>({{ obj.package.name }})</i> #}
|
||||||
>{{ obj.name|safe }}{# <i>({{ obj.package.name }})</i> #}
|
<span class="glyphicon glyphicon-star" aria-hidden="true"
|
||||||
<span
|
style="float:right" data-toggle="tooltip"
|
||||||
class="glyphicon glyphicon-star"
|
data-placement="top" title="" data-original-title="Reviewed">
|
||||||
aria-hidden="true"
|
|
||||||
style="float:right"
|
|
||||||
data-toggle="tooltip"
|
|
||||||
data-placement="top"
|
|
||||||
title=""
|
|
||||||
data-original-title="Reviewed"
|
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -346,36 +214,18 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if unreviewed_objects %}
|
{% if unreviewed_objects %}
|
||||||
<div
|
<div class="panel panel-default panel-heading list-group-item" style="background-color:silver"><h4
|
||||||
class="panel panel-default panel-heading list-group-item"
|
class="panel-title"><a id="UnreviewedLink" data-toggle="collapse" data-parent="#unReviewListAccordion"
|
||||||
style="background-color:silver"
|
href="#Unreviewed">Unreviewed</a></h4></div>
|
||||||
>
|
<div id="Unreviewed" class="panel-collapse collapse {% if reviewed_objects|length == 0 or object_type == 'package' %}in{% endif %}">
|
||||||
<h4 class="panel-title">
|
|
||||||
<a
|
|
||||||
id="UnreviewedLink"
|
|
||||||
data-toggle="collapse"
|
|
||||||
data-parent="#unReviewListAccordion"
|
|
||||||
href="#Unreviewed"
|
|
||||||
>Unreviewed</a
|
|
||||||
>
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
id="Unreviewed"
|
|
||||||
class="panel-collapse {% if reviewed_objects|length == 0 or object_type == 'package' %}in{% endif %} collapse"
|
|
||||||
>
|
|
||||||
<div class="panel-body list-group-item" id="UnreviewedContent">
|
<div class="panel-body list-group-item" id="UnreviewedContent">
|
||||||
{% if object_type == 'package' %}
|
{% if object_type == 'package' %}
|
||||||
{% for obj in unreviewed_objects %}
|
{% for obj in unreviewed_objects %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}"
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.name|safe }}</a>
|
||||||
>{{ obj.name|safe }}</a
|
|
||||||
>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for obj in unreviewed_objects|slice:":50" %}
|
{% for obj in unreviewed_objects|slice:":50" %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}"
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.name|safe }}</a>
|
||||||
>{{ obj.name|safe }}</a
|
|
||||||
>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@ -383,16 +233,12 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% if objects %}
|
{% if objects %}
|
||||||
<!-- Unreviewable objects such as User / Group / Setting -->
|
<!-- Unreviewable objects such as User / Group / Setting -->
|
||||||
<ul class="list-group">
|
<ul class='list-group'>
|
||||||
{% for obj in objects %}
|
{% for obj in objects %}
|
||||||
{% if object_type == 'user' %}
|
{% if object_type == 'user' %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}"
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.username|safe }}</a>
|
||||||
>{{ obj.username|safe }}</a
|
|
||||||
>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<a class="list-group-item" href="{{ obj.url }}"
|
<a class="list-group-item" href="{{ obj.url }}">{{ obj.name|safe }}</a>
|
||||||
>{{ obj.name|safe }}</a
|
|
||||||
>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
@ -415,14 +261,10 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div id="load-all-loading" class="spinner-widget" style="display: none">
|
<div id="load-all-loading" class="spinner-widget" style="display: none">
|
||||||
<img
|
<img id="loading-gif" src="{% static '/images/wait.gif' %}" alt="Loading...">
|
||||||
id="loading-gif"
|
|
||||||
src="{% static '/images/wait.gif' %}"
|
|
||||||
alt="Loading..."
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{# prettier-ignore-start #}
|
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
@ -474,5 +316,4 @@
|
|||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{# prettier-ignore-end #}
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -4,32 +4,16 @@
|
|||||||
<div>
|
<div>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input
|
<input type="text" class="form-control" id="smiles" name="smiles" placeholder="SMILES"
|
||||||
type="text"
|
value="{{ smiles }}"/>
|
||||||
class="form-control"
|
<input type="text" class="form-control" id="smiles" name="smirks" placeholder="SMIRKS"
|
||||||
id="smiles"
|
value="{{ smirks }}"/>
|
||||||
name="smiles"
|
|
||||||
placeholder="SMILES"
|
|
||||||
value="{{ smiles }}"
|
|
||||||
/>
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
id="smiles"
|
|
||||||
name="smirks"
|
|
||||||
placeholder="SMIRKS"
|
|
||||||
value="{{ smirks }}"
|
|
||||||
/>
|
|
||||||
<button type="submit" class="btn btn-primary">Test</button>
|
<button type="submit" class="btn btn-primary">Test</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% if result %}
|
{% if result %}
|
||||||
{{ smiles }}
|
{{ smiles }}<p></p>
|
||||||
<p></p>
|
<img width='400' src='{% url 'depict' %}?smiles={{ smiles|urlencode }}'><br>
|
||||||
<img
|
|
||||||
width="400"
|
|
||||||
src="{% url 'depict' %}?smiles={{ smiles|urlencode }}"
|
|
||||||
/><br />
|
|
||||||
<p></p>
|
<p></p>
|
||||||
{% if rule %}
|
{% if rule %}
|
||||||
{{ smirks }}
|
{{ smirks }}
|
||||||
@ -38,7 +22,9 @@
|
|||||||
<p></p>
|
<p></p>
|
||||||
{{ rule.products_smarts }}
|
{{ rule.products_smarts }}
|
||||||
<p></p>
|
<p></p>
|
||||||
<div>{{ rule.as_svg|safe }}</div>
|
<div>
|
||||||
|
{{ rule.as_svg|safe }}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h2>Diff</h2>
|
<h2>Diff</h2>
|
||||||
{% if diff %}
|
{% if diff %}
|
||||||
@ -52,22 +38,16 @@
|
|||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<h2>Ambit</h2>
|
<h2>Ambit</h2>
|
||||||
{% for p in ambit_res %}
|
{% for p in ambit_res %}
|
||||||
{{ p }}<br />
|
{{ p }}<br>
|
||||||
<img
|
<img width='400' src='{% url 'depict' %}?smiles={{ p|urlencode }}'><br>
|
||||||
width="400"
|
|
||||||
src="{% url 'depict' %}?smiles={{ p|urlencode }}"
|
|
||||||
/><br />
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<h2>RDKit</h2>
|
<h2>RDKit</h2>
|
||||||
{% for p in rdkit_res %}
|
{% for p in rdkit_res %}
|
||||||
{{ p }}<br />
|
{{ p }}<br>
|
||||||
<img
|
<img width='400' src='{% url 'depict' %}?smiles={{ p|urlencode }}'><br>
|
||||||
width="400"
|
|
||||||
src="{% url 'depict' %}?smiles={{ p|urlencode }}"
|
|
||||||
/><br />
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,18 +1,15 @@
|
|||||||
{% extends "framework.html" %}
|
{% extends "framework.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="alert alert-error" role="alert">
|
<div class="alert alert-error" role="alert">
|
||||||
<h4 class="alert-heading">Bad Request!</h4>
|
<h4 class="alert-heading">Bad Request!</h4>
|
||||||
<p>Lorem</p>
|
<p>Lorem</p>
|
||||||
<hr />
|
<hr>
|
||||||
<p class="mb-0">
|
<p class="mb-0">
|
||||||
You can find out more about permissions in our
|
You can find out more about permissions in our <a target="_blank"
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/packages"
|
href="https://wiki.envipath.org/index.php/packages"
|
||||||
role="button"
|
role="button">Wiki >></a></p>
|
||||||
>Wiki >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -1,18 +1,15 @@
|
|||||||
{% extends "framework.html" %}
|
{% extends "framework.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="alert alert-error" role="alert">
|
<div class="alert alert-error" role="alert">
|
||||||
<h4 class="alert-heading">Access Denied!</h4>
|
<h4 class="alert-heading">Access Denied!</h4>
|
||||||
<p>Access to X denied. </p>
|
<p>Access to X denied. </p>
|
||||||
<hr />
|
<hr>
|
||||||
<p class="mb-0">
|
<p class="mb-0">
|
||||||
You can find out more about permissions in our
|
You can find out more about permissions in our <a target="_blank"
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/packages"
|
href="https://wiki.envipath.org/index.php/packages"
|
||||||
role="button"
|
role="button">Wiki >></a></p>
|
||||||
>Wiki >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -1,18 +1,15 @@
|
|||||||
{% extends "framework.html" %}
|
{% extends "framework.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="alert alert-error" role="alert">
|
<div class="alert alert-error" role="alert">
|
||||||
<h4 class="alert-heading">Not Found!</h4>
|
<h4 class="alert-heading">Not Found!</h4>
|
||||||
<p>Does not exist</p>
|
<p>Does not exist</p>
|
||||||
<hr />
|
<hr>
|
||||||
<p class="mb-0">
|
<p class="mb-0">
|
||||||
You can find out more about permissions in our
|
You can find out more about permissions in our <a target="_blank"
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/packages"
|
href="https://wiki.envipath.org/index.php/packages"
|
||||||
role="button"
|
role="button">Wiki >></a></p>
|
||||||
>Wiki >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -1,9 +1,13 @@
|
|||||||
{% extends "framework.html" %}
|
{% extends "framework.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="alert alert-danger" role="alert">
|
<div class="alert alert-danger" role="alert">
|
||||||
<h4 class="alert-heading">{{ error_message }}</h4>
|
<h4 class="alert-heading">{{ error_message }}</h4>
|
||||||
<hr />
|
<hr>
|
||||||
<p class="mb-0">{{ error_detail }}</p>
|
<p class="mb-0">
|
||||||
|
{{ error_detail }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
{% extends "framework.html" %}
|
{% extends "framework.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="alert alert-danger" role="alert">
|
<div class="alert alert-danger" role="alert">
|
||||||
<h4 class="alert-heading">Your account has not been activated yet!</h4>
|
<h4 class="alert-heading">Your account has not been activated yet!</h4>
|
||||||
<p>
|
<p>Your account has not been activated yet. If you have questions <a href="mailto:admin@envipath.org">contact
|
||||||
Your account has not been activated yet. If you have questions
|
us.</a>
|
||||||
<a href="mailto:admin@envipath.org">contact us.</a>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -1,15 +1,11 @@
|
|||||||
<!doctype html>
|
<!DOCTYPE html>
|
||||||
<html data-theme="envipath">
|
<html data-theme="envipath">
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<head>
|
<head>
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
<meta name="csrf-token" content="{{ csrf_token }}" />
|
<meta name="csrf-token" content="{{ csrf_token }}">
|
||||||
{# Favicon #}
|
{# Favicon #}
|
||||||
<link
|
<link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>
|
||||||
rel="shortcut icon"
|
|
||||||
type="image/png"
|
|
||||||
href="{% static 'images/favicon.ico' %}"
|
|
||||||
/>
|
|
||||||
|
|
||||||
{# Tailwind CSS disabled for legacy Bootstrap framework #}
|
{# Tailwind CSS disabled for legacy Bootstrap framework #}
|
||||||
{# Pages using this framework will be migrated to framework_modern.html incrementally #}
|
{# Pages using this framework will be migrated to framework_modern.html incrementally #}
|
||||||
@ -17,20 +13,12 @@
|
|||||||
|
|
||||||
{# Legacy Bootstrap 3.3.7 - scoped to .legacy-bootstrap #}
|
{# Legacy Bootstrap 3.3.7 - scoped to .legacy-bootstrap #}
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||||
<link
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
|
||||||
rel="stylesheet"
|
|
||||||
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
|
|
||||||
/>
|
|
||||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.js"></script>
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.js"></script>
|
||||||
<link
|
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
|
||||||
href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css"
|
<link rel="stylesheet"
|
||||||
rel="stylesheet"
|
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.7.3/css/bootstrap-select.min.css">
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.7.3/css/bootstrap-select.min.css"
|
|
||||||
/>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.7.3/js/bootstrap-select.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.7.3/js/bootstrap-select.min.js"></script>
|
||||||
<script src="https://community.envipath.org/javascripts/embed-topics.js"></script>
|
<script src="https://community.envipath.org/javascripts/embed-topics.js"></script>
|
||||||
<!-- CDN END -->
|
<!-- CDN END -->
|
||||||
@ -38,15 +26,14 @@
|
|||||||
{# Bootstrap compatibility styles #}
|
{# Bootstrap compatibility styles #}
|
||||||
<style>
|
<style>
|
||||||
/* Ensure proper viewport behavior */
|
/* Ensure proper viewport behavior */
|
||||||
html,
|
html, body {
|
||||||
body {
|
|
||||||
height: 100%; /* ensure body fills viewport */
|
height: 100%; /* ensure body fills viewport */
|
||||||
overflow-x: hidden; /* prevent horizontal scroll */
|
overflow-x: hidden; /* prevent horizontal scroll */
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const csrftoken = document.querySelector("[name=csrf-token]").content;
|
const csrftoken = document.querySelector('[name=csrf-token]').content;
|
||||||
|
|
||||||
// Setup CSRF header for all jQuery AJAX requests
|
// Setup CSRF header for all jQuery AJAX requests
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
@ -54,7 +41,7 @@
|
|||||||
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
|
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
|
||||||
xhr.setRequestHeader("X-CSRFToken", csrftoken);
|
xhr.setRequestHeader("X-CSRFToken", csrftoken);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -63,6 +50,7 @@
|
|||||||
<!-- {# EP CSS #}-->
|
<!-- {# EP CSS #}-->
|
||||||
<!-- <link id="css-pps_white_general" href="{% static 'css/epp.css' %}" rel="stylesheet" type="text/css"/>-->
|
<!-- <link id="css-pps_white_general" href="{% static 'css/epp.css' %}" rel="stylesheet" type="text/css"/>-->
|
||||||
|
|
||||||
|
|
||||||
{# General EP JS #}
|
{# General EP JS #}
|
||||||
<script src="{% static 'js/pps.js' %}"></script>
|
<script src="{% static 'js/pps.js' %}"></script>
|
||||||
{# Modal Steps for Stepwise Modal Wizards #}
|
{# Modal Steps for Stepwise Modal Wizards #}
|
||||||
@ -71,33 +59,28 @@
|
|||||||
{% if not debug %}
|
{% if not debug %}
|
||||||
<!-- Matomo -->
|
<!-- Matomo -->
|
||||||
<script>
|
<script>
|
||||||
var _paq = (window._paq = window._paq || []);
|
var _paq = window._paq = window._paq || [];
|
||||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||||
_paq.push(["trackPageView"]);
|
_paq.push(['trackPageView']);
|
||||||
_paq.push(["enableLinkTracking"]);
|
_paq.push(['enableLinkTracking']);
|
||||||
(function () {
|
(function () {
|
||||||
var u = "//matomo.envipath.com/";
|
var u = "//matomo.envipath.com/";
|
||||||
_paq.push(["setTrackerUrl", u + "matomo.php"]);
|
_paq.push(['setTrackerUrl', u + 'matomo.php']);
|
||||||
_paq.push(["setSiteId", "{{ meta.site_id }}"]);
|
_paq.push(['setSiteId', '{{ meta.site_id }}']);
|
||||||
var d = document,
|
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
|
||||||
g = d.createElement("script"),
|
|
||||||
s = d.getElementsByTagName("script")[0];
|
|
||||||
g.async = true;
|
g.async = true;
|
||||||
g.src = u + "matomo.js";
|
g.src = u + 'matomo.js';
|
||||||
s.parentNode.insertBefore(g, s);
|
s.parentNode.insertBefore(g, s);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<!-- End Matomo Code -->
|
<!-- End Matomo Code -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Legacy Bootstrap navbar - isolated from Tailwind -->
|
<!-- Legacy Bootstrap navbar - isolated from Tailwind -->
|
||||||
<div class="legacy-bootstrap">
|
<div class="legacy-bootstrap">
|
||||||
<nav
|
<nav class="navbar navbar-default navbar-inverse" style="border-radius:0px;" role="navigation">
|
||||||
class="navbar navbar-default navbar-inverse"
|
|
||||||
style="border-radius:0px;"
|
|
||||||
role="navigation"
|
|
||||||
>
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<!-- Brand and toggle get grouped for better mobile display -->
|
<!-- Brand and toggle get grouped for better mobile display -->
|
||||||
<div class="navbar-header navbar-header-framework">
|
<div class="navbar-header navbar-header-framework">
|
||||||
@ -108,28 +91,19 @@
|
|||||||
<!-- <span class="icon-bar"></span>-->
|
<!-- <span class="icon-bar"></span>-->
|
||||||
<!-- <span class="icon-bar"></span>-->
|
<!-- <span class="icon-bar"></span>-->
|
||||||
<!-- </button>-->
|
<!-- </button>-->
|
||||||
<a
|
<a id="pictureLink" href="{{ meta.server_url }}" class="navbar-brand">
|
||||||
id="pictureLink"
|
<img id="image-logo-short-white.svg" src='{% static "/images/logo-short-white.svg" %}' width="100"
|
||||||
href="{{ meta.server_url }}"
|
alt="enviPath">
|
||||||
class="navbar-brand"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
id="image-logo-short-white.svg"
|
|
||||||
src="{% static "/images/logo-short-white.svg" %}"
|
|
||||||
width="100"
|
|
||||||
alt="enviPath"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||||
<div
|
<div class="collapse navbar-collapse collapse-framework navbar-collapse-framework" id="navbarCollapse">
|
||||||
class="navbar-collapse collapse-framework navbar-collapse-framework collapse"
|
|
||||||
id="navbarCollapse"
|
|
||||||
>
|
|
||||||
<ul class="nav navbar-nav navbar-nav-framework">
|
<ul class="nav navbar-nav navbar-nav-framework">
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ meta.server_url }}/predict"> Predict Pathway </a>
|
<a href="#" data-toggle="modal" data-target="#predict_modal">
|
||||||
|
Predict Pathway
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{# <li class="dropdown">#}
|
{# <li class="dropdown">#}
|
||||||
{# <a data-toggle="dropdown" class="dropdown-toggle" href="#">Predict Pathway<b class="caret"></b></a>#}
|
{# <a data-toggle="dropdown" class="dropdown-toggle" href="#">Predict Pathway<b class="caret"></b></a>#}
|
||||||
@ -146,148 +120,66 @@
|
|||||||
{# </li>#}
|
{# </li>#}
|
||||||
{# </ul>#}
|
{# </ul>#}
|
||||||
{# </li>#}
|
{# </li>#}
|
||||||
<li>
|
<li><a href="{{ meta.server_url }}/package" id="packageLink">Package</a></li>
|
||||||
<a href="{{ meta.server_url }}/package" id="packageLink"
|
<li><a href="{{ meta.server_url }}/search" id="searchLink">Search</a></li>
|
||||||
>Package</a
|
<li><a href="{{ meta.server_url }}/model" id="modelLink">Modelling</a></li>
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/search" id="searchLink"
|
|
||||||
>Search</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/model" id="modelLink"
|
|
||||||
>Modelling</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a data-toggle="dropdown" class="dropdown-toggle" href="#"
|
<a data-toggle="dropdown" class="dropdown-toggle" href="#">Browse Data<b class="caret"></b></a>
|
||||||
>Browse Data<b class="caret"></b
|
|
||||||
></a>
|
|
||||||
<ul role="menu" class="dropdown-menu">
|
<ul role="menu" class="dropdown-menu">
|
||||||
<li>
|
<li><a href="{{ meta.server_url }}/pathway" id="pathwayLink">Pathway</a></li>
|
||||||
<a href="{{ meta.server_url }}/pathway" id="pathwayLink"
|
<li><a href="{{ meta.server_url }}/rule" id="ruleLink">Rule</a></li>
|
||||||
>Pathway</a
|
<li><a href="{{ meta.server_url }}/compound" id="compoundLink">Compound</a></li>
|
||||||
>
|
<li><a href="{{ meta.server_url }}/reaction" id="reactionLink">Reaction</a></li>
|
||||||
</li>
|
<li><a href="{{ meta.server_url }}/model" id="relative-reasoningLink">Model</a></li>
|
||||||
<li>
|
<li><a href="{{ meta.server_url }}/scenario" id="scenarioLink">Scenario</a></li>
|
||||||
<a href="{{ meta.server_url }}/rule" id="ruleLink">Rule</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/compound" id="compoundLink"
|
|
||||||
>Compound</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/reaction" id="reactionLink"
|
|
||||||
>Reaction</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
href="{{ meta.server_url }}/model"
|
|
||||||
id="relative-reasoningLink"
|
|
||||||
>Model</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/scenario" id="scenarioLink"
|
|
||||||
>Scenario</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
{# <li><a href="{{ meta.server_url }}/setting" id="settingLink">Setting</a></li>#}
|
{# <li><a href="{{ meta.server_url }}/setting" id="settingLink">Setting</a></li>#}
|
||||||
{# <li><a href="{{ meta.server_url }}/user" id="userLink">User</a></li>#}
|
{# <li><a href="{{ meta.server_url }}/user" id="userLink">User</a></li>#}
|
||||||
{# <li><a href="{{ meta.server_url }}/group" id="groupLink">Group</a></li>#}
|
{# <li><a href="{{ meta.server_url }}/group" id="groupLink">Group</a></li>#}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul
|
<ul class="nav navbar-nav navbar-right navbar-nav-framework navbar-right-framework">
|
||||||
class="nav navbar-nav navbar-right navbar-nav-framework navbar-right-framework"
|
<li><a href="https://community.envipath.org/" id="communityLink">Community</a></li>
|
||||||
>
|
|
||||||
<li>
|
|
||||||
<a href="https://community.envipath.org/" id="communityLink"
|
|
||||||
>Community</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a data-toggle="dropdown" class="dropdown-toggle" href="#"
|
<a data-toggle="dropdown" class="dropdown-toggle" href="#">Info <b class="caret"></b></a>
|
||||||
>Info <b class="caret"></b
|
|
||||||
></a>
|
|
||||||
<ul role="menu" class="dropdown-menu">
|
<ul role="menu" class="dropdown-menu">
|
||||||
<!--<li><a href="{{ meta.server_url }}/funding" id="fundingLink">Funding</a></li>-->
|
<!--<li><a href="{{ meta.server_url }}/funding" id="fundingLink">Funding</a></li>-->
|
||||||
<li>
|
<li><a href="https://community.envipath.org/t/envipath-license/109" id="licenceLink">Licences</a></li>
|
||||||
<a
|
|
||||||
href="https://community.envipath.org/t/envipath-license/109"
|
|
||||||
id="licenceLink"
|
|
||||||
>Licences</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li>
|
<li><a target="_blank" href="https://wiki.envipath.org/" id="wikiLink">Documentation Wiki</a>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/"
|
|
||||||
id="wikiLink"
|
|
||||||
>Documentation Wiki</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
href="#"
|
|
||||||
id="citeButton"
|
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#citemodal"
|
|
||||||
>How to cite enviPath</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
|
<li><a href="#" id="citeButton" data-toggle="modal" data-target="#citemodal">How to cite
|
||||||
|
enviPath</a></li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a>Version: {{ meta.version }}</a></li>
|
<li><a>Version: {{ meta.version }}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% if meta.user.username == 'anonymous' %}
|
{% if meta.user.username == 'anonymous' %}
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a href="{% url 'login' %}" id="loginButton" style="margin-right:10px">Login</a>
|
||||||
href="{% url 'login' %}"
|
|
||||||
id="loginButton"
|
|
||||||
style="margin-right:10px"
|
|
||||||
>Login</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a
|
<a data-toggle="dropdown" id="loggedInButton" class="dropdown-toggle" id="logedInButton"
|
||||||
data-toggle="dropdown"
|
href="#">
|
||||||
id="loggedInButton"
|
|
||||||
class="dropdown-toggle"
|
|
||||||
id="logedInButton"
|
|
||||||
href="#"
|
|
||||||
>
|
|
||||||
<div id="username">
|
<div id="username">
|
||||||
{{ user.username }}<b class="caret"></b>
|
{{ user.username }}<b class="caret"></b>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<ul role="menu" class="dropdown-menu">
|
<ul role="menu" class="dropdown-menu">
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ meta.user.url }}" id="accountbutton"
|
<a href="{{ meta.user.url }}" id="accountbutton">My Account</a>
|
||||||
>My Account</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<form
|
<form class="navbar-form navbar-left navbar-left-framework" role="logout"
|
||||||
class="navbar-form navbar-left navbar-left-framework"
|
action="{% url 'logout' %}" method="post">
|
||||||
role="logout"
|
|
||||||
action="{% url 'logout' %}"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="hidden" name="logout" value="true" />
|
<input type="hidden" name="logout" value="true">
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-default">
|
<button type="submit" class="btn btn-default">Logout</button>
|
||||||
Logout
|
|
||||||
</button>
|
|
||||||
</form>
|
</form>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@ -318,30 +210,24 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if message %}
|
{% if message %}
|
||||||
<div id="message">{{ message }}</div>
|
<div id="message">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
{% if meta.url_contains_package and meta.current_package.license %}
|
{% if meta.url_contains_package and meta.current_package.license %}
|
||||||
<p></p>
|
<p></p>
|
||||||
<div class="panel-group" id="license_accordion">
|
<div class="panel-group" id="license_accordion">
|
||||||
<div
|
<div class="panel panel-default list-group-item" style="background-color:#f5f5f5">
|
||||||
class="panel panel-default list-group-item"
|
|
||||||
style="background-color:#f5f5f5"
|
|
||||||
>
|
|
||||||
<div class="panel-title">
|
<div class="panel-title">
|
||||||
<a
|
<a data-toggle="collapse" data-parent="#licence_accordion" href="#license">License</a>
|
||||||
data-toggle="collapse"
|
|
||||||
data-parent="#licence_accordion"
|
|
||||||
href="#license"
|
|
||||||
>License</a
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="license" class="panel-collapse in collapse">
|
<div id="license" class="panel-collapse collapse in">
|
||||||
<div class="panel-body list-group-item">
|
<div class="panel-body list-group-item">
|
||||||
<a target="_blank" href="{{ meta.current_package.license.link }}">
|
<a target="_blank" href="{{ meta.current_package.license.link }}">
|
||||||
<img src="{{ meta.current_package.license.image_link }}" />
|
<img src="{{ meta.current_package.license.image_link }}">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -358,32 +244,19 @@
|
|||||||
<ul class="nav nav-pills nav-justified">
|
<ul class="nav nav-pills nav-justified">
|
||||||
<li>
|
<li>
|
||||||
<a href="http://ml.auckland.ac.nz" target="_blank">
|
<a href="http://ml.auckland.ac.nz" target="_blank">
|
||||||
<img
|
<img id="image-uoalogo" height="60" src='{% static "/images/UoA-Logo-Primary-RGB-Small.png" %}'
|
||||||
id="image-uoalogo"
|
alt="The Univserity of Auckland"/>
|
||||||
height="60"
|
|
||||||
src="{% static "/images/UoA-Logo-Primary-RGB-Small.png" %}"
|
|
||||||
alt="The Univserity of Auckland"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://eawag.ch" target="_blank">
|
<a href="https://eawag.ch" target="_blank">
|
||||||
<img
|
<img id="image-ealogo" height="60" src='{% static "/images/ealogo.gif" %}' alt="Eawag"/>
|
||||||
id="image-ealogo"
|
|
||||||
height="60"
|
|
||||||
src="{% static "/images/ealogo.gif" %}"
|
|
||||||
alt="Eawag"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://www.uzh.ch/" target="_blank">
|
<a href="https://www.uzh.ch/" target="_blank">
|
||||||
<img
|
<img id="image-ufzlogo" height="60" src='{% static "/images/uzh-logo.svg" %}'
|
||||||
id="image-ufzlogo"
|
alt="University of Zurich"/>
|
||||||
height="60"
|
|
||||||
src="{% static "/images/uzh-logo.svg" %}"
|
|
||||||
alt="University of Zurich"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -394,9 +267,7 @@
|
|||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<ul class="nav nav-pills nav-justified">
|
<ul class="nav nav-pills nav-justified">
|
||||||
<!-- <li><a href="https://envipath.com/imprint/" target="_blank">Impressum/Imprint</a></li>-->
|
<!-- <li><a href="https://envipath.com/imprint/" target="_blank">Impressum/Imprint</a></li>-->
|
||||||
<li>
|
<li><a href="mailto:admin@envipath.org" target="_blank">Contact</a></li>
|
||||||
<a href="mailto:admin@envipath.org" target="_blank">Contact</a>
|
|
||||||
</li>
|
|
||||||
<!-- <li><a href="http://envipath.com" target="_blank"> enviPath UG (haftungsbeschränkt) & Co. KG ©-->
|
<!-- <li><a href="http://envipath.com" target="_blank"> enviPath UG (haftungsbeschränkt) & Co. KG ©-->
|
||||||
<!-- {{ YEAR }}</a></li>-->
|
<!-- {{ YEAR }}</a></li>-->
|
||||||
</ul>
|
</ul>
|
||||||
@ -408,13 +279,14 @@
|
|||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
// Hide actionsbutton if theres no action defined
|
// Hide actionsbutton if theres no action defined
|
||||||
if ($("#actionsButton ul").children().length > 0) {
|
if ($('#actionsButton ul').children().length > 0) {
|
||||||
$("#actionsButton").show();
|
$('#actionsButton').show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% block modals %}
|
{% block modals %}
|
||||||
{% include "modals/cite_modal.html" %}
|
{% include "modals/cite_modal.html" %}
|
||||||
|
{% include "modals/signup_modal.html" %}
|
||||||
{% include "modals/predict_modal.html" %}
|
{% include "modals/predict_modal.html" %}
|
||||||
{% include "modals/batch_predict_modal.html" %}
|
{% include "modals/batch_predict_modal.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -1,40 +1,29 @@
|
|||||||
<!doctype html>
|
<!DOCTYPE html>
|
||||||
<html data-theme="envipath" lang="en">
|
<html data-theme="envipath" lang="en">
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<head>
|
<head>
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="csrf-token" content="{{ csrf_token }}" />
|
<meta name="csrf-token" content="{{ csrf_token }}">
|
||||||
|
|
||||||
{# Favicon #}
|
{# Favicon #}
|
||||||
<link
|
<link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>
|
||||||
rel="shortcut icon"
|
|
||||||
type="image/png"
|
|
||||||
href="{% static 'images/favicon.ico' %}"
|
|
||||||
/>
|
|
||||||
|
|
||||||
{# Tailwind CSS + DaisyUI Output #}
|
{# Tailwind CSS + DaisyUI Output #}
|
||||||
<link
|
<link href="{% static 'css/output.css' %}" rel="stylesheet" type="text/css"/>
|
||||||
href="{% static 'css/output.css' %}"
|
|
||||||
rel="stylesheet"
|
|
||||||
type="text/css"
|
|
||||||
/>
|
|
||||||
|
|
||||||
{# jQuery - Keep for compatibility with existing JS #}
|
{# jQuery - Keep for compatibility with existing JS #}
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||||
|
|
||||||
{# Font Awesome #}
|
{# Font Awesome #}
|
||||||
<link
|
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
|
||||||
href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
|
|
||||||
{# Discourse embed for community #}
|
{# Discourse embed for community #}
|
||||||
<script src="https://community.envipath.org/javascripts/embed-topics.js"></script>
|
<script src="https://community.envipath.org/javascripts/embed-topics.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const csrftoken = document.querySelector("[name=csrf-token]").content;
|
const csrftoken = document.querySelector('[name=csrf-token]').content;
|
||||||
|
|
||||||
// Setup CSRF header for all jQuery AJAX requests
|
// Setup CSRF header for all jQuery AJAX requests
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
@ -42,7 +31,7 @@
|
|||||||
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
|
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
|
||||||
xhr.setRequestHeader("X-CSRFToken", csrftoken);
|
xhr.setRequestHeader("X-CSRFToken", csrftoken);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -54,25 +43,23 @@
|
|||||||
{% if not debug %}
|
{% if not debug %}
|
||||||
<!-- Matomo -->
|
<!-- Matomo -->
|
||||||
<script>
|
<script>
|
||||||
var _paq = (window._paq = window._paq || []);
|
var _paq = window._paq = window._paq || [];
|
||||||
_paq.push(["trackPageView"]);
|
_paq.push(['trackPageView']);
|
||||||
_paq.push(["enableLinkTracking"]);
|
_paq.push(['enableLinkTracking']);
|
||||||
(function () {
|
(function () {
|
||||||
var u = "//matomo.envipath.com/";
|
var u = "//matomo.envipath.com/";
|
||||||
_paq.push(["setTrackerUrl", u + "matomo.php"]);
|
_paq.push(['setTrackerUrl', u + 'matomo.php']);
|
||||||
_paq.push(["setSiteId", "{{ meta.site_id }}"]);
|
_paq.push(['setSiteId', '{{ meta.site_id }}']);
|
||||||
var d = document,
|
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
|
||||||
g = d.createElement("script"),
|
|
||||||
s = d.getElementsByTagName("script")[0];
|
|
||||||
g.async = true;
|
g.async = true;
|
||||||
g.src = u + "matomo.js";
|
g.src = u + 'matomo.js';
|
||||||
s.parentNode.insertBefore(g, s);
|
s.parentNode.insertBefore(g, s);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<!-- End Matomo Code -->
|
<!-- End Matomo Code -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</head>
|
</head>
|
||||||
<body class="bg-base-300 min-h-screen">
|
<body class="min-h-screen bg-base-300">
|
||||||
{% include "includes/navbar.html" %}
|
{% include "includes/navbar.html" %}
|
||||||
|
|
||||||
{# Main Content Area #}
|
{# Main Content Area #}
|
||||||
@ -80,8 +67,8 @@
|
|||||||
{% block main_content %}
|
{% block main_content %}
|
||||||
{# Breadcrumbs - outside main content, optional #}
|
{# Breadcrumbs - outside main content, optional #}
|
||||||
{% if breadcrumbs %}
|
{% if breadcrumbs %}
|
||||||
<div id="bread" class="mx-auto max-w-7xl px-4 py-4">
|
<div id="bread" class="max-w-7xl mx-auto px-4 py-4">
|
||||||
<div class="breadcrumbs text-sm">
|
<div class="text-sm breadcrumbs">
|
||||||
<ul>
|
<ul>
|
||||||
{% for elem in breadcrumbs %}
|
{% for elem in breadcrumbs %}
|
||||||
{% for name, url in elem.items %}
|
{% for name, url in elem.items %}
|
||||||
@ -98,13 +85,12 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{# Main content container - paper effect on medium+ screens #}
|
{# Main content container - paper effect on medium+ screens #}
|
||||||
<div
|
<div id="docContent" class="w-full xl:w-xl md:mx-auto md:my-8 bg-base-100 md:shadow-2xl md:rounded-lg border-2">
|
||||||
id="docContent"
|
|
||||||
class="bg-base-100 mx-auto md:my-8 md:max-w-6xl md:rounded-lg md:shadow-xl"
|
|
||||||
>
|
|
||||||
{# Messages - inside paper #}
|
{# Messages - inside paper #}
|
||||||
{% if message %}
|
{% if message %}
|
||||||
<div id="message" class="alert alert-info m-4">{{ message }}</div>
|
<div id="message" class="alert alert-info m-4">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{# Page content - no enforced styles #}
|
{# Page content - no enforced styles #}
|
||||||
@ -113,18 +99,14 @@
|
|||||||
|
|
||||||
{# License - inside paper if present #}
|
{# License - inside paper if present #}
|
||||||
{% if meta.url_contains_package and meta.current_package.license %}
|
{% if meta.url_contains_package and meta.current_package.license %}
|
||||||
<div class="collapse-arrow bg-base-200 collapse p-8">
|
<div class="collapse collapse-arrow bg-base-200 m-8">
|
||||||
<input type="checkbox" checked />
|
<input type="checkbox" checked />
|
||||||
<div class="collapse-title text-xl font-medium">License</div>
|
<div class="collapse-title text-xl font-medium">
|
||||||
|
License
|
||||||
|
</div>
|
||||||
<div class="collapse-content">
|
<div class="collapse-content">
|
||||||
<a
|
<a target="_blank" href="{{ meta.current_package.license.link }}">
|
||||||
target="_blank"
|
<img src="{{ meta.current_package.license.image_link }}" alt="License">
|
||||||
href="{{ meta.current_package.license.link }}"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="{{ meta.current_package.license.image_link }}"
|
|
||||||
alt="License"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -137,73 +119,44 @@
|
|||||||
|
|
||||||
{# Floating Help Tab #}
|
{# Floating Help Tab #}
|
||||||
{% if not public_mode %}
|
{% if not public_mode %}
|
||||||
<div class="fixed top-1/2 right-0 z-50 -translate-y-1/2">
|
<div class="fixed right-0 top-1/2 -translate-y-1/2 z-50">
|
||||||
<a
|
<a href="https://community.envipath.org/" target="_blank"
|
||||||
href="https://community.envipath.org/"
|
class="flex items-center justify-center btn btn-secondary hover:btn-secondary-focus text-secondary-content text-sm shadow-lg transition-all duration-300 hover:scale-105 hover:-translate-x-1"
|
||||||
target="_blank"
|
title="Get Help from the Community">
|
||||||
class="btn btn-secondary hover:btn-secondary-focus text-secondary-content flex items-center justify-center text-sm shadow-lg transition-all duration-300 hover:-translate-x-1 hover:scale-105"
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-circle-question-mark-icon lucide-message-circle-question-mark"><path d="M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
|
||||||
title="Get Help from the Community"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="lucide lucide-message-circle-question-mark-icon lucide-message-circle-question-mark"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"
|
|
||||||
/>
|
|
||||||
<path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" />
|
|
||||||
<path d="M12 17h.01"/>
|
<path d="M12 17h.01"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{# Modals - TODO: Convert these to DaisyUI modals #}
|
||||||
{% block modals %}
|
{% block modals %}
|
||||||
{% include "modals/search_modal.html" %}
|
{# Note: These modals still use Bootstrap markup and will need conversion #}
|
||||||
|
{% include "modals/cite_modal.html" %}
|
||||||
|
{% include "modals/signup_modal.html" %}
|
||||||
|
{% include "modals/predict_modal.html" %}
|
||||||
|
{% include "modals/batch_predict_modal.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
// Hide actionsbutton if there's no action defined
|
// Hide actionsbutton if there's no action defined
|
||||||
if ($("#actionsButton ul").children().length > 0) {
|
if ($('#actionsButton ul').children().length > 0) {
|
||||||
$("#actionsButton").show();
|
$('#actionsButton').show();
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Open search modal function
|
|
||||||
function openSearchModal() {
|
|
||||||
const searchModal = document.getElementById("search_modal");
|
|
||||||
if (searchModal) {
|
|
||||||
searchModal.showModal();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Click handler for search badge
|
|
||||||
const searchTrigger = document.getElementById("search-trigger");
|
|
||||||
if (searchTrigger) {
|
|
||||||
searchTrigger.addEventListener("click", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
openSearchModal();
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
// Global keyboard shortcut for search (Cmd+K on Mac, Ctrl+K on Windows/Linux)
|
// Global keyboard shortcut for search (Cmd+K on Mac, Ctrl+K on Windows/Linux)
|
||||||
document.addEventListener("keydown", function (event) {
|
document.addEventListener('keydown', function(event) {
|
||||||
// Check if user is typing in an input field
|
// Check if user is typing in an input field
|
||||||
const activeElement = document.activeElement;
|
const activeElement = document.activeElement;
|
||||||
const isInputField =
|
const isInputField = activeElement && (
|
||||||
activeElement &&
|
activeElement.tagName === 'INPUT' ||
|
||||||
(activeElement.tagName === "INPUT" ||
|
activeElement.tagName === 'TEXTAREA' ||
|
||||||
activeElement.tagName === "TEXTAREA" ||
|
activeElement.contentEditable === 'true'
|
||||||
activeElement.contentEditable === "true");
|
);
|
||||||
|
|
||||||
if (isInputField) {
|
if (isInputField) {
|
||||||
return; // Don't trigger shortcut when typing in input fields
|
return; // Don't trigger shortcut when typing in input fields
|
||||||
@ -213,9 +166,9 @@
|
|||||||
const isMac = /Mac/.test(navigator.platform);
|
const isMac = /Mac/.test(navigator.platform);
|
||||||
const isCorrectModifier = isMac ? event.metaKey : event.ctrlKey;
|
const isCorrectModifier = isMac ? event.metaKey : event.ctrlKey;
|
||||||
|
|
||||||
if (isCorrectModifier && event.key === "k") {
|
if (isCorrectModifier && event.key === 'k') {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
openSearchModal();
|
window.location.href = '/search';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,20 +1,17 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<div class="bg-base-300 text-base-content mx-auto mt-10 lg:max-w-5xl">
|
<div class="lg:max-w-5xl mt-10 mx-auto bg-base-300 text-base-content">
|
||||||
|
|
||||||
<footer class="footer sm:footer-horizontal p-10">
|
<footer class="footer sm:footer-horizontal p-10">
|
||||||
{% if not public_mode %}
|
{% if not public_mode %}
|
||||||
<nav>
|
<nav>
|
||||||
<h6 class="footer-title">Services</h6>
|
<h6 class="footer-title">Services</h6>
|
||||||
<a class="link link-hover" href="/predict">Predict</a>
|
<a class="link link-hover" href="/">Predict</a>
|
||||||
<a class="link link-hover" href="/package">Packages</a>
|
<a class="link link-hover" href="/search">Search</a>
|
||||||
|
<a class="link link-hover" href="/package">Browse</a>
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<a class="link link-hover" href="/model">Your Collections</a>
|
<a class="link link-hover" href="/model">Your Collections</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a
|
<a href="https://wiki.envipath.org/" target="_blank" class="link link-hover">Documentation</a>
|
||||||
href="https://wiki.envipath.org/"
|
|
||||||
target="_blank"
|
|
||||||
class="link link-hover"
|
|
||||||
>Documentation</a
|
|
||||||
>
|
|
||||||
</nav>
|
</nav>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<nav>
|
<nav>
|
||||||
@ -32,61 +29,39 @@
|
|||||||
<a class="link link-hover" href="/cite">Cite enviPath</a>
|
<a class="link link-hover" href="/cite">Cite enviPath</a>
|
||||||
</nav>
|
</nav>
|
||||||
</footer>
|
</footer>
|
||||||
<footer class="footer border-t-2 border-neutral-300 px-10 py-4">
|
<footer class="footer border-neutral-300 border-t-2 px-10 py-4">
|
||||||
<div class="flex w-full flex-row items-start justify-between">
|
<div class="flex flex-row justify-between w-full items-start">
|
||||||
<aside class="grid-flow-col items-center">
|
<aside class="grid-flow-col items-center">
|
||||||
<svg
|
<svg class="fill-neutral-content flex-shrink-0 h-14 m-2" viewbox="0 0 65 65" >
|
||||||
class="fill-neutral-content m-2 h-14 flex-shrink-0"
|
|
||||||
viewbox="0 0 65 65"
|
|
||||||
>
|
|
||||||
<use
|
<use
|
||||||
href="{% static "/images/logo-square.svg" %}#ep-logo-square"
|
href="{% static "/images/logo-square.svg" %}#ep-logo-square"
|
||||||
></use>
|
>
|
||||||
|
</use>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
enviPath Ltd.
|
enviPath Ltd.
|
||||||
<br />
|
<br />
|
||||||
Biodegredation prediction since 2015.
|
Biodegredation prediction since 2015.
|
||||||
|
</p>
|
||||||
</aside>
|
</aside>
|
||||||
<aside class="text-base-200 mt-2 text-sm">
|
<aside class="text-sm text-base-200 mt-2"><span class="text-xs tracking-tight">Version</span> <span class="text-base font-bold">{{ meta.version }}</span></aside>
|
||||||
<span class="text-xs tracking-tight">Version</span>
|
|
||||||
<span class="text-base font-bold">{{ meta.version }}</span>
|
|
||||||
</aside>
|
|
||||||
</div>
|
</div>
|
||||||
<nav class="md:place-self-center md:justify-self-end">
|
<nav class="md:place-self-center md:justify-self-end">
|
||||||
<div class="grid grid-flow-col gap-4">
|
<div class="grid grid-flow-col gap-4">
|
||||||
<a href="https://www.youtube.com/@envipath7231" target="_blank">
|
<a href="https://www.youtube.com/@envipath7231" target="_blank">
|
||||||
<svg
|
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 fill-current">
|
||||||
role="img"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="h-6 w-6 fill-current"
|
|
||||||
>
|
|
||||||
<title>YouTube</title>
|
<title>YouTube</title>
|
||||||
<path
|
<path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/>
|
||||||
d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"
|
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://community.envipath.org/" target="_blank">
|
<a href="https://community.envipath.org/" target="_blank">
|
||||||
<svg
|
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 fill-current">
|
||||||
role="img"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="h-6 w-6 fill-current"
|
|
||||||
>
|
|
||||||
<title>Discourse</title>
|
<title>Discourse</title>
|
||||||
<path
|
<path d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563c-2.593-.003-4.996 1.352-6.337 3.57-1.33 2.208-1.387 4.957-.148 7.22L4.4 19.61l4.794-1.074c2.745 1.225 5.965.676 8.136-1.39 2.17-2.054 2.86-5.228 1.737-7.997-1.135-2.778-3.84-4.59-6.84-4.585h-.008z"/>
|
||||||
d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563c-2.593-.003-4.996 1.352-6.337 3.57-1.33 2.208-1.387 4.957-.148 7.22L4.4 19.61l4.794-1.074c2.745 1.225 5.965.676 8.136-1.39 2.17-2.054 2.86-5.228 1.737-7.997-1.135-2.778-3.84-4.59-6.84-4.585h-.008z"
|
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.linkedin.com/company/envipath/" target="_blank">
|
<a href="https://www.linkedin.com/company/envipath/" target="_blank">
|
||||||
<img
|
<img src="{% static "/images/linkedin.png" %}" alt="LinkedIn" class="w-6 h-6">
|
||||||
src="{% static "/images/linkedin.png" %}"
|
|
||||||
alt="LinkedIn"
|
|
||||||
class="h-6 w-6"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@ -1,58 +1,28 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
{# Modern DaisyUI Navbar #}
|
{# Modern DaisyUI Navbar #}
|
||||||
<div class="navbar x-50 bg-neutral-50 text-neutral-950 shadow-lg">
|
<div class="navbar bg-neutral-50 text-neutral-950 shadow-lg x-50">
|
||||||
<div class="navbar-start">
|
<div class="navbar-start">
|
||||||
<a href="{{ meta.server_url }}" class="btn btn-ghost text-xl normal-case">
|
<a href="{{ meta.server_url }}" class="btn btn-ghost normal-case text-xl">
|
||||||
<svg class="fill-base-content h-8" viewBox="0 0 104 26" role="img">
|
<svg class="h-8 fill-base-content" viewBox="0 0 104 26" role="img">
|
||||||
<use href="{% static "/images/logo-name.svg" %}#ep-logo-name" />
|
<use href='{% static "/images/logo-name.svg" %}#ep-logo-name' />
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if not public_mode %}
|
{% if not public_mode %}
|
||||||
<div class="navbar-center hidden lg:flex">
|
<div class="navbar-center hidden lg:flex">
|
||||||
<a
|
<a href="#" role="button" class="btn btn-ghost" id="predictLink">Predict</a>
|
||||||
href="{{ meta.server_url }}/predict"
|
|
||||||
role="button"
|
|
||||||
class="btn btn-ghost"
|
|
||||||
id="predictLink"
|
|
||||||
>Predict</a
|
|
||||||
>
|
|
||||||
<!-- <li><a href="{{ meta.server_url }}/package" id="packageLink">Package</a></li> -->
|
<!-- <li><a href="{{ meta.server_url }}/package" id="packageLink">Package</a></li> -->
|
||||||
<!--<li><a href="{{ meta.server_url }}/browse" id="browseLink">Browse</a></li>-->
|
<!--<li><a href="{{ meta.server_url }}/browse" id="browseLink">Browse</a></li>-->
|
||||||
<div class="dropdown dropdown-center">
|
<div class="dropdown dropdown-center">
|
||||||
<div tabindex="0" role="button" class="btn btn-ghost">Browse</div>
|
<div tabindex="0" role="button" class="btn btn-ghost">Browse</div>
|
||||||
<ul
|
<ul tabindex="-1" class="dropdown-content menu bg-base-100 rounded-box z-1 w-52 p-2 shadow-sm">
|
||||||
tabindex="-1"
|
<li><a href="{{ meta.server_url }}/pathway" id="pathwayLink">Pathway</a></li>
|
||||||
class="dropdown-content menu bg-base-100 rounded-box z-1 w-52 p-2 shadow-sm"
|
|
||||||
>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/package" id="packageLink">Package</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/pathway" id="pathwayLink">Pathway</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="{{ meta.server_url }}/rule" id="ruleLink">Rule</a></li>
|
<li><a href="{{ meta.server_url }}/rule" id="ruleLink">Rule</a></li>
|
||||||
<li>
|
<li><a href="{{ meta.server_url }}/compound" id="compoundLink">Compound</a></li>
|
||||||
<a href="{{ meta.server_url }}/compound" id="compoundLink"
|
<li><a href="{{ meta.server_url }}/reaction" id="reactionLink">Reaction</a></li>
|
||||||
>Compound</a
|
<li><a href="{{ meta.server_url }}/model" id="relative-reasoningLink">Model</a></li>
|
||||||
>
|
<li><a href="{{ meta.server_url }}/scenario" id="scenarioLink">Scenario</a></li>
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/reaction" id="reactionLink"
|
|
||||||
>Reaction</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/model" id="relative-reasoningLink"
|
|
||||||
>Model</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ meta.server_url }}/scenario" id="scenarioLink"
|
|
||||||
>Scenario</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -60,25 +30,9 @@
|
|||||||
|
|
||||||
<div class="navbar-end">
|
<div class="navbar-end">
|
||||||
{% if not public_mode %}
|
{% if not public_mode %}
|
||||||
<a id="search-trigger" role="button" class="cursor-pointer">
|
<a href="/search" role="button" >
|
||||||
<div
|
<div class="flex items-center badge badge-dash space-x-1 bg-base-200 text-base-content/50 p-2 m-1">
|
||||||
class="badge badge-dash bg-base-200 text-base-content/50 m-1 flex items-center space-x-1 p-2"
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search-icon lucide-search"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="lucide lucide-search-icon lucide-search"
|
|
||||||
>
|
|
||||||
<path d="m21 21-4.34-4.34" />
|
|
||||||
<circle cx="11" cy="11" r="8" />
|
|
||||||
</svg>
|
|
||||||
<span id="search-shortcut">⌘K</span>
|
<span id="search-shortcut">⌘K</span>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@ -87,50 +41,17 @@
|
|||||||
<a href="{% url 'login' %}" id="loginButton" class="p-2">Login</a>
|
<a href="{% url 'login' %}" id="loginButton" class="p-2">Login</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="dropdown dropdown-end">
|
<div class="dropdown dropdown-end">
|
||||||
<div
|
<div tabindex="0" role="button" class="btn btn-ghost m-1 btn-circle" id="loggedInButton">
|
||||||
tabindex="0"
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-user-icon lucide-circle-user"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="10" r="3"/><path d="M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662"/></svg>
|
||||||
role="button"
|
|
||||||
class="btn btn-ghost btn-circle m-1"
|
|
||||||
id="loggedInButton"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="lucide lucide-circle-user-icon lucide-circle-user"
|
|
||||||
>
|
|
||||||
<circle cx="12" cy="12" r="10" />
|
|
||||||
<circle cx="12" cy="10" r="3" />
|
|
||||||
<path d="M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662" />
|
|
||||||
</svg>
|
|
||||||
</div>
|
</div>
|
||||||
<ul
|
<ul tabindex="-1" class="dropdown-content menu bg-base-100 rounded-box z-50 w-52 p-2 shadow-sm">
|
||||||
tabindex="-1"
|
|
||||||
class="dropdown-content menu bg-base-100 rounded-box z-50 w-52 p-2 shadow-sm"
|
|
||||||
>
|
|
||||||
<li><a href="{{ meta.user.url }}" id="accountbutton">Settings</a></li>
|
<li><a href="{{ meta.user.url }}" id="accountbutton">Settings</a></li>
|
||||||
<li>
|
<li>
|
||||||
<form
|
<form id="logoutForm" action="{% url 'logout' %}" method="post" style="display: none;">
|
||||||
id="logoutForm"
|
|
||||||
action="{% url 'logout' %}"
|
|
||||||
method="post"
|
|
||||||
style="display: none;"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="logout" value="true" />
|
<input type="hidden" name="logout" value="true">
|
||||||
</form>
|
</form>
|
||||||
<a
|
<a href="#" id="logoutButton" onclick="event.preventDefault(); document.getElementById('logoutForm').submit();">Logout</a>
|
||||||
href="#"
|
|
||||||
id="logoutButton"
|
|
||||||
onclick="event.preventDefault(); document.getElementById('logoutForm').submit();"
|
|
||||||
>Logout</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -142,9 +63,9 @@
|
|||||||
// OS-aware search shortcut display
|
// OS-aware search shortcut display
|
||||||
(function() {
|
(function() {
|
||||||
const isMac = /Mac/.test(navigator.platform);
|
const isMac = /Mac/.test(navigator.platform);
|
||||||
const shortcutElement = document.getElementById("search-shortcut");
|
const shortcutElement = document.getElementById('search-shortcut');
|
||||||
if (shortcutElement) {
|
if (shortcutElement) {
|
||||||
shortcutElement.textContent = isMac ? "⌘K" : "Ctrl+K";
|
shortcutElement.textContent = isMac ? '⌘K' : 'Ctrl+K';
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,45 +1,34 @@
|
|||||||
{% extends "framework_modern.html" %}
|
{% extends "framework_modern.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block main_content %}
|
{% block main_content %}
|
||||||
|
|
||||||
<!-- Hero Section with Logo and Search -->
|
<!-- Hero Section with Logo and Search -->
|
||||||
<section class="hero relative mx-auto h-fit w-full max-w-5xl shadow-none">
|
<section class="hero h-fit max-w-5xl w-full shadow-none mx-auto relative">
|
||||||
<div
|
|
||||||
class="hero from-primary-800 to-primary-600 min-h-[calc(100vh*0.4)] bg-gradient-to-br"
|
<div class="hero min-h-[calc(100vh*0.4)] bg-gradient-to-br from-primary-800 to-primary-600"
|
||||||
style="background-image: url('{% static "/images/hero.png" %}'); background-size: cover; background-position: center;"
|
style="background-image: url('{% static "/images/hero.png" %}'); background-size: cover; background-position: center;"
|
||||||
>
|
>
|
||||||
<div class="hero-overlay"></div>
|
<div class="hero-overlay"></div>
|
||||||
<!-- Predict Pathway text over the image -->
|
<!-- Predict Pathway text over the image -->
|
||||||
<div class="absolute bottom-40 left-1/8 z-10 -translate-x-8">
|
<div class="absolute bottom-40 left-1/8 -translate-x-8 z-10">
|
||||||
<h2 class="text-base-100 text-left text-3xl text-shadow-lg">
|
<h2 class="text-3xl text-base-100 text-shadow-lg text-left">Predict Your Pathway</h2>
|
||||||
Predict Your Pathway
|
|
||||||
</h2>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div class="bg-base-200 mx-auto max-w-5xl shadow-md">
|
<div class="shadow-md max-w-5xl mx-auto bg-base-200">
|
||||||
|
|
||||||
<!-- Predict Pathway Section -->
|
<!-- Predict Pathway Section -->
|
||||||
<div
|
<div class="flex-col lg:flex-row-reverse w-full mx-auto -mt-32 relative z-20 mb-10 ">
|
||||||
class="relative z-20 mx-auto -mt-32 mb-10 w-full flex-col lg:flex-row-reverse"
|
<div class="card bg-base-100 shrink-0 shadow-xl w-3/4 mx-auto transition-all duration-300 ease-in-out">
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="card bg-base-100 mx-auto w-3/4 shrink-0 shadow-xl transition-all duration-300 ease-in-out"
|
|
||||||
>
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="my-4 ml-8 flex h-fit flex-row items-center justify-start">
|
<!-- Input Mode Toggle - Fixed position outside fieldset -->
|
||||||
<div class="flex items-center gap-1">
|
<div class="flex flex-row justify-start items-center h-fit ml-8 my-4">
|
||||||
<label class="swap btn btn-ghost btn-sm p-1" title="Input Mode">
|
<div class="flex items-center gap-2">
|
||||||
|
<!-- <span class="text-sm text-neutral-500">Input Mode:</span> -->
|
||||||
|
<label class="toggle text-base-content toggle-md">
|
||||||
<input type="checkbox" />
|
<input type="checkbox" />
|
||||||
<span class="swap-on flex items-center gap-1">
|
<svg aria-label="smiles mode" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="size-5">
|
||||||
<div
|
|
||||||
class="bg-neutral/50 text-neutral-content flex items-center justify-center rounded-full p-1"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
aria-label="smiles mode"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 20 20"
|
|
||||||
class="size-5"
|
|
||||||
>
|
|
||||||
<g
|
<g
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
@ -47,20 +36,9 @@
|
|||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
stroke="none"
|
stroke="none"
|
||||||
>
|
>
|
||||||
<path
|
<path fill-rule="evenodd" d="M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z" clip-rule="evenodd" />
|
||||||
fill-rule="evenodd"
|
|
||||||
d="M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
/>
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
|
||||||
<span class="ext-xs">SMILES</span>
|
|
||||||
</span>
|
|
||||||
<span class="swap-off flex items-center gap-1">
|
|
||||||
<div
|
|
||||||
class="bg-neutral/50 text-neutral-content flex items-center justify-center rounded-full p-1"
|
|
||||||
>
|
|
||||||
<svg
|
<svg
|
||||||
aria-label="draw mode"
|
aria-label="draw mode"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -69,118 +47,63 @@
|
|||||||
stroke="none"
|
stroke="none"
|
||||||
class="size-5"
|
class="size-5"
|
||||||
>
|
>
|
||||||
<path
|
<path d="m2.695 14.762-1.262 3.155a.5.5 0 0 0 .65.65l3.155-1.262a4 4 0 0 0 1.343-.886L17.5 5.501a2.121 2.121 0 0 0-3-3L3.58 13.419a4 4 0 0 0-.885 1.343Z" />
|
||||||
d="m2.695 14.762-1.262 3.155a.5.5 0 0 0 .65.65l3.155-1.262a4 4 0 0 0 1.343-.886L17.5 5.501a2.121 2.121 0 0 0-3-3L3.58 13.419a4 4 0 0 0-.885 1.343Z"
|
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
|
||||||
<span class="text-base/50 text-xs">Draw</span>
|
|
||||||
</span>
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<fieldset
|
<fieldset class="fieldset transition-all duration-300 ease-in-out overflow-hidden">
|
||||||
class="fieldset overflow-hidden transition-all duration-300 ease-in-out"
|
<form id="index-form" action="{{ meta.current_package.url }}/pathway" method="POST">
|
||||||
>
|
|
||||||
<form
|
|
||||||
id="index-form"
|
|
||||||
action="{{ meta.current_package.url }}/pathway"
|
|
||||||
method="POST"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div
|
<div id="text-input-container" class="transition-all duration-300 ease-in-out opacity-100 transform scale-100">
|
||||||
id="text-input-container"
|
<div class="join w-full mx-auto">
|
||||||
class="scale-100 transform opacity-100 transition-all duration-300 ease-in-out"
|
<input type="text" id="index-form-text-input" placeholder="canonical SMILES string" class="input grow input-md join-item" />
|
||||||
>
|
|
||||||
<div class="join mx-auto w-full">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
id="index-form-text-input"
|
|
||||||
placeholder="canonical SMILES string"
|
|
||||||
class="input input-md join-item grow"
|
|
||||||
/>
|
|
||||||
<button class="btn btn-neutral join-item">Predict!</button>
|
<button class="btn btn-neutral join-item">Predict!</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="label relative mt-1 w-full">
|
<div class="label relative w-full mt-1" >
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<a
|
<a href="#" class="example-link cursor-pointer hover:text-primary"
|
||||||
href="#"
|
|
||||||
class="example-link hover:text-primary cursor-pointer"
|
|
||||||
data-smiles="CN1C=NC2=C1C(=O)N(C(=O)N2C)C"
|
data-smiles="CN1C=NC2=C1C(=O)N(C(=O)N2C)C"
|
||||||
title="load example"
|
title="load example">Caffeine</a>
|
||||||
>Caffeine</a
|
<a href="#" class="example-link cursor-pointer hover:text-primary"
|
||||||
>
|
|
||||||
<a
|
|
||||||
href="#"
|
|
||||||
class="example-link hover:text-primary cursor-pointer"
|
|
||||||
data-smiles="CC(C)CC1=CC=C(C=C1)C(C)C(=O)O"
|
data-smiles="CC(C)CC1=CC=C(C=C1)C(C)C(=O)O"
|
||||||
title="load example"
|
title="load example">Ibuprofen</a>
|
||||||
>Ibuprofen</a
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<a class="absolute top-0 left-[calc(100%-5.4rem)]" href="#"
|
<a class="absolute top-0 left-[calc(100%-5.4rem)]" href="#">Advanced</a>
|
||||||
>Advanced</a
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div id="ketcher-container" class="hidden w-full transition-all duration-300 ease-in-out opacity-0 transform scale-95">
|
||||||
id="ketcher-container"
|
<iframe id="index-ketcher" src="{% static '/js/ketcher2/ketcher.html' %}"
|
||||||
class="hidden w-full scale-95 transform opacity-0 transition-all duration-300 ease-in-out"
|
width="100%" height="400" class="rounded-lg"></iframe>
|
||||||
>
|
<button class="btn btn-lg bg-primary-950 text-primary-50 join-item w-full mt-2">Predict!</button>
|
||||||
<iframe
|
<a class="label mx-auto w-full mt-1" href="#">Advanced</a>
|
||||||
id="index-ketcher"
|
|
||||||
src="{% static '/js/ketcher2/ketcher.html' %}"
|
|
||||||
width="100%"
|
|
||||||
height="400"
|
|
||||||
class="rounded-lg"
|
|
||||||
></iframe>
|
|
||||||
<button
|
|
||||||
class="btn btn-lg bg-primary-950 text-primary-50 join-item mt-2 w-full"
|
|
||||||
>
|
|
||||||
Predict!
|
|
||||||
</button>
|
|
||||||
<div class="mt-1 flex w-full justify-end">
|
|
||||||
<a class="label justify-end" href="/predict">Advanced</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<input type="hidden" id="index-form-smiles" name="smiles" value="smiles">
|
||||||
<input
|
<input type="hidden" id="index-form-predict" name="predict" value="predict">
|
||||||
type="hidden"
|
<input type="hidden" id="current-action" value="predict">
|
||||||
id="index-form-smiles"
|
|
||||||
name="smiles"
|
|
||||||
value="smiles"
|
|
||||||
/>
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
id="index-form-predict"
|
|
||||||
name="predict"
|
|
||||||
value="predict"
|
|
||||||
/>
|
|
||||||
<input type="hidden" id="current-action" value="predict" />
|
|
||||||
</form>
|
</form>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Community News Section -->
|
|
||||||
<section class="bg-base-200 z-10 mx-8 py-16">
|
|
||||||
<div class="mx-auto max-w-7xl px-4">
|
|
||||||
<h2 class="h2 mb-8 text-left font-bold">Community Updates</h2>
|
|
||||||
|
|
||||||
<div id="community-news-container" class="flex justify-center gap-4">
|
<!-- Community News Section -->
|
||||||
|
<section class="py-16 bg-base-200 z-10 mx-8">
|
||||||
|
<div class="max-w-7xl mx-auto px-4">
|
||||||
|
<h2 class="h2 font-bold text-left mb-8">Community Updates</h2>
|
||||||
|
|
||||||
|
<div id="community-news-container" class="flex gap-4 justify-center">
|
||||||
<!-- News cards will be populated here -->
|
<!-- News cards will be populated here -->
|
||||||
<div id="loading" class="flex w-full justify-center">
|
<div id="loading" class="flex justify-center w-full">
|
||||||
<span class="loading loading-spinner loading-lg"></span>
|
<span class="loading loading-spinner loading-lg"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-6 text-right">
|
<div class="text-right mt-6">
|
||||||
<a
|
<a href="https://community.envipath.org/c/announcements/10" target="_blank" class="btn btn-ghost btn-sm">
|
||||||
href="https://community.envipath.org/c/announcements/10"
|
|
||||||
target="_blank"
|
|
||||||
class="btn btn-ghost btn-sm"
|
|
||||||
>
|
|
||||||
Read More Announcements
|
Read More Announcements
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -191,18 +114,14 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Mission Statement Section -->
|
<!-- Mission Statement Section -->
|
||||||
<section class="from-base-200 to-base-100 bg-gradient-to-b py-16">
|
<section class="py-16 from-base-200 to-base-100 bg-gradient-to-b">
|
||||||
<div class="mx-auto px-8 md:px-12">
|
<div class="mx-auto px-8 md:px-12">
|
||||||
<div class="flex flex-row gap-4">
|
<div class="flex flex-row gap-4">
|
||||||
<div class="w-1/3">
|
<div class="w-1/3">
|
||||||
<img
|
<img src="{% static "/images/ep-rule-artwork.png" %}" alt="rule-based iterative tree greneration" class="w-full h-full object-contain" />
|
||||||
src="{% static "/images/ep-rule-artwork.png" %}"
|
|
||||||
alt="rule-based iterative tree greneration"
|
|
||||||
class="h-full w-full object-contain"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="mr-8 w-2/3 space-y-4 text-left">
|
<div class="space-y-4 text-left w-2/3 mr-8">
|
||||||
<h2 class="h2 mb-8 font-bold">About enviPath</h2>
|
<h2 class="h2 font-bold mb-8">About enviPath</h2>
|
||||||
<p class="">
|
<p class="">
|
||||||
enviPath is a database and prediction system for the microbial
|
enviPath is a database and prediction system for the microbial
|
||||||
biotransformation of organic environmental contaminants. The
|
biotransformation of organic environmental contaminants. The
|
||||||
@ -210,47 +129,35 @@
|
|||||||
observed biotransformation pathways.
|
observed biotransformation pathways.
|
||||||
</p>
|
</p>
|
||||||
<p class="">
|
<p class="">
|
||||||
The pathway prediction system provides different relative
|
The pathway prediction system provides different relative reasoning models
|
||||||
reasoning models to predict likely biotransformation pathways and
|
to predict likely biotransformation pathways and products. Explore our tools
|
||||||
products. Explore our tools and contribute to advancing
|
and contribute to advancing environmental biotransformation research.
|
||||||
environmental biotransformation research.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="float-right flex flex-row gap-4">
|
<div class="flex flex-row gap-4 float-right">
|
||||||
<a href="/about" class="btn btn-ghost-neutral">Read More</a>
|
<a href="/about" class="btn btn-ghost-neutral">Read More</a>
|
||||||
<a href="/about" class="btn btn-neutral">Publications</a>
|
<a href="/about" class="btn btn-neutral">Publications</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Partners Section -->
|
<!-- Partners Section -->
|
||||||
<section class="bg-base-100 py-14 sm:py-12">
|
<section class="py-14 sm:py-12 bg-base-100">
|
||||||
<div class="mx-auto px-6 lg:px-8">
|
<div class="mx-auto px-6 lg:px-8">
|
||||||
<div class="divider">
|
<div class="divider"><h2 class="text-center text-lg/8 font-semibold">Backed by Science</h2></div>
|
||||||
<h2 class="text-center text-lg/8 font-semibold">Backed by Science</h2>
|
<div class="mx-auto mt-10 grid max-w-lg grid-cols-4 items-center gap-x-8 gap-y-10 sm:max-w-xl sm:grid-cols-6 sm:gap-x-10 lg:mx-0 lg:max-w-none lg:grid-cols-3">
|
||||||
</div>
|
<img src="{% static "/images/uoa-logo-small.png" %}" alt="The University of Auckland" class=" max-h-20 w-full object-contain lg:col-span-1" />
|
||||||
<div
|
<img src="{% static "/images/logo-eawag.svg" %}" alt="Eawag" class=" max-h-12 w-full object-contain lg:col-span-1" />
|
||||||
class="mx-auto mt-10 grid max-w-lg grid-cols-4 items-center gap-x-8 gap-y-10 sm:max-w-xl sm:grid-cols-6 sm:gap-x-10 lg:mx-0 lg:max-w-none lg:grid-cols-3"
|
<img src="{% static "/images/uzh-logo.svg" %}" alt="University of Zurich" class="2 max-h-16 w-full object-contain lg:col-span-1" />
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="{% static "/images/uoa-logo-small.png" %}"
|
|
||||||
alt="The University of Auckland"
|
|
||||||
class="max-h-20 w-full object-contain lg:col-span-1"
|
|
||||||
/>
|
|
||||||
<img
|
|
||||||
src="{% static "/images/logo-eawag.svg" %}"
|
|
||||||
alt="Eawag"
|
|
||||||
class="max-h-12 w-full object-contain lg:col-span-1"
|
|
||||||
/>
|
|
||||||
<img
|
|
||||||
src="{% static "/images/uzh-logo.svg" %}"
|
|
||||||
alt="University of Zurich"
|
|
||||||
class="2 max-h-16 w-full object-contain lg:col-span-1"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script language="javascript">
|
<script language="javascript">
|
||||||
@ -260,16 +167,16 @@
|
|||||||
|
|
||||||
// Function to render Discourse topics into cards
|
// Function to render Discourse topics into cards
|
||||||
function renderDiscourseTopics(topics) {
|
function renderDiscourseTopics(topics) {
|
||||||
const container = document.getElementById("community-news-container");
|
const container = document.getElementById('community-news-container');
|
||||||
if (!container) return;
|
if (!container) return;
|
||||||
|
|
||||||
// Clear container
|
// Clear container
|
||||||
container.innerHTML = "";
|
container.innerHTML = '';
|
||||||
|
|
||||||
// Create cards for each topic
|
// Create cards for each topic
|
||||||
topics.forEach((topic) => {
|
topics.forEach(topic => {
|
||||||
const card = createDiscourseCard(topic);
|
const card = createDiscourseCard(topic);
|
||||||
container.insertAdjacentHTML("beforeend", card);
|
container.insertAdjacentHTML('beforeend', card);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,53 +223,53 @@
|
|||||||
// Toggle functionality with smooth animations
|
// Toggle functionality with smooth animations
|
||||||
function toggleInputMode() {
|
function toggleInputMode() {
|
||||||
const toggle = $('input[type="checkbox"]');
|
const toggle = $('input[type="checkbox"]');
|
||||||
const textContainer = $("#text-input-container");
|
const textContainer = $('#text-input-container');
|
||||||
const ketcherContainer = $("#ketcher-container");
|
const ketcherContainer = $('#ketcher-container');
|
||||||
const formCard = $(".card");
|
const formCard = $('.card');
|
||||||
const fieldset = $(".fieldset");
|
const fieldset = $('.fieldset');
|
||||||
|
|
||||||
if (toggle.is(":checked")) {
|
if (toggle.is(':checked')) {
|
||||||
// Draw mode - show Ketcher, hide text input
|
// Draw mode - show Ketcher, hide text input
|
||||||
textContainer.addClass("opacity-0 transform scale-95");
|
textContainer.addClass('opacity-0 transform scale-95');
|
||||||
textContainer.removeClass("opacity-100 transform scale-100");
|
textContainer.removeClass('opacity-100 transform scale-100');
|
||||||
|
|
||||||
// Adjust fieldset padding for Ketcher mode - reduce padding and make more compact
|
// Adjust fieldset padding for Ketcher mode - reduce padding and make more compact
|
||||||
fieldset.removeClass("p-8");
|
fieldset.removeClass('p-8');
|
||||||
fieldset.addClass("p-4");
|
fieldset.addClass('p-4');
|
||||||
|
|
||||||
// Wait for fade out to complete, then hide and show new content
|
// Wait for fade out to complete, then hide and show new content
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
textContainer.addClass("hidden");
|
textContainer.addClass('hidden');
|
||||||
ketcherContainer.removeClass("hidden opacity-0 transform scale-95");
|
ketcherContainer.removeClass('hidden opacity-0 transform scale-95');
|
||||||
ketcherContainer.addClass("opacity-100 transform scale-100");
|
ketcherContainer.addClass('opacity-100 transform scale-100');
|
||||||
|
|
||||||
// Force re-evaluation of iframe size
|
// Force re-evaluation of iframe size
|
||||||
const iframe = document.getElementById("index-ketcher");
|
const iframe = document.getElementById('index-ketcher');
|
||||||
if (iframe) {
|
if (iframe) {
|
||||||
iframe.style.height = "400px";
|
iframe.style.height = '400px';
|
||||||
}
|
}
|
||||||
}, 300);
|
}, 300);
|
||||||
} else {
|
} else {
|
||||||
// SMILES mode - show text input, hide Ketcher
|
// SMILES mode - show text input, hide Ketcher
|
||||||
ketcherContainer.addClass("opacity-0 transform scale-95");
|
ketcherContainer.addClass('opacity-0 transform scale-95');
|
||||||
ketcherContainer.removeClass("opacity-100 transform scale-100");
|
ketcherContainer.removeClass('opacity-100 transform scale-100');
|
||||||
|
|
||||||
// Restore fieldset padding for text input mode
|
// Restore fieldset padding for text input mode
|
||||||
fieldset.removeClass("p-4");
|
fieldset.removeClass('p-4');
|
||||||
fieldset.addClass("p-8");
|
fieldset.addClass('p-8');
|
||||||
|
|
||||||
// Wait for fade out to complete, then hide and show new content
|
// Wait for fade out to complete, then hide and show new content
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
ketcherContainer.addClass("hidden");
|
ketcherContainer.addClass('hidden');
|
||||||
textContainer.removeClass("hidden opacity-0 transform scale-95");
|
textContainer.removeClass('hidden opacity-0 transform scale-95');
|
||||||
textContainer.addClass("opacity-100 transform scale-100");
|
textContainer.addClass('opacity-100 transform scale-100');
|
||||||
}, 300);
|
}, 300);
|
||||||
|
|
||||||
// Transfer SMILES from Ketcher to text input if available
|
// Transfer SMILES from Ketcher to text input if available
|
||||||
if (window.indexKetcher && window.indexKetcher.getSmiles) {
|
if (window.indexKetcher && window.indexKetcher.getSmiles) {
|
||||||
const smiles = window.indexKetcher.getSmiles();
|
const smiles = window.indexKetcher.getSmiles();
|
||||||
if (smiles && smiles.trim() !== "") {
|
if (smiles && smiles.trim() !== '') {
|
||||||
$("#index-form-text-input").val(smiles);
|
$('#index-form-text-input').val(smiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -370,27 +277,27 @@
|
|||||||
|
|
||||||
// Ketcher integration
|
// Ketcher integration
|
||||||
function indexKetcherToTextInput() {
|
function indexKetcherToTextInput() {
|
||||||
$("#index-form-smiles").val(this.ketcher.getSmiles());
|
$('#index-form-smiles').val(this.ketcher.getSmiles());
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
// Initialize fieldset with proper padding
|
// Initialize fieldset with proper padding
|
||||||
$(".fieldset").addClass("p-8");
|
$('.fieldset').addClass('p-8');
|
||||||
|
|
||||||
// Toggle event listener
|
// Toggle event listener
|
||||||
$('input[type="checkbox"]').on("change", toggleInputMode);
|
$('input[type="checkbox"]').on('change', toggleInputMode);
|
||||||
|
|
||||||
// Ketcher iframe load handler
|
// Ketcher iframe load handler
|
||||||
$("#index-ketcher").on("load", function () {
|
$('#index-ketcher').on('load', function() {
|
||||||
const checkKetcherReady = () => {
|
const checkKetcherReady = () => {
|
||||||
const win = this.contentWindow;
|
const win = this.contentWindow;
|
||||||
if (win.ketcher && "editor" in win.ketcher) {
|
if (win.ketcher && 'editor' in win.ketcher) {
|
||||||
window.indexKetcher = win.ketcher;
|
window.indexKetcher = win.ketcher;
|
||||||
win.ketcher.editor.event.change.handlers.push({
|
win.ketcher.editor.event.change.handlers.push({
|
||||||
once: false,
|
once: false,
|
||||||
priority: 0,
|
priority: 0,
|
||||||
f: indexKetcherToTextInput,
|
f: indexKetcherToTextInput,
|
||||||
ketcher: win.ketcher,
|
ketcher: win.ketcher
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(checkKetcherReady, 100);
|
setTimeout(checkKetcherReady, 100);
|
||||||
@ -400,20 +307,20 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Handle example link clicks
|
// Handle example link clicks
|
||||||
$(".example-link").on("click", function (e) {
|
$('.example-link').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const smiles = $(this).data("smiles");
|
const smiles = $(this).data('smiles');
|
||||||
const title = $(this).attr("title");
|
const title = $(this).attr('title');
|
||||||
|
|
||||||
// Check if we're in Ketcher mode or text input mode
|
// Check if we're in Ketcher mode or text input mode
|
||||||
if ($('input[type="checkbox"]').is(":checked")) {
|
if ($('input[type="checkbox"]').is(':checked')) {
|
||||||
// In Ketcher mode - set the SMILES in Ketcher
|
// In Ketcher mode - set the SMILES in Ketcher
|
||||||
if (window.indexKetcher && window.indexKetcher.setMolecule) {
|
if (window.indexKetcher && window.indexKetcher.setMolecule) {
|
||||||
window.indexKetcher.setMolecule(smiles);
|
window.indexKetcher.setMolecule(smiles);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// In text input mode - set the SMILES in the text input
|
// In text input mode - set the SMILES in the text input
|
||||||
$("#index-form-text-input").val(smiles);
|
$('#index-form-text-input').val(smiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show a brief feedback
|
// Show a brief feedback
|
||||||
@ -425,25 +332,25 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Handle form submission on Enter
|
// Handle form submission on Enter
|
||||||
$("#index-form").on("submit", function (e) {
|
$('#index-form').on("submit", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
var textSmiles = "";
|
var textSmiles = '';
|
||||||
|
|
||||||
// Check if we're in Ketcher mode and extract SMILES
|
// Check if we're in Ketcher mode and extract SMILES
|
||||||
if ($('input[type="checkbox"]').is(":checked") && window.indexKetcher) {
|
if ($('input[type="checkbox"]').is(':checked') && window.indexKetcher) {
|
||||||
textSmiles = window.indexKetcher.getSmiles().trim();
|
textSmiles = window.indexKetcher.getSmiles().trim();
|
||||||
} else {
|
} else {
|
||||||
textSmiles = $("#index-form-text-input").val().trim();
|
textSmiles = $('#index-form-text-input').val().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (textSmiles === "") {
|
if (textSmiles === '') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#index-form-smiles").val(textSmiles);
|
$('#index-form-smiles').val(textSmiles);
|
||||||
$("#index-form").attr("action", currentPackage + "/pathway");
|
$("#index-form").attr("action", currentPackage + "/pathway");
|
||||||
$("#index-form").attr("method", "POST");
|
$("#index-form").attr("method", 'POST');
|
||||||
this.submit();
|
this.submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -3,11 +3,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="panel-group" id="migration-detail">
|
<div class="panel-group" id="migration-detail">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div
|
<div class="panel-heading" id="headingPanel" style="font-size:2rem;height: 46px">
|
||||||
class="panel-heading"
|
|
||||||
id="headingPanel"
|
|
||||||
style="font-size:2rem;height: 46px"
|
|
||||||
>
|
|
||||||
Migration Status BT Rules
|
Migration Status BT Rules
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
@ -16,56 +12,33 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for obj in results %}
|
{% for obj in results %}
|
||||||
<div
|
<div class="panel panel-default panel-heading list-group-item" style="background-color:silver">
|
||||||
class="panel panel-default panel-heading list-group-item"
|
|
||||||
style="background-color:silver"
|
|
||||||
>
|
|
||||||
{% if obj.status %}
|
{% if obj.status %}
|
||||||
<span
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"
|
||||||
class="glyphicon glyphicon-ok"
|
style="float:right" data-toggle="tooltip"
|
||||||
aria-hidden="true"
|
data-placement="top" title="" data-original-title="Reviewed">
|
||||||
style="float:right"
|
|
||||||
data-toggle="tooltip"
|
|
||||||
data-placement="top"
|
|
||||||
title=""
|
|
||||||
data-original-title="Reviewed"
|
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span
|
<span class="glyphicon glyphicon-remove" aria-hidden="true"
|
||||||
class="glyphicon glyphicon-remove"
|
style="float:right" data-toggle="tooltip"
|
||||||
aria-hidden="true"
|
data-placement="top" title="" data-original-title="Reviewed">
|
||||||
style="float:right"
|
|
||||||
data-toggle="tooltip"
|
|
||||||
data-placement="top"
|
|
||||||
title=""
|
|
||||||
data-original-title="Reviewed"
|
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a
|
<a id="{{ obj.id }}-link" data-toggle="collapse" data-parent="#migration-detail"
|
||||||
id="{{ obj.id }}-link"
|
href="#{{ obj.id }}">{{ obj.name|safe }}</a>
|
||||||
data-toggle="collapse"
|
|
||||||
data-parent="#migration-detail"
|
|
||||||
href="#{{ obj.id }}"
|
|
||||||
>{{ obj.name|safe }}</a
|
|
||||||
>
|
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div id="{{ obj.id }}" class="panel-collapse collapse {% if not obj.status %}in{% endif %}">
|
||||||
id="{{ obj.id }}"
|
|
||||||
class="panel-collapse {% if not obj.status %}in{% endif %} collapse"
|
|
||||||
>
|
|
||||||
<div class="panel-body list-group-item">
|
<div class="panel-body list-group-item">
|
||||||
<a class="list-group-item" href="{{ obj.detail_url }}"
|
<a class="list-group-item" href="{{ obj.detail_url }}">{{ obj.name|safe }} Migration Detail Page</a>
|
||||||
>{{ obj.name|safe }} Migration Detail Page</a
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script></script>
|
<script>
|
||||||
|
|
||||||
|
</script>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -3,68 +3,34 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="panel-group" id="migration-detail">
|
<div class="panel-group" id="migration-detail">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div
|
<div class="panel-heading" id="headingPanel" style="font-size:2rem;height: 46px">
|
||||||
class="panel-heading"
|
|
||||||
id="headingPanel"
|
|
||||||
style="font-size:2rem;height: 46px"
|
|
||||||
>
|
|
||||||
Migration Status for {{ bt_rule_name }}
|
Migration Status for {{ bt_rule_name }}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<p>
|
<p>A package contains pathways, rules, etc. and can reflect specific experimental
|
||||||
A package contains pathways, rules, etc. and can reflect specific
|
conditions. <a target="_blank" href="https://wiki.envipath.org/index.php/packages" role="button">Learn
|
||||||
experimental conditions.
|
more >></a></p>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/packages"
|
|
||||||
role="button"
|
|
||||||
>Learn more >></a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for obj in results %}
|
{% for obj in results %}
|
||||||
<div
|
<div class="panel panel-default panel-heading list-group-item" style="background-color:silver">
|
||||||
class="panel panel-default panel-heading list-group-item"
|
|
||||||
style="background-color:silver"
|
|
||||||
>
|
|
||||||
{% if obj.status %}
|
{% if obj.status %}
|
||||||
<span
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"
|
||||||
class="glyphicon glyphicon-ok"
|
style="float:right" data-toggle="tooltip"
|
||||||
aria-hidden="true"
|
data-placement="top" title="" data-original-title="Reviewed">
|
||||||
style="float:right"
|
|
||||||
data-toggle="tooltip"
|
|
||||||
data-placement="top"
|
|
||||||
title=""
|
|
||||||
data-original-title="Reviewed"
|
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span
|
<span class="glyphicon glyphicon-remove" aria-hidden="true"
|
||||||
class="glyphicon glyphicon-remove"
|
style="float:right" data-toggle="tooltip"
|
||||||
aria-hidden="true"
|
data-placement="top" title="" data-original-title="Reviewed">
|
||||||
style="float:right"
|
|
||||||
data-toggle="tooltip"
|
|
||||||
data-placement="top"
|
|
||||||
title=""
|
|
||||||
data-original-title="Reviewed"
|
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a
|
<a id="{{ obj.id }}-link" data-toggle="collapse" data-parent="#migration-detail"
|
||||||
id="{{ obj.id }}-link"
|
href="#{{ obj.id }}">{{ obj.name|safe }}</a>
|
||||||
data-toggle="collapse"
|
|
||||||
data-parent="#migration-detail"
|
|
||||||
href="#{{ obj.id }}"
|
|
||||||
>{{ obj.name|safe }}</a
|
|
||||||
>
|
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div id="{{ obj.id }}" class="panel-collapse collapse {% if not obj.status %}in{% endif %}">
|
||||||
id="{{ obj.id }}"
|
|
||||||
class="panel-collapse {% if not obj.status %}in{% endif %} collapse"
|
|
||||||
>
|
|
||||||
<div class="panel-body list-group-item">
|
<div class="panel-body list-group-item">
|
||||||
<pre>{{ obj.detail }}</pre>
|
<pre>{{ obj.detail }}</pre>
|
||||||
</div>
|
</div>
|
||||||
@ -73,5 +39,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script></script>
|
<script>
|
||||||
|
|
||||||
|
</script>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
<div
|
<div class="modal fade bs-modal-lg" id="citemodal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"
|
||||||
class="modal fade bs-modal-lg"
|
aria-hidden="true">
|
||||||
id="citemodal"
|
|
||||||
tabindex="-1"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="myLargeModalLabel"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -15,33 +9,22 @@
|
|||||||
<ol class="list-group list-group-numbered">
|
<ol class="list-group list-group-numbered">
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
Hafner, J., Lorsbach, T., Schmidt, S. <em>et al.</em>
|
Hafner, J., Lorsbach, T., Schmidt, S. <em>et al.</em>
|
||||||
<cite
|
<cite>Advancements in biotransformation pathway prediction: enhancements, datasets, and novel
|
||||||
>Advancements in biotransformation pathway prediction:
|
functionalities in enviPath.</cite>
|
||||||
enhancements, datasets, and novel functionalities in
|
<a href="https://doi.org/10.1186/s13321-024-00881-6" target="_blank">J Cheminform 16, 93
|
||||||
enviPath.</cite
|
(2024)</a>
|
||||||
>
|
|
||||||
<a href="https://doi.org/10.1186/s13321-024-00881-6" target="_blank"
|
|
||||||
>J Cheminform 16, 93 (2024)</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
Wicker, J., Lorsbach, T., Gütlein, M., Schmid, E., Latino, D.,
|
Wicker, J., Lorsbach, T., Gütlein, M., Schmid, E., Latino, D., Kramer, S., Fenner, K.
|
||||||
Kramer, S., Fenner, K.
|
<cite>enviPath - The environmental contaminant biotransformation pathway resource</cite>
|
||||||
<cite
|
|
||||||
>enviPath - The environmental contaminant biotransformation
|
|
||||||
pathway resource</cite
|
|
||||||
>
|
|
||||||
<a href="https://doi.org/10.1093/nar/gkv1229" target="_blank">
|
<a href="https://doi.org/10.1093/nar/gkv1229" target="_blank">
|
||||||
Nucleic Acids Research, Volume 44, Issue D1, 4 January 2016, Pages
|
Nucleic Acids Research, Volume 44, Issue D1, 4 January 2016, Pages D502-D508
|
||||||
D502-D508
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
<div
|
<div class="modal fade" tabindex="-1" id="import_legacy_package_modal" role="dialog"
|
||||||
class="modal fade"
|
aria-labelledby="import_legacy_package_modal" aria-hidden="true">
|
||||||
tabindex="-1"
|
|
||||||
id="import_legacy_package_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="import_legacy_package_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -17,54 +11,32 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Create a Package based on the JSON Export of the legacy system.</p>
|
<p>Create a Package based on the JSON Export of the legacy system.</p>
|
||||||
<form
|
<form id="import-legacy-package-modal-form" accept-charset="UTF-8" data-remote="true" method="post"
|
||||||
id="import-legacy-package-modal-form"
|
enctype="multipart/form-data">
|
||||||
accept-charset="UTF-8"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
enctype="multipart/form-data"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label class="btn btn-primary" for="legacyJsonFile">
|
<label class="btn btn-primary" for="legacyJsonFile">
|
||||||
<input
|
<input id="legacyJsonFile" name="file" type="file" style="display:none;"
|
||||||
id="legacyJsonFile"
|
onchange="$('#upload-legacy-file-info').html(this.files[0].name)">
|
||||||
name="file"
|
|
||||||
type="file"
|
|
||||||
style="display:none;"
|
|
||||||
onchange="$('#upload-legacy-file-info').html(this.files[0].name)"
|
|
||||||
/>
|
|
||||||
Choose JSON File
|
Choose JSON File
|
||||||
</label>
|
</label>
|
||||||
<span class="label label-info" id="upload-legacy-file-info"></span>
|
<span class="label label-info" id="upload-legacy-file-info"></span>
|
||||||
<input
|
<input type="hidden" value="import-legacy-package-json" name="hidden" readonly="">
|
||||||
type="hidden"
|
|
||||||
value="import-legacy-package-json"
|
|
||||||
name="hidden"
|
|
||||||
readonly=""
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a
|
<a id="import-legacy-package-modal-form-submit" class="btn btn-primary" href="#">Submit</a>
|
||||||
id="import-legacy-package-modal-form-submit"
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
class="btn btn-primary"
|
|
||||||
href="#"
|
|
||||||
>Submit</a
|
|
||||||
>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#import-legacy-package-modal-form-submit").on("click", function (e) {
|
$('#import-legacy-package-modal-form-submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#import-legacy-package-modal-form").submit();
|
$('#import-legacy-package-modal-form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
<div
|
<div class="modal fade" tabindex="-1" id="import_package_modal" role="dialog"
|
||||||
class="modal fade"
|
aria-labelledby="import_package_modal" aria-hidden="true">
|
||||||
tabindex="-1"
|
|
||||||
id="import_package_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="import_package_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -17,54 +11,32 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Create a Package based on a JSON Export.</p>
|
<p>Create a Package based on a JSON Export.</p>
|
||||||
<form
|
<form id="import-package-modal-form" accept-charset="UTF-8" data-remote="true" method="post"
|
||||||
id="import-package-modal-form"
|
enctype="multipart/form-data">
|
||||||
accept-charset="UTF-8"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
enctype="multipart/form-data"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label class="btn btn-primary" for="jsonFile">
|
<label class="btn btn-primary" for="jsonFile">
|
||||||
<input
|
<input id="jsonFile" name="file" type="file" style="display:none;"
|
||||||
id="jsonFile"
|
onchange="$('#upload-file-info').html(this.files[0].name)">
|
||||||
name="file"
|
|
||||||
type="file"
|
|
||||||
style="display:none;"
|
|
||||||
onchange="$('#upload-file-info').html(this.files[0].name)"
|
|
||||||
/>
|
|
||||||
Choose JSON File
|
Choose JSON File
|
||||||
</label>
|
</label>
|
||||||
<span class="label label-info" id="upload-file-info"></span>
|
<span class="label label-info" id="upload-file-info"></span>
|
||||||
<input
|
<input type="hidden" value="import-package-json" name="hidden" readonly="">
|
||||||
type="hidden"
|
|
||||||
value="import-package-json"
|
|
||||||
name="hidden"
|
|
||||||
readonly=""
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a
|
<a id="import-package-modal-form-submit" class="btn btn-primary" href="#">Submit</a>
|
||||||
id="import-package-modal-form-submit"
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
class="btn btn-primary"
|
|
||||||
href="#"
|
|
||||||
>Submit</a
|
|
||||||
>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#import-package-modal-form-submit").on("click", function (e) {
|
$('#import-package-modal-form-submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#import-package-modal-form").submit();
|
$('#import-package-modal-form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,102 +1,57 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="new_compound_modal" tabindex="-1" aria-labelledby="new_compound_modal" aria-modal="true"
|
||||||
class="modal fade bs-modal-lg"
|
role="dialog">
|
||||||
id="new_compound_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="new_compound_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">Create a new Compound</h4>
|
<h4 class="modal-title">Create a new Compound</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="new_compound_modal_form" accept-charset="UTF-8" action="{% url 'package compound list' meta.current_package.uuid %}" data-remote="true" method="post">
|
||||||
id="new_compound_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{% url 'package compound list' meta.current_package.uuid %}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="compound-name">Name</label>
|
<label for="compound-name">Name</label>
|
||||||
<input
|
<input id="compound-name" class="form-control" name="compound-name" placeholder="Name"/>
|
||||||
id="compound-name"
|
|
||||||
class="form-control"
|
|
||||||
name="compound-name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="compound-description">Description</label>
|
<label for="compound-description">Description</label>
|
||||||
<input
|
<input id="compound-description" class="form-control" name="compound-description" placeholder="Description"/>
|
||||||
id="compound-description"
|
|
||||||
class="form-control"
|
|
||||||
name="compound-description"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
<label for="compound-smiles">SMILES</label>
|
<label for="compound-smiles">SMILES</label>
|
||||||
<input
|
<input type="text" class="form-control" name="compound-smiles" placeholder="SMILES" id="compound-smiles">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
name="compound-smiles"
|
|
||||||
placeholder="SMILES"
|
|
||||||
id="compound-smiles"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<div>
|
<div>
|
||||||
<iframe
|
<iframe id="new_compound_ketcher" src="{% static '/js/ketcher2/ketcher.html' %}" width="100%"
|
||||||
id="new_compound_ketcher"
|
height="510"></iframe>
|
||||||
src="{% static '/js/ketcher2/ketcher.html' %}"
|
|
||||||
width="100%"
|
|
||||||
height="510"
|
|
||||||
></iframe>
|
|
||||||
</div>
|
</div>
|
||||||
<p></p>
|
<p></p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="new_compound_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="new_compound_modal_form_submit">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function newCompoundModalketcherToNewCompoundModalTextInput() {
|
function newCompoundModalketcherToNewCompoundModalTextInput() {
|
||||||
$("#compound-smiles").val(this.ketcher.getSmiles());
|
$('#compound-smiles').val(this.ketcher.getSmiles());
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#new_compound_ketcher").on("load", function () {
|
|
||||||
|
$('#new_compound_ketcher').on('load', function() {
|
||||||
const checkKetcherReady = () => {
|
const checkKetcherReady = () => {
|
||||||
win = this.contentWindow;
|
win = this.contentWindow
|
||||||
if (win.ketcher && "editor" in win.ketcher) {
|
if (win.ketcher && 'editor' in win.ketcher) {
|
||||||
win.ketcher.editor.event.change.handlers.push({
|
win.ketcher.editor.event.change.handlers.push({
|
||||||
once: false,
|
once: false,
|
||||||
priority: 0,
|
priority: 0,
|
||||||
f: newCompoundModalketcherToNewCompoundModalTextInput,
|
f: newCompoundModalketcherToNewCompoundModalTextInput,
|
||||||
ketcher: win.ketcher,
|
ketcher: win.ketcher
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(checkKetcherReady, 100);
|
setTimeout(checkKetcherReady, 100);
|
||||||
@ -104,16 +59,20 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
checkKetcherReady();
|
checkKetcherReady();
|
||||||
});
|
})
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#new_compound_modal_form_submit").on("click", function (e) {
|
$('#new_compound_modal_form_submit').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).prop("disabled",true);
|
$(this).prop("disabled",true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// submit form
|
// submit form
|
||||||
$("#new_compound_modal_form").submit();
|
$('#new_compound_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
<div
|
<div class="modal fade" tabindex="-1" id="new_group_modal" role="dialog" aria-labelledby="new_group_modal"
|
||||||
class="modal fade"
|
aria-hidden="true">
|
||||||
tabindex="-1"
|
|
||||||
id="new_group_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="new_group_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -16,44 +10,25 @@
|
|||||||
<h4 class="modal-title">New Group</h4>
|
<h4 class="modal-title">New Group</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>
|
<p>Create new Group. You can assign users to the group once
|
||||||
Create new Group. You can assign users to the group once it is
|
it is created. Description can be changed after creation.</p>
|
||||||
created. Description can be changed after creation.
|
<form id="new_group_modal_form" accept-charset="UTF-8" action="{{ SERVER_BASE }}/group"
|
||||||
</p>
|
|
||||||
<form
|
|
||||||
id="new_group_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ SERVER_BASE }}/group"
|
|
||||||
data-remote="true"
|
data-remote="true"
|
||||||
method="post"
|
method="post">
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="name">Name</label>
|
<label for="name">Name</label>
|
||||||
<input
|
<input id="name" type="text" name="group-name" class="form-control" placeholder="Name"/>
|
||||||
id="name"
|
|
||||||
type="text"
|
|
||||||
name="group-name"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="description">Description</label>
|
<label for="description">Description</label>
|
||||||
<input
|
<input id="description" type="text" class="form-control" placeholder="Description..."
|
||||||
id="description"
|
name="group-description"/>
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Description..."
|
|
||||||
name="group-description"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a id="new_group_modal_form_submit" class="btn btn-primary" href="#"
|
<a id="new_group_modal_form_submit" class="btn btn-primary" href="#">Submit</a>
|
||||||
>Submit</a
|
|
||||||
>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
Cancel
|
Cancel
|
||||||
</button>
|
</button>
|
||||||
@ -63,8 +38,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#new_group_modal_form_submit").on("click", function () {
|
$('#new_group_modal_form_submit').on('click', function() {
|
||||||
$("#new_group_modal_form").submit();
|
$('#new_group_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
<div
|
|
||||||
class="modal fade"
|
<div class="modal fade" tabindex="-1" id="new_model_modal" role="dialog" aria-labelledby="new_model_modal"
|
||||||
tabindex="-1"
|
aria-hidden="true">
|
||||||
id="new_model_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="new_model_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -16,52 +11,29 @@
|
|||||||
<h4 class="modal-title">New Model</h4>
|
<h4 class="modal-title">New Model</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="new_model_form" accept-charset="UTF-8" action="{{ meta.current_package.url }}/model"
|
||||||
id="new_model_form"
|
data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ meta.current_package.url }}/model"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">Create a new Model to
|
||||||
Create a new Model to limit the number of degradation products in
|
limit the number of degradation products in the
|
||||||
the prediction. You just need to set a name and the packages you
|
prediction. You just need to set a name and the packages
|
||||||
want the object to be based on. There are multiple types of models
|
you want the object to be based on. There are multiple types of models available.
|
||||||
available. For additional information have a look at our
|
For additional information have a look at our
|
||||||
<a
|
<a target="_blank" href="https://wiki.envipath.org/index.php/relative-reasoning" role="button">wiki
|
||||||
target="_blank"
|
>></a>
|
||||||
href="https://wiki.envipath.org/index.php/relative-reasoning"
|
|
||||||
role="button"
|
|
||||||
>wiki >></a
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- Name -->
|
<!-- Name -->
|
||||||
<label for="model-name">Name</label>
|
<label for="model-name">Name</label>
|
||||||
<input
|
<input id="model-name" name="model-name" class="form-control" placeholder="Name"/>
|
||||||
id="model-name"
|
|
||||||
name="model-name"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Description -->
|
<!-- Description -->
|
||||||
<label for="model-description">Description</label>
|
<label for="model-description">Description</label>
|
||||||
<input
|
<input id="model-description" name="model-description" class="form-control"
|
||||||
id="model-description"
|
placeholder="Description"/>
|
||||||
name="model-description"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Model Type -->
|
<!-- Model Type -->
|
||||||
<label for="model-type">Model Type</label>
|
<label for="model-type">Model Type</label>
|
||||||
<select
|
<select id="model-type" name="model-type" class="form-control" data-width='100%'>
|
||||||
id="model-type"
|
|
||||||
name="model-type"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled selected>Select Model Type</option>
|
<option disabled selected>Select Model Type</option>
|
||||||
{% for k, v in model_types.items %}
|
{% for k, v in model_types.items %}
|
||||||
<option value="{{ v }}">{{ k }}</option>
|
<option value="{{ v }}">{{ k }}</option>
|
||||||
@ -71,14 +43,8 @@
|
|||||||
<!-- Rule Packages -->
|
<!-- Rule Packages -->
|
||||||
<div id="rule-packages" class="ep-model-param mlrr rbrr">
|
<div id="rule-packages" class="ep-model-param mlrr rbrr">
|
||||||
<label for="model-rule-packages">Rule Packages</label>
|
<label for="model-rule-packages">Rule Packages</label>
|
||||||
<select
|
<select id="model-rule-packages" name="model-rule-packages" data-actions-box='true'
|
||||||
id="model-rule-packages"
|
class="form-control" multiple data-width='100%'>
|
||||||
name="model-rule-packages"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Reviewed Packages</option>
|
<option disabled>Reviewed Packages</option>
|
||||||
{% for obj in meta.readable_packages %}
|
{% for obj in meta.readable_packages %}
|
||||||
{% if obj.reviewed %}
|
{% if obj.reviewed %}
|
||||||
@ -98,14 +64,8 @@
|
|||||||
<!-- Data Packages -->
|
<!-- Data Packages -->
|
||||||
<div id="data-packages" class="ep-model-param mlrr rbrr enviformer">
|
<div id="data-packages" class="ep-model-param mlrr rbrr enviformer">
|
||||||
<label for="model-data-packages">Data Packages</label>
|
<label for="model-data-packages">Data Packages</label>
|
||||||
<select
|
<select id="model-data-packages" name="model-data-packages" data-actions-box='true'
|
||||||
id="model-data-packages"
|
class="form-control" multiple data-width='100%'>
|
||||||
name="model-data-packages"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Reviewed Packages</option>
|
<option disabled>Reviewed Packages</option>
|
||||||
{% for obj in meta.readable_packages %}
|
{% for obj in meta.readable_packages %}
|
||||||
{% if obj.reviewed %}
|
{% if obj.reviewed %}
|
||||||
@ -125,19 +85,11 @@
|
|||||||
<!-- Fingerprinter -->
|
<!-- Fingerprinter -->
|
||||||
<div id="fingerprinter" class="ep-model-param mlrr">
|
<div id="fingerprinter" class="ep-model-param mlrr">
|
||||||
<label for="model-fingerprinter">Fingerprinter</label>
|
<label for="model-fingerprinter">Fingerprinter</label>
|
||||||
<select
|
<select id="model-fingerprinter" name="model-fingerprinter" data-actions-box='true'
|
||||||
id="model-fingerprinter"
|
class="form-control" multiple data-width='100%'>
|
||||||
name="model-fingerprinter"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option value="MACCS" selected>MACCS Fingerprinter</option>
|
<option value="MACCS" selected>MACCS Fingerprinter</option>
|
||||||
{% if meta.enabled_features.PLUGINS and additional_descriptors %}
|
{% if meta.enabled_features.PLUGINS and additional_descriptors %}
|
||||||
<option disabled selected>
|
<option disabled selected>Select Additional Fingerprinter / Descriptor</option>
|
||||||
Select Additional Fingerprinter / Descriptor
|
|
||||||
</option>
|
|
||||||
{% for k, v in additional_descriptors.items %}
|
{% for k, v in additional_descriptors.items %}
|
||||||
<option value="{{ v }}">{{ k }}</option>
|
<option value="{{ v }}">{{ k }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -148,16 +100,8 @@
|
|||||||
<!-- Threshold -->
|
<!-- Threshold -->
|
||||||
<div id="threshold" class="ep-model-param mlrr enviformer">
|
<div id="threshold" class="ep-model-param mlrr enviformer">
|
||||||
<label for="model-threshold">Threshold</label>
|
<label for="model-threshold">Threshold</label>
|
||||||
<input
|
<input type="number" min="0" max="1" step="0.05" value="0.5" id="model-threshold"
|
||||||
type="number"
|
name="model-threshold" class="form-control">
|
||||||
min="0"
|
|
||||||
max="1"
|
|
||||||
step="0.05"
|
|
||||||
value="0.5"
|
|
||||||
id="model-threshold"
|
|
||||||
name="model-threshold"
|
|
||||||
class="form-control"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="appdomain" class="ep-model-param mlrr">
|
<div id="appdomain" class="ep-model-param mlrr">
|
||||||
@ -165,64 +109,33 @@
|
|||||||
<!-- Build AD? -->
|
<!-- Build AD? -->
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="checkbox" id="build-app-domain" name="build-app-domain">Also build an
|
||||||
type="checkbox"
|
Applicability Domain?
|
||||||
id="build-app-domain"
|
|
||||||
name="build-app-domain"
|
|
||||||
/>Also build an Applicability Domain?
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div id="ad-params" style="display:none">
|
<div id="ad-params" style="display:none">
|
||||||
<!-- Num Neighbors -->
|
<!-- Num Neighbors -->
|
||||||
<label for="num-neighbors">Number of Neighbors</label>
|
<label for="num-neighbors">Number of Neighbors</label>
|
||||||
<input
|
<input id="num-neighbors" name="num-neighbors" type="number" class="form-control"
|
||||||
id="num-neighbors"
|
|
||||||
name="num-neighbors"
|
|
||||||
type="number"
|
|
||||||
class="form-control"
|
|
||||||
value="5"
|
value="5"
|
||||||
step="1"
|
step="1" min="0" max="10">
|
||||||
min="0"
|
|
||||||
max="10"
|
|
||||||
/>
|
|
||||||
<!-- Local Compatibility -->
|
<!-- Local Compatibility -->
|
||||||
<label for="local-compatibility-threshold"
|
<label for="local-compatibility-threshold">Local Compatibility Threshold</label>
|
||||||
>Local Compatibility Threshold</label
|
<input id="local-compatibility-threshold" name="local-compatibility-threshold"
|
||||||
>
|
|
||||||
<input
|
|
||||||
id="local-compatibility-threshold"
|
|
||||||
name="local-compatibility-threshold"
|
|
||||||
type="number"
|
type="number"
|
||||||
class="form-control"
|
class="form-control" value="0.5" step="0.01" min="0" max="1">
|
||||||
value="0.5"
|
|
||||||
step="0.01"
|
|
||||||
min="0"
|
|
||||||
max="1"
|
|
||||||
/>
|
|
||||||
<!-- Reliability -->
|
<!-- Reliability -->
|
||||||
<label for="reliability-threshold">Reliability Threshold</label>
|
<label for="reliability-threshold">Reliability Threshold</label>
|
||||||
<input
|
<input id="reliability-threshold" name="reliability-threshold" type="number"
|
||||||
id="reliability-threshold"
|
class="form-control" value="0.5" step="0.01" min="0" max="1">
|
||||||
name="reliability-threshold"
|
|
||||||
type="number"
|
|
||||||
class="form-control"
|
|
||||||
value="0.5"
|
|
||||||
step="0.01"
|
|
||||||
min="0"
|
|
||||||
max="1"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a id="new_model_modal_form_submit" class="btn btn-primary" href="#"
|
<a id="new_model_modal_form_submit" class="btn btn-primary" href="#">Submit</a>
|
||||||
>Submit</a
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -231,40 +144,45 @@
|
|||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
// Built in Model Types
|
// Built in Model Types
|
||||||
var nativeModelTypes = ["mlrr", "rbrr", "enviformer"];
|
var nativeModelTypes = [
|
||||||
|
"mlrr",
|
||||||
|
"rbrr",
|
||||||
|
"enviformer",
|
||||||
|
]
|
||||||
|
|
||||||
// Initially hide all "specific" forms
|
// Initially hide all "specific" forms
|
||||||
$(".ep-model-param").each(function () {
|
$(".ep-model-param").each(function () {
|
||||||
$(this).hide();
|
$(this).hide();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#model-type").selectpicker();
|
$('#model-type').selectpicker();
|
||||||
$("#model-fingerprinter").selectpicker();
|
$("#model-fingerprinter").selectpicker();
|
||||||
$("#model-rule-packages").selectpicker();
|
$("#model-rule-packages").selectpicker();
|
||||||
$("#model-data-packages").selectpicker();
|
$("#model-data-packages").selectpicker();
|
||||||
|
|
||||||
$("#build-app-domain").change(function () {
|
$("#build-app-domain").change(function () {
|
||||||
if ($(this).is(":checked")) {
|
if ($(this).is(":checked")) {
|
||||||
$("#ad-params").show();
|
$('#ad-params').show();
|
||||||
} else {
|
} else {
|
||||||
$("#ad-params").hide();
|
$('#ad-params').hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// On change hide all and show only selected
|
// On change hide all and show only selected
|
||||||
$("#model-type").change(function () {
|
$("#model-type").change(function () {
|
||||||
$(".ep-model-param").hide();
|
$('.ep-model-param').hide();
|
||||||
var modelType = $("#model-type").val();
|
var modelType = $('#model-type').val();
|
||||||
if (nativeModelTypes.indexOf(modelType) !== -1) {
|
if (nativeModelTypes.indexOf(modelType) !== -1) {
|
||||||
$("." + modelType).show();
|
$('.' + modelType).show();
|
||||||
} else {
|
} else {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#new_model_modal_form_submit").on("click", function (e) {
|
$('#new_model_modal_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#new_model_form").submit();
|
$('#new_model_form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
<div
|
<div class="modal fade"
|
||||||
class="modal fade"
|
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
id="new_package_modal"
|
id="new_package_modal"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
aria-labelledby="new_package_modal"
|
aria-labelledby="new_package_modal"
|
||||||
aria-hidden="true"
|
aria-hidden="true">
|
||||||
>
|
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal">
|
<button type="button"
|
||||||
|
class="close"
|
||||||
|
data-dismiss="modal">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
<span class="sr-only">Close</span>
|
<span class="sr-only">Close</span>
|
||||||
</button>
|
</button>
|
||||||
@ -17,42 +17,36 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Create new package. Description can be changed later.</p>
|
<p>Create new package. Description can be changed later.</p>
|
||||||
<form
|
<form id="new_package_modal_form"
|
||||||
id="new_package_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
accept-charset="UTF-8"
|
||||||
action=""
|
action=""
|
||||||
data-remote="true"
|
data-remote="true"
|
||||||
method="post"
|
method="post">
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="name">Name</label>
|
<label for="name">Name</label>
|
||||||
<input
|
<input id="name" class="form-control"
|
||||||
id="name"
|
|
||||||
class="form-control"
|
|
||||||
name="package-name"
|
name="package-name"
|
||||||
placeholder="Name"
|
placeholder="Name"/>
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="description">Description</label>
|
<label for="description">Description</label>
|
||||||
<input
|
<input id="description"
|
||||||
id="description"
|
|
||||||
type="text"
|
type="text"
|
||||||
rows="3"
|
rows="3"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
placeholder="Description..."
|
placeholder="Description..."
|
||||||
name="package-description"
|
name="package-description"/>
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a id="new_package_modal_form_submit" class="btn btn-primary" href="#"
|
<a id="new_package_modal_form_submit"
|
||||||
>Submit</a
|
class="btn btn-primary"
|
||||||
>
|
href="#">Submit</a>
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
<button type="button"
|
||||||
Cancel
|
class="btn btn-default"
|
||||||
|
data-dismiss="modal">Cancel
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -60,9 +54,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#new_package_modal_form_submit").on("click", function (e) {
|
$('#new_package_modal_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#new_package_modal_form").submit();
|
$('#new_package_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,57 +1,40 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade" tabindex="-1" id="new_pathway_modal" role="dialog" aria-labelledby="new_pathway_modal"
|
||||||
class="modal fade"
|
aria-hidden="true" style="overflow-y: auto;">
|
||||||
tabindex="-1"
|
|
||||||
id="new_pathway_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="new_pathway_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
style="overflow-y: auto;"
|
|
||||||
>
|
|
||||||
<!-- FIXME: make width dynamic-->
|
<!-- FIXME: make width dynamic-->
|
||||||
<div class="modal-dialog" id="new_pathway_modal_dialog" style="width:900px">
|
<div class="modal-dialog" id="new_pathway_modal_dialog" style="width:900px">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal">
|
<button type="button" class="close" data-dismiss="modal">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span> <span class="sr-only">Close</span>
|
||||||
<span class="sr-only">Close</span>
|
|
||||||
</button>
|
</button>
|
||||||
<h4 class="js-title-step"></h4>
|
<h4 class="js-title-step"></h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body hide" data-step="1" data-title="New Pathway">
|
<div class="modal-body hide" data-step="1" data-title="New Pathway">
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">Create a new pathway by entering
|
||||||
Create a new pathway by entering the root compound and a name. Then
|
the root compound and a name. Then select if you want to
|
||||||
select if you want to use the prediction engine to generate a
|
use the prediction engine to generate a predicted pathway or
|
||||||
predicted pathway or create an empty pathway that you fill in by
|
create an empty pathway that you fill in by yourself. If
|
||||||
yourself. If you choose to predict a pathway, you can modify the
|
you choose to predict a pathway, you can modify the
|
||||||
settings for the prediction, or use the default settings and just
|
settings for the prediction, or use the default settings
|
||||||
click Submit.
|
and just click Submit.
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
{% if current_user.name == 'anonymous' %}
|
{% if current_user.name == 'anonymous' %}
|
||||||
<div class="alert alert-warning">
|
<div class="alert alert-warning">
|
||||||
You are currently logged in as Anonymous. Please note: Pathways
|
You are currently logged in as Anonymous. Please note:
|
||||||
entered or predicted as anonymous user will be deleted after 30
|
Pathways entered or predicted as anonymous user will be deleted after 30 days.
|
||||||
days. Please log in to save your results.
|
Please log in to save your results.
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<label for="name">Name</label>
|
<label for="name">Name</label>
|
||||||
<input
|
<input id="name" class="form-control" name="name" placeholder="Name"/>
|
||||||
id="name"
|
|
||||||
class="form-control"
|
|
||||||
name="name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="description">Description</label>
|
<label for="description">Description</label>
|
||||||
<input
|
<input id="description" class="form-control" name="description" placeholder="no description"/>
|
||||||
id="description"
|
|
||||||
class="form-control"
|
|
||||||
name="description"
|
|
||||||
placeholder="no description"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
@ -59,33 +42,17 @@
|
|||||||
<div class="radio" id="predict">
|
<div class="radio" id="predict">
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="predict" id="radioPredict" value="predict" checked/>Predict pathway
|
||||||
type="radio"
|
|
||||||
name="predict"
|
|
||||||
id="radioPredict"
|
|
||||||
value="predict"
|
|
||||||
checked
|
|
||||||
/>Predict pathway
|
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="predict" id="radioIncremental"value="incremental"/>Incremental prediction
|
||||||
type="radio"
|
|
||||||
name="predict"
|
|
||||||
id="radioIncremental"
|
|
||||||
value="incremental"
|
|
||||||
/>Incremental prediction
|
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="predict" id="radioBuild" value="build"/>Build pathway
|
||||||
type="radio"
|
|
||||||
name="predict"
|
|
||||||
id="radioBuild"
|
|
||||||
value="build"
|
|
||||||
/>Build pathway
|
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -94,18 +61,13 @@
|
|||||||
<label for="smilesinput">SMILES</label>
|
<label for="smilesinput">SMILES</label>
|
||||||
<table style="width: 100%">
|
<table style="width: 100%">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col span="1" style="width: 90%;" />
|
<col span="1" style="width: 90%;">
|
||||||
<col span="1" style="width: 10%;" />
|
<col span="1" style="width: 10%;">
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input
|
<input id="smilesinput" class="form-control" name="smilesinput" placeholder="C1CCCCC1"
|
||||||
id="smilesinput"
|
autocapitalize="none"/>
|
||||||
class="form-control"
|
|
||||||
name="smilesinput"
|
|
||||||
placeholder="C1CCCCC1"
|
|
||||||
autocapitalize="none"
|
|
||||||
/>
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="button" class="btn btn-default" id="render-button">
|
<button type="button" class="btn btn-default" id="render-button">
|
||||||
@ -116,57 +78,33 @@
|
|||||||
</table>
|
</table>
|
||||||
<p id="ketcher_container"></p>
|
<p id="ketcher_container"></p>
|
||||||
<div>
|
<div>
|
||||||
<iframe
|
<iframe id="ifKetcher" src="{% static '/js/ketcher/ketcher.html' %}" width="850"
|
||||||
id="ifKetcher"
|
height="510"></iframe>
|
||||||
src="{% static '/js/ketcher/ketcher.html' %}"
|
|
||||||
width="850"
|
|
||||||
height="510"
|
|
||||||
></iframe>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="modal-body hide" data-step="2" data-title="New Pathway - Advanced Settings">
|
||||||
class="modal-body hide"
|
<div class="jumbotron">Choose if you want to use an existing
|
||||||
data-step="2"
|
setting, or create a new one for this pathway
|
||||||
data-title="New Pathway - Advanced Settings"
|
prediction. Then click Submit to use the specified setting,
|
||||||
>
|
or click next to set the parameters.
|
||||||
<div class="jumbotron">
|
|
||||||
Choose if you want to use an existing setting, or create a new one for
|
|
||||||
this pathway prediction. Then click Submit to use the specified
|
|
||||||
setting, or click next to set the parameters.
|
|
||||||
</div>
|
</div>
|
||||||
<div id="settings">
|
<div id="settings">
|
||||||
<div class="radio" id="settingRadio">
|
<div class="radio" id="settingRadio">
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="existing" id="radioDefault" value="exisiting" checked/>
|
||||||
type="radio"
|
|
||||||
name="existing"
|
|
||||||
id="radioDefault"
|
|
||||||
value="exisiting"
|
|
||||||
checked
|
|
||||||
/>
|
|
||||||
Use Default
|
Use Default
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="existing" id="radioExists" value="exisiting"/>
|
||||||
type="radio"
|
|
||||||
name="existing"
|
|
||||||
id="radioExists"
|
|
||||||
value="exisiting"
|
|
||||||
/>
|
|
||||||
Select Existing
|
Select Existing
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="existing" id="radioNew" value="temporary"/>
|
||||||
type="radio"
|
|
||||||
name="existing"
|
|
||||||
id="radioNew"
|
|
||||||
value="temporary"
|
|
||||||
/>
|
|
||||||
Create New
|
Create New
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
@ -184,25 +122,12 @@
|
|||||||
{% include "templates/modals/collections/new_setting_modal_body.html" %}
|
{% include "templates/modals/collections/new_setting_modal_body.html" %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-default js-btn-step pull-left" data-orientation="cancel"
|
||||||
type="button"
|
onclick="reset()" data-dismiss="modal"></button>
|
||||||
class="btn btn-default js-btn-step pull-left"
|
<button type="button" class="btn btn-default js-btn-step" data-orientation="previous"
|
||||||
data-orientation="cancel"
|
id="backbutton"></button>
|
||||||
onclick="reset()"
|
<button type="button" class="btn btn-default js-btn-step" data-orientation="next"
|
||||||
data-dismiss="modal"
|
id="nextbutton"></button>
|
||||||
></button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-default js-btn-step"
|
|
||||||
data-orientation="previous"
|
|
||||||
id="backbutton"
|
|
||||||
></button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-default js-btn-step"
|
|
||||||
data-orientation="next"
|
|
||||||
id="nextbutton"
|
|
||||||
></button>
|
|
||||||
<a id="modal-form-submit" class="btn btn-primary" href="#">Submit</a>
|
<a id="modal-form-submit" class="btn btn-primary" href="#">Submit</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -211,86 +136,86 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
s = new Setting(
|
s = new Setting(
|
||||||
"settingName",
|
'settingName',
|
||||||
"package_multi_select",
|
'package_multi_select',
|
||||||
"modelSelect",
|
'modelSelect',
|
||||||
"cutoff",
|
'cutoff',
|
||||||
"evalType",
|
'evalType',
|
||||||
"availableTS",
|
'availableTS',
|
||||||
"forms",
|
'forms',
|
||||||
"truncatorTable",
|
'truncatorTable',
|
||||||
"summaryTable",
|
'summaryTable',
|
||||||
);
|
);
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
// hide all forms
|
// hide all forms
|
||||||
$("#forms").children().hide();
|
$('#forms').children().hide()
|
||||||
|
|
||||||
$("#render-button").on("click", function() {
|
$("#render-button").on("click", function() {
|
||||||
syncKetcherAndTextInput("text", "ifKetcher", "smilesinput");
|
syncKetcherAndTextInput('text', "ifKetcher", "smilesinput");
|
||||||
});
|
});
|
||||||
|
|
||||||
// If theres a change in the in '#smilesinput' sync the value to ketcher
|
// If theres a change in the in '#smilesinput' sync the value to ketcher
|
||||||
$("#smilesinput").on("input", function () {
|
$('#smilesinput').on('input', function() {
|
||||||
syncKetcherAndTextInput("text", "ifKetcher", "smilesinput");
|
syncKetcherAndTextInput('text', 'ifKetcher', 'smilesinput');
|
||||||
});
|
});
|
||||||
|
|
||||||
// If theres an update in ketcher sync it to textinput
|
// If theres an update in ketcher sync it to textinput
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
syncKetcherAndTextInput("ketcher", "ifKetcher", "smilesinput");
|
syncKetcherAndTextInput('ketcher', 'ifKetcher', 'smilesinput');
|
||||||
}, 250);
|
}, 250);
|
||||||
|
|
||||||
$("#smilesinput").on("blur", function() {
|
$("#smilesinput").on("blur", function() {
|
||||||
syncKetcherAndTextInput("text", "ifKetcher", "smilesinput");
|
syncKetcherAndTextInput('text', 'ifKetcher', 'smilesinput');
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#smilesinput").on("keypress", function(event) {
|
$("#smilesinput").on("keypress", function(event) {
|
||||||
if (event.keyCode == 13) {
|
if (event.keyCode == 13) {
|
||||||
syncKetcherAndTextInput("text", "ifKetcher", "smilesinput");
|
syncKetcherAndTextInput('text', 'ifKetcher', 'smilesinput');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Show forms depending on the selected TS
|
// Show forms depending on the selected TS
|
||||||
$("#availableTS").on("change", function (e) {
|
$('#availableTS').on('change', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
var type = $(this).val();
|
var type = $(this).val();
|
||||||
// hide current content
|
// hide current content
|
||||||
$("#forms").children().hide();
|
$('#forms').children().hide()
|
||||||
|
|
||||||
if (type === "") {
|
if(type === '') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#" + type + "_form").show();
|
$('#' + type + '_form').show()
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#modelSelect").on("change", function() {
|
$("#modelSelect").on("change", function() {
|
||||||
setCutoff = function (thresh) {
|
setCutoff = function (thresh) {
|
||||||
$("#cutoff").val(thresh);
|
$("#cutoff").val(thresh);
|
||||||
};
|
}
|
||||||
|
|
||||||
var modelUri = $("#modelSelect :selected").val();
|
var modelUri = $("#modelSelect :selected").val();
|
||||||
fillPRCurve(modelUri, setCutoff);
|
fillPRCurve(modelUri, setCutoff);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add a TS to the setting
|
// Add a TS to the setting
|
||||||
$("#add-ts-button").on("click", function (e) {
|
$('#add-ts-button').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
s.addTruncator();
|
s.addTruncator();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[type=radio][name=predict]").change(function () {
|
$('input[type=radio][name=predict]').change(function() {
|
||||||
if (this.id == "radioBuild") {
|
if (this.id == 'radioBuild') {
|
||||||
$("#nextbutton").prop("disabled", true);
|
$("#nextbutton").prop("disabled", true);
|
||||||
} else {
|
} else {
|
||||||
$("#nextbutton").prop("disabled", false);
|
$("#nextbutton").prop("disabled", false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[type=radio][name=existing]").change(function () {
|
$('input[type=radio][name=existing]').change(function() {
|
||||||
if (this.id == "radioDefault" || this.id == "radioExists") {
|
if (this.id == 'radioDefault' || this.id == 'radioExists') {
|
||||||
if (this.id == "radioDefault") {
|
if(this.id == 'radioDefault') {
|
||||||
$("#settingSelect").prop("disabled", true);
|
$("#settingSelect").prop("disabled", true);
|
||||||
} else {
|
} else {
|
||||||
$("#settingSelect").prop("disabled", false);
|
$("#settingSelect").prop("disabled", false);
|
||||||
@ -306,71 +231,72 @@
|
|||||||
var pwStep1 = function() {
|
var pwStep1 = function() {
|
||||||
console.log("pw step 1");
|
console.log("pw step 1");
|
||||||
// Make "Next" to "Advanced"
|
// Make "Next" to "Advanced"
|
||||||
$("#nextbutton").val("Advanced");
|
$('#nextbutton').val("Advanced");
|
||||||
};
|
}
|
||||||
|
|
||||||
var pwStep2 = function() {
|
var pwStep2 = function() {
|
||||||
console.log("pw step 2");
|
console.log("pw step 2");
|
||||||
// Make "Advanced" to "Next"
|
// Make "Advanced" to "Next"
|
||||||
$("#nextbutton").val("Next");
|
$('#nextbutton').val("Next");
|
||||||
// As "Use default is preselected" disable "Next" button
|
// As "Use default is preselected" disable "Next" button
|
||||||
$("#nextbutton").prop("disabled",true);
|
$("#nextbutton").prop("disabled",true);
|
||||||
// Disable setting dropdown as long as the correspndonding radio isnt checked
|
// Disable setting dropdown as long as the correspndonding radio isnt checked
|
||||||
$("#settingSelect").prop("disabled",true);
|
$("#settingSelect").prop("disabled",true);
|
||||||
// Show submit button
|
// Show submit button
|
||||||
$("#modal-form-submit").show();
|
$("#modal-form-submit").show();
|
||||||
};
|
}
|
||||||
|
|
||||||
var settingStep1 = function (){
|
var settingStep1 = function (){
|
||||||
// First step sets name and packages
|
// First step sets name and packages
|
||||||
s.extractName();
|
s.extractName();
|
||||||
s.extractSelectedPackages();
|
s.extractSelectedPackages();
|
||||||
};
|
}
|
||||||
|
|
||||||
var settingStep2 = function (){
|
var settingStep2 = function (){
|
||||||
// Seconds step gathers relative reasoning params
|
// Seconds step gathers relative reasoning params
|
||||||
s.extractRelativeReasoning();
|
s.extractRelativeReasoning();
|
||||||
s.extractCutoff();
|
s.extractCutoff();
|
||||||
s.extractEvaluationType();
|
s.extractEvaluationType();
|
||||||
};
|
}
|
||||||
|
|
||||||
var settingStep3 = function() {
|
var settingStep3 = function() {
|
||||||
s.updateTable();
|
s.updateTable();
|
||||||
s.updateSummaryTable();
|
s.updateSummaryTable();
|
||||||
// hide duplicate submit...
|
// hide duplicate submit...
|
||||||
$("#nextbutton").hide();
|
$("#nextbutton").hide();
|
||||||
};
|
}
|
||||||
|
|
||||||
var postPathway = function(){
|
var postPathway = function(){
|
||||||
console.log("Complete!");
|
console.log("Complete!");
|
||||||
console.log(s.tsParams);
|
console.log(s.tsParams);
|
||||||
console.log("Getting SMILES");
|
console.log("Getting SMILES");
|
||||||
};
|
}
|
||||||
|
|
||||||
function dummy() {
|
function dummy() {
|
||||||
console.log("dummy");
|
console.log("dummy");
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#new_pathway_modal").modalSteps({
|
$('#new_pathway_modal').modalSteps({
|
||||||
btnCancelHtml: "Cancel",
|
btnCancelHtml: 'Cancel',
|
||||||
btnPreviousHtml: "Back",
|
btnPreviousHtml: 'Back',
|
||||||
btnNextHtml: "Next",
|
btnNextHtml: 'Next',
|
||||||
btnLastStepHtml: "Submit",
|
btnLastStepHtml: 'Submit',
|
||||||
disableNextButton: false,
|
disableNextButton: false,
|
||||||
completeCallback: postPathway,
|
completeCallback: postPathway,
|
||||||
callbacks: {
|
callbacks: {
|
||||||
1: pwStep1,
|
'1': pwStep1,
|
||||||
2: pwStep2,
|
'2' : pwStep2,
|
||||||
3: dummy,
|
'3' : dummy,
|
||||||
4: settingStep1,
|
'4' : settingStep1,
|
||||||
5: settingStep2,
|
'5' : settingStep2,
|
||||||
6: settingStep3,
|
'6' : settingStep3,
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#modal-form-submit").on("click", function () {
|
$('#modal-form-submit').on('click', function() {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
postPathway();
|
postPathway();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
|
||||||
<div id="new_prediction_setting_modal" class="modal" tabindex="-1">
|
<div id="new_prediction_setting_modal" class="modal" tabindex="-1">
|
||||||
@ -5,88 +6,38 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Create a Prediction Setting</h5>
|
<h5 class="modal-title">Create a Prediction Setting</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>
|
<p>To create a Prediction Setting fill the form below and click "Create"</p>
|
||||||
To create a Prediction Setting fill the form below and click "Create"
|
<form id="new-prediction-setting-modal-form" accept-charset="UTF-8" action="" data-remote="true"
|
||||||
</p>
|
method="post">
|
||||||
<form
|
|
||||||
id="new-prediction-setting-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
||||||
<label for="prediction-setting-name">Name</label>
|
<label for="prediction-setting-name">Name</label>
|
||||||
<input
|
<input id="prediction-setting-name" name="prediction-setting-name" class="form-control" placeholder="Name"/>
|
||||||
id="prediction-setting-name"
|
|
||||||
name="prediction-setting-name"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="prediction-setting-description">Description</label>
|
<label for="prediction-setting-description">Description</label>
|
||||||
<input
|
<input id="prediction-setting-description" name="prediction-setting-description" class="form-control"
|
||||||
id="prediction-setting-description"
|
placeholder="Description"/>
|
||||||
name="prediction-setting-description"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<label for="prediction-setting-max-nodes">Max #Nodes</label>
|
<label for="prediction-setting-max-nodes">Max #Nodes</label>
|
||||||
<input
|
<input id="prediction-setting-max-nodes" type="number" class="form-control" name="prediction-setting-max-nodes" value="30" min="1" max="50" step="1">
|
||||||
id="prediction-setting-max-nodes"
|
|
||||||
type="number"
|
|
||||||
class="form-control"
|
|
||||||
name="prediction-setting-max-nodes"
|
|
||||||
value="30"
|
|
||||||
min="1"
|
|
||||||
max="50"
|
|
||||||
step="1"
|
|
||||||
/>
|
|
||||||
<label for="prediction-setting-max-depth">Max Depth</label>
|
<label for="prediction-setting-max-depth">Max Depth</label>
|
||||||
<input
|
<input id="prediction-setting-max-depth" type="number" class="form-control" name="prediction-setting-max-depth" value="5" min="1" max="8" step="1">
|
||||||
id="prediction-setting-max-depth"
|
|
||||||
type="number"
|
|
||||||
class="form-control"
|
|
||||||
name="prediction-setting-max-depth"
|
|
||||||
value="5"
|
|
||||||
min="1"
|
|
||||||
max="8"
|
|
||||||
step="1"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<label for="tp-generation-method">TP Generation Method</label>
|
<label for="tp-generation-method">TP Generation Method</label>
|
||||||
<select
|
<select id="tp-generation-method" name="tp-generation-method" class="form-control" data-width='100%'>
|
||||||
id="tp-generation-method"
|
|
||||||
name="tp-generation-method"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled selected>Select how TPs are generated</option>
|
<option disabled selected>Select how TPs are generated</option>
|
||||||
<option value="rule-based-prediction-setting">Rule Based</option>
|
<option value="rule-based-prediction-setting">Rule Based</option>
|
||||||
<option value="model-based-prediction-setting">Model Based</option>
|
<option value="model-based-prediction-setting">Model Based</option>
|
||||||
</select>
|
</select>
|
||||||
<div id="rule-based-prediction-setting-specific-form">
|
<div id="rule-based-prediction-setting-specific-form">
|
||||||
<!-- Rule Packages -->
|
<!-- Rule Packages -->
|
||||||
<label>Rule Packages</label><br />
|
<label>Rule Packages</label><br>
|
||||||
<select
|
<select id="rule-based-prediction-setting-packages" name="rule-based-prediction-setting-packages"
|
||||||
id="rule-based-prediction-setting-packages"
|
data-actions-box='true' class="form-control" multiple data-width='100%'>
|
||||||
name="rule-based-prediction-setting-packages"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Reviewed Packages</option>
|
<option disabled>Reviewed Packages</option>
|
||||||
{% for obj in meta.readable_packages %}
|
{% for obj in meta.readable_packages %}
|
||||||
{% if obj.reviewed %}
|
{% if obj.reviewed %}
|
||||||
@ -103,59 +54,32 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div id="model-based-prediction-setting-specific-form">
|
<div id="model-based-prediction-setting-specific-form">
|
||||||
<label>Select Model</label><br />
|
<label>Select Model</label><br>
|
||||||
<select
|
<select id="model-based-prediction-setting-model" name="model-based-prediction-setting-model" class="form-control" data-width='100%'>
|
||||||
id="model-based-prediction-setting-model"
|
|
||||||
name="model-based-prediction-setting-model"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled selected>Select the model</option>
|
<option disabled selected>Select the model</option>
|
||||||
{% for m in models %}
|
{% for m in models %}
|
||||||
<option value="{{ m.url }}">{{ m.name|safe }}</option>
|
<option value="{{ m.url }}">{{ m.name|safe }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<label for="model-based-prediction-setting-threshold"
|
<label for="model-based-prediction-setting-threshold">Threshold</label>
|
||||||
>Threshold</label
|
<input id="model-based-prediction-setting-threshold" name="model-based-prediction-setting-threshold" class="form-control" placeholder="0.25" type="number"/>
|
||||||
>
|
|
||||||
<input
|
|
||||||
id="model-based-prediction-setting-threshold"
|
|
||||||
name="model-based-prediction-setting-threshold"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="0.25"
|
|
||||||
type="number"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input
|
<input class="form-check-input" type="checkbox" value="on" id="prediction-setting-new-default" name="prediction-setting-new-default">
|
||||||
class="form-check-input"
|
<label class="form-check-label" for="prediction-setting-new-default">Set this setting as new default</label>
|
||||||
type="checkbox"
|
|
||||||
value="on"
|
|
||||||
id="prediction-setting-new-default"
|
|
||||||
name="prediction-setting-new-default"
|
|
||||||
/>
|
|
||||||
<label class="form-check-label" for="prediction-setting-new-default"
|
|
||||||
>Set this setting as new default</label
|
|
||||||
>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="new-prediction-setting-modal-submit">Create</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="new-prediction-setting-modal-submit"
|
|
||||||
>
|
|
||||||
Create
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|
||||||
// Initially hide all "specific" forms
|
// Initially hide all "specific" forms
|
||||||
$("div[id$='-specific-form']").each( function() {
|
$("div[id$='-specific-form']").each( function() {
|
||||||
$(this).hide();
|
$(this).hide();
|
||||||
@ -168,18 +92,18 @@
|
|||||||
$("div[id$='-specific-form']").each( function() {
|
$("div[id$='-specific-form']").each( function() {
|
||||||
$(this).hide();
|
$(this).hide();
|
||||||
});
|
});
|
||||||
val = $("option:selected", this).val();
|
val = $('option:selected', this).val();
|
||||||
$("#" + val + "-specific-form").show();
|
$("#" + val + "-specific-form").show();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#new-prediction-setting-modal-submit").click(function (e) {
|
$('#new-prediction-setting-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
// $('#new-prediction-setting-modal-form').submit();
|
// $('#new-prediction-setting-modal-form').submit();
|
||||||
|
|
||||||
const formData = $("#new-prediction-setting-modal-form").serialize();
|
const formData = $('#new-prediction-setting-modal-form').serialize();
|
||||||
$.post("/setting", formData, function (response) {
|
$.post('/setting', formData, function(response) {
|
||||||
location.reload();
|
location.reload();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,91 +1,50 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="new_reaction_modal" tabindex="-1" aria-labelledby="new_reaction_modal" aria-modal="true"
|
||||||
class="modal fade bs-modal-lg"
|
role="dialog">
|
||||||
id="new_reaction_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="new_reaction_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">Create a new Reaction</h4>
|
<h4 class="modal-title">Create a new Reaction</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="new_reaction_modal_form" accept-charset="UTF-8" action="{% url 'package reaction list' meta.current_package.uuid %}" data-remote="true" method="post">
|
||||||
id="new_reaction_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{% url 'package reaction list' meta.current_package.uuid %}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="reaction-name">Name</label>
|
<label for="reaction-name">Name</label>
|
||||||
<input
|
<input id="reaction-name" class="form-control" name="reaction-name" placeholder="Name"/>
|
||||||
id="reaction-name"
|
|
||||||
class="form-control"
|
|
||||||
name="reaction-name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="reaction-description">Description</label>
|
<label for="reaction-description">Description</label>
|
||||||
<input
|
<input id="reaction-description" class="form-control" name="reaction-description" placeholder="Description"/>
|
||||||
id="reaction-description"
|
|
||||||
class="form-control"
|
|
||||||
name="reaction-description"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<div>
|
<div>
|
||||||
<iframe
|
<iframe id="new_reaction_ketcher" src="{% static '/js/ketcher2/ketcher.html' %}" width="100%"
|
||||||
id="new_reaction_ketcher"
|
height="510"></iframe>
|
||||||
src="{% static '/js/ketcher2/ketcher.html' %}"
|
|
||||||
width="100%"
|
|
||||||
height="510"
|
|
||||||
></iframe>
|
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" name="reaction-smirks" id="reaction-smirks" />
|
<input type="hidden" name="reaction-smirks" id="reaction-smirks">
|
||||||
<p></p>
|
<p></p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="new_reaction_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="new_reaction_modal_form_submit">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#new_reaction_modal_form_submit").on("click", function (e) {
|
$('#new_reaction_modal_form_submit').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).prop("disabled",true);
|
$(this).prop("disabled",true);
|
||||||
|
|
||||||
k = getKetcher("new_reaction_ketcher");
|
k = getKetcher('new_reaction_ketcher');
|
||||||
$("#reaction-smirks").val(k.getSmiles());
|
$('#reaction-smirks').val(k.getSmiles());
|
||||||
|
|
||||||
// submit form
|
// submit form
|
||||||
$("#new_reaction_modal_form").submit();
|
$('#new_reaction_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,102 +1,54 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="new_rule_modal" tabindex="-1" aria-labelledby="new_rule_modal" aria-modal="true"
|
||||||
class="modal fade bs-modal-lg"
|
role="dialog">
|
||||||
id="new_rule_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="new_rule_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">Create a new Rule</h4>
|
<h4 class="modal-title">Create a new Rule</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="new_rule_modal_form" accept-charset="UTF-8" action="{% url 'package rule list' meta.current_package.uuid %}" data-remote="true" method="post">
|
||||||
id="new_rule_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{% url 'package rule list' meta.current_package.uuid %}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="rule-name">Name</label>
|
<label for="rule-name">Name</label>
|
||||||
<input
|
<input id="rule-name" class="form-control" name="rule-name" placeholder="Name"/>
|
||||||
id="rule-name"
|
|
||||||
class="form-control"
|
|
||||||
name="rule-name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="rule-description">Description</label>
|
<label for="rule-description">Description</label>
|
||||||
<input
|
<input id="rule-description" class="form-control" name="rule-description" placeholder="Description"/>
|
||||||
id="rule-description"
|
|
||||||
class="form-control"
|
|
||||||
name="rule-description"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
<label for="rule-smirks">SMIRKS</label>
|
<label for="rule-smirks">SMIRKS</label>
|
||||||
<input
|
<input id="rule-smirks" class="form-control" name="rule-smirks" placeholder="SMIRKS"/>
|
||||||
id="rule-smirks"
|
|
||||||
class="form-control"
|
|
||||||
name="rule-smirks"
|
|
||||||
placeholder="SMIRKS"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<div id="rule-smirks-viz"></div>
|
<div id="rule-smirks-viz"></div>
|
||||||
<input
|
<input type="hidden" name="rule-type" id="rule-type" value="SimpleAmbitRule">
|
||||||
type="hidden"
|
|
||||||
name="rule-type"
|
|
||||||
id="rule-type"
|
|
||||||
value="SimpleAmbitRule"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="new_rule_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="new_rule_modal_form_submit">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#rule-smirks").on("input", function (e) {
|
|
||||||
$("#rule-smirks-viz").empty();
|
|
||||||
|
|
||||||
smirks = $("#rule-smirks").val();
|
$('#rule-smirks').on('input', function(e) {
|
||||||
|
$('#rule-smirks-viz').empty()
|
||||||
|
|
||||||
|
smirks = $('#rule-smirks').val()
|
||||||
|
|
||||||
const img = new Image();
|
const img = new Image();
|
||||||
img.src =
|
img.src = "{% url 'depict' %}?is_query_smirks=true&smirks=" + encodeURIComponent(smirks);
|
||||||
"{% url 'depict' %}?is_query_smirks=true&smirks=" +
|
img.style.width = '100%';
|
||||||
encodeURIComponent(smirks);
|
img.style.height = '100%';
|
||||||
img.style.width = "100%";
|
img.style.objectFit = 'cover';
|
||||||
img.style.height = "100%";
|
|
||||||
img.style.objectFit = "cover";
|
|
||||||
|
|
||||||
img.onload = function () {
|
img.onload = function () {
|
||||||
$("#rule-smirks-viz").append(img);
|
$('#rule-smirks-viz').append(img);
|
||||||
};
|
};
|
||||||
|
|
||||||
img.onerror = function () {
|
img.onerror = function () {
|
||||||
@ -105,16 +57,16 @@
|
|||||||
<h4 class="alert-heading">Could not render SMIRKS!</h4>
|
<h4 class="alert-heading">Could not render SMIRKS!</h4>
|
||||||
<p>Could not render SMIRKS - Have you entered a valid SMIRKS?</a>
|
<p>Could not render SMIRKS - Have you entered a valid SMIRKS?</a>
|
||||||
</p>
|
</p>
|
||||||
</div>`;
|
</div>`
|
||||||
$("#rule-smirks-viz").append(error_tpl);
|
$('#rule-smirks-viz').append(error_tpl);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#new_rule_modal_form_submit").on("click", function (e) {
|
$('#new_rule_modal_form_submit').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).prop("disabled",true);
|
$(this).prop("disabled",true);
|
||||||
// submit form
|
// submit form
|
||||||
$("#new_rule_modal_form").submit();
|
$('#new_rule_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
<div
|
<div class="modal fade" tabindex="-1" id="new_scenario_modal" role="dialog" aria-labelledby="new_scenario_modal"
|
||||||
class="modal fade"
|
aria-hidden="true">
|
||||||
tabindex="-1"
|
|
||||||
id="new_scenario_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="new_scenario_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -16,84 +10,39 @@
|
|||||||
<h4 class="modal-title">New Scenario</h4>
|
<h4 class="modal-title">New Scenario</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="new_scenario_form" accept-charset="UTF-8" action="{{ meta.current_package.url }}/scenario"
|
||||||
id="new_scenario_form"
|
data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ meta.current_package.url }}/scenario"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">Please enter name, description, and date of scenario. Date should be
|
||||||
Please enter name, description, and date of scenario. Date should be
|
associated to the data, not the current date. For example, this could reflect the publishing
|
||||||
associated to the data, not the current date. For example, this
|
date of a study. You can leave all fields but the name empty and fill them in later.
|
||||||
could reflect the publishing date of a study. You can leave all
|
<a target="_blank" href="https://wiki.envipath.org/index.php/scenario" role="button">wiki
|
||||||
fields but the name empty and fill them in later.
|
>></a>
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://wiki.envipath.org/index.php/scenario"
|
|
||||||
role="button"
|
|
||||||
>wiki >></a
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<label for="scenario-name">Name</label>
|
<label for="scenario-name">Name</label>
|
||||||
<input
|
<input id="scenario-name" name="scenario-name" class="form-control" placeholder="Name"/>
|
||||||
id="scenario-name"
|
|
||||||
name="scenario-name"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="scenario-description">Description</label>
|
<label for="scenario-description">Description</label>
|
||||||
<input
|
<input id="scenario-description" name="scenario-description" class="form-control"
|
||||||
id="scenario-description"
|
placeholder="Description"/>
|
||||||
name="scenario-description"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
<label id="dateField" for="dateYear">Date</label>
|
<label id="dateField" for="dateYear">Date</label>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<input
|
<input type="number" id="dateYear" name="scenario-date-year" class="form-control"
|
||||||
type="number"
|
placeholder="YYYY" max="{% now "Y" %}">
|
||||||
id="dateYear"
|
|
||||||
name="scenario-date-year"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="YYYY"
|
|
||||||
max="{% now "Y" %}"
|
|
||||||
/>
|
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<input
|
<input type="number" id="dateMonth" name="scenario-date-month" min="1" max="12"
|
||||||
type="number"
|
class="form-control" placeholder="MM" >
|
||||||
id="dateMonth"
|
|
||||||
name="scenario-date-month"
|
|
||||||
min="1"
|
|
||||||
max="12"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="MM"
|
|
||||||
/>
|
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<input
|
<input type="number" id="dateDay" name="scenario-date-day" min="1" max="31" class="form-control"
|
||||||
type="number"
|
placeholder="DD">
|
||||||
id="dateDay"
|
|
||||||
name="scenario-date-day"
|
|
||||||
min="1"
|
|
||||||
max="31"
|
|
||||||
class="form-control"
|
|
||||||
placeholder="DD"
|
|
||||||
/>
|
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<label for="scenario-type">Scenario Type</label>
|
<label for="scenario-type">Scenario Type</label>
|
||||||
<select
|
<select id="scenario-type" name="scenario-type" class="form-control" data-width='100%'>
|
||||||
id="scenario-type"
|
|
||||||
name="scenario-type"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option value="empty" selected>Empty Scenario</option>
|
<option value="empty" selected>Empty Scenario</option>
|
||||||
{% for k, v in scenario_types.items %}
|
{% for k, v in scenario_types.items %}
|
||||||
<option value="{{ v.name }}">{{ k }}</option>
|
<option value="{{ v.name }}">{{ k }}</option>
|
||||||
@ -107,15 +56,12 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a id="new_scenario_modal_form_submit" class="btn btn-primary" href="#"
|
<a id="new_scenario_modal_form_submit" class="btn btn-primary" href="#">Submit</a>
|
||||||
>Submit</a
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -133,21 +79,24 @@
|
|||||||
$("div[id$='-specific-inputs']").each(function () {
|
$("div[id$='-specific-inputs']").each(function () {
|
||||||
$(this).hide();
|
$(this).hide();
|
||||||
});
|
});
|
||||||
val = $("option:selected", this).val();
|
val = $('option:selected', this).val();
|
||||||
$("#" + val + "-specific-inputs").show();
|
$("#" + val + "-specific-inputs").show();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#new_scenario_modal_form_submit").on("click", function (e) {
|
$('#new_scenario_modal_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#new_scenario_form").submit();
|
$('#new_scenario_form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
var dateYear = document.getElementById("dateYear");
|
var dateYear = document.getElementById("dateYear");
|
||||||
dateYear.addEventListener("change", () => {
|
dateYear.addEventListener("change", () => {
|
||||||
console.log("Final value after editing:", dateYear.value);
|
console.log("Final value after editing:", dateYear.value);
|
||||||
if (dateYear.value.length < 4) {
|
if (dateYear.value.length < 4) {
|
||||||
dateYear.value = new Date().getFullYear();
|
dateYear.value = {% now "Y" %};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -4,60 +4,32 @@
|
|||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h3 class="modal-title">Add Additional Information</h3>
|
<h3 class="modal-title">Add Additional Information</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<select
|
<select id="select-additional-information-type" data-actions-box='true' class="form-control" data-width='100%'>
|
||||||
id="select-additional-information-type"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option selected disabled>Select the type to add</option>
|
<option selected disabled>Select the type to add</option>
|
||||||
{% for add_inf in available_additional_information %}
|
{% for add_inf in available_additional_information %}
|
||||||
<option value="{{ add_inf.name }}">
|
<option value="{{ add_inf.name }}">{{ add_inf.display_name }}</option>
|
||||||
{{ add_inf.display_name }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
{% for add_inf in available_additional_information %}
|
{% for add_inf in available_additional_information %}
|
||||||
<div class="aiform {{ add_inf.name }}" style="display: none;">
|
<div class="aiform {{ add_inf.name }}" style="display: none;">
|
||||||
<form
|
<form id="add_{{ add_inf.name }}_add-additional-information-modal-form" accept-charset="UTF-8"
|
||||||
id="add_{{ add_inf.name }}_add-additional-information-modal-form"
|
action="" data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ add_inf.widget|safe }}
|
{{ add_inf.widget|safe }}
|
||||||
<input
|
<input type="hidden" name="hidden" value="add-additional-information">
|
||||||
type="hidden"
|
|
||||||
name="hidden"
|
|
||||||
value="add-additional-information"
|
|
||||||
/>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="add-additional-information-modal-submit">Add
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="add-additional-information-modal-submit"
|
|
||||||
>
|
|
||||||
Add
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -65,28 +37,25 @@
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#select-additional-information-type").change(function (e) {
|
|
||||||
var selectedType = $(
|
|
||||||
"#select-additional-information-type :selected",
|
|
||||||
).val();
|
|
||||||
$(".aiform").hide();
|
|
||||||
$("." + selectedType).show();
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#add-additional-information-modal-submit").click(function (e) {
|
$('#select-additional-information-type').change(function(e){
|
||||||
|
var selectedType = $("#select-additional-information-type :selected").val();
|
||||||
|
$('.aiform').hide();
|
||||||
|
$('.' + selectedType).show();
|
||||||
|
})
|
||||||
|
|
||||||
|
$('#add-additional-information-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
var selectedType = $(
|
var selectedType = $("#select-additional-information-type :selected").val();
|
||||||
"#select-additional-information-type :selected",
|
|
||||||
).val();
|
|
||||||
console.log(selectedType);
|
console.log(selectedType);
|
||||||
if (
|
if (selectedType !== null && selectedType !== undefined && selectedType !== '') {
|
||||||
selectedType !== null &&
|
$('.' + selectedType + ' >form').submit();
|
||||||
selectedType !== undefined &&
|
|
||||||
selectedType !== ""
|
|
||||||
) {
|
|
||||||
$("." + selectedType + " >form").submit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,150 +1,95 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="add_pathway_edge_modal" tabindex="-1" aria-labelledby="add_pathway_edge_modal"
|
||||||
class="modal fade bs-modal-lg"
|
|
||||||
id="add_pathway_edge_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="add_pathway_edge_modal"
|
|
||||||
aria-modal="true"
|
aria-modal="true"
|
||||||
role="dialog"
|
role="dialog">
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">Add a Reaction</h4>
|
<h4 class="modal-title">Add a Reaction</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="add_pathway_edge_modal_form" accept-charset="UTF-8"
|
||||||
id="add_pathway_edge_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{% url 'package pathway edge list' meta.current_package.uuid pathway.uuid %}"
|
action="{% url 'package pathway edge list' meta.current_package.uuid pathway.uuid %}"
|
||||||
data-remote="true"
|
data-remote="true" method="post">
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="edge-name">Name</label>
|
<label for="edge-name">Name</label>
|
||||||
<input
|
<input id="edge-name" class="form-control" name="edge-name" placeholder="Name"/>
|
||||||
id="edge-name"
|
|
||||||
class="form-control"
|
|
||||||
name="edge-name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="edge-description">Description</label>
|
<label for="edge-description">Description</label>
|
||||||
<input
|
<input id="edge-description" class="form-control" name="edge-description" placeholder="Description"/>
|
||||||
id="edge-description"
|
|
||||||
class="form-control"
|
|
||||||
name="edge-description"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-5">
|
<div class="col-xs-5">
|
||||||
<legend>Substrate(s)</legend>
|
<legend>Substrate(s)</legend>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2"></div>
|
<div class="col-xs-2">
|
||||||
|
|
||||||
|
</div>
|
||||||
<div class="col-xs-5">
|
<div class="col-xs-5">
|
||||||
<legend>Product(s)</legend>
|
<legend>Product(s)</legend>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-5">
|
<div class="col-xs-5">
|
||||||
<select
|
<select id="add_pathway_edge_substrates" name="edge-substrates"
|
||||||
id="add_pathway_edge_substrates"
|
data-actions-box='true' class="form-control" multiple data-width='100%'>
|
||||||
name="edge-substrates"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
{% for n in pathway.nodes %}
|
{% for n in pathway.nodes %}
|
||||||
<option
|
<option data-smiles="{{ n.default_node_label.smiles }}" value="{{ n.url }}">{{ n.default_node_label.name|safe }}</option>
|
||||||
data-smiles="{{ n.default_node_label.smiles }}"
|
|
||||||
value="{{ n.url }}"
|
|
||||||
>
|
|
||||||
{{ n.default_node_label.name|safe }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="col-xs-2" style="display: flex; justify-content: center; align-items: center;">
|
||||||
class="col-xs-2"
|
|
||||||
style="display: flex; justify-content: center; align-items: center;"
|
|
||||||
>
|
|
||||||
<i class="glyphicon glyphicon-arrow-right"></i>
|
<i class="glyphicon glyphicon-arrow-right"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-5">
|
<div class="col-xs-5">
|
||||||
<select
|
<select id="add_pathway_edge_products" name="edge-products"
|
||||||
id="add_pathway_edge_products"
|
data-actions-box='true' class="form-control" multiple data-width='100%'>
|
||||||
name="edge-products"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
{% for n in pathway.nodes %}
|
{% for n in pathway.nodes %}
|
||||||
<option
|
<option data-smiles="{{ n.default_node_label.smiles }}" value="{{ n.url }}">{{ n.default_node_label.name|safe }}</option>
|
||||||
data-smiles="{{ n.default_node_label.smiles }}"
|
|
||||||
value="{{ n.url }}"
|
|
||||||
>
|
|
||||||
{{ n.default_node_label.name|safe }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<p></p>
|
<p></p>
|
||||||
<div class="col-xs-12" id="reaction_image"></div>
|
<div class="col-xs-12" id="reaction_image">
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="add_pathway_edge_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="add_pathway_edge_modal_form_submit">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function reactionImage() {
|
function reactionImage() {
|
||||||
var substrates = [];
|
var substrates = [];
|
||||||
$("#add_pathway_edge_substrates option:selected").each(function () {
|
$('#add_pathway_edge_substrates option:selected').each(function () {
|
||||||
var smiles = $(this).data("smiles"); // read data-smiles attribute
|
var smiles = $(this).data('smiles'); // read data-smiles attribute
|
||||||
substrates.push(smiles);
|
substrates.push(smiles);
|
||||||
});
|
});
|
||||||
|
|
||||||
var products = [];
|
var products = []
|
||||||
$("#add_pathway_edge_products option:selected").each(function () {
|
$('#add_pathway_edge_products option:selected').each(function () {
|
||||||
var smiles = $(this).data("smiles"); // read data-smiles attribute
|
var smiles = $(this).data('smiles'); // read data-smiles attribute
|
||||||
products.push(smiles);
|
products.push(smiles);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (substrates.length > 0 && products.length > 0) {
|
if (substrates.length > 0 && products.length > 0) {
|
||||||
reaction = substrates.join(".") + ">>" + products.join(".");
|
reaction = substrates.join('.') + ">>" + products.join('.');
|
||||||
$("#reaction_image").empty();
|
$('#reaction_image').empty();
|
||||||
$("#reaction_image").append(
|
$('#reaction_image').append(
|
||||||
"<img width='100%' src='{% url 'depict' %}?smirks=" +
|
"<img width='100%' src='{% url 'depict' %}?smirks=" + encodeURIComponent(reaction) +"'>"
|
||||||
encodeURIComponent(reaction) +
|
|
||||||
"'>",
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,22 +98,30 @@
|
|||||||
$("#add_pathway_edge_substrates").selectpicker();
|
$("#add_pathway_edge_substrates").selectpicker();
|
||||||
$("#add_pathway_edge_products").selectpicker();
|
$("#add_pathway_edge_products").selectpicker();
|
||||||
|
|
||||||
$("#add_pathway_edge_substrates").on("change", function (e) {
|
$("#add_pathway_edge_substrates").on('change', function (e) {
|
||||||
reactionImage();
|
reactionImage();
|
||||||
});
|
})
|
||||||
|
|
||||||
$("#add_pathway_edge_products").on("change", function (e) {
|
$("#add_pathway_edge_products").on('change', function (e) {
|
||||||
reactionImage();
|
reactionImage();
|
||||||
});
|
})
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#add_pathway_edge_modal_form_submit").on("click", function (e) {
|
$('#add_pathway_edge_modal_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).prop("disabled", true);
|
$(this).prop("disabled", true);
|
||||||
|
|
||||||
|
|
||||||
// submit form
|
// submit form
|
||||||
$("#add_pathway_edge_modal_form").submit();
|
$('#add_pathway_edge_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,102 +1,57 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="add_pathway_node_modal" tabindex="-1" aria-labelledby="add_pathway_node_modal" aria-modal="true"
|
||||||
class="modal fade bs-modal-lg"
|
role="dialog">
|
||||||
id="add_pathway_node_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="add_pathway_node_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">Add a Node</h4>
|
<h4 class="modal-title">Add a Node</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="add_pathway_node_modal_form" accept-charset="UTF-8" action="{% url 'package pathway node list' meta.current_package.uuid pathway.uuid %}" data-remote="true" method="post">
|
||||||
id="add_pathway_node_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{% url 'package pathway node list' meta.current_package.uuid pathway.uuid %}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="node-name">Name</label>
|
<label for="node-name">Name</label>
|
||||||
<input
|
<input id="node-name" class="form-control" name="node-name" placeholder="Name"/>
|
||||||
id="node-name"
|
|
||||||
class="form-control"
|
|
||||||
name="node-name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="node-description">Description</label>
|
<label for="node-description">Description</label>
|
||||||
<input
|
<input id="node-description" class="form-control" name="node-description" placeholder="Description"/>
|
||||||
id="node-description"
|
|
||||||
class="form-control"
|
|
||||||
name="node-description"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
<label for="node-smiles">SMILES</label>
|
<label for="node-smiles">SMILES</label>
|
||||||
<input
|
<input type="text" class="form-control" name="node-smiles" placeholder="SMILES" id="node-smiles">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
name="node-smiles"
|
|
||||||
placeholder="SMILES"
|
|
||||||
id="node-smiles"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<div>
|
<div>
|
||||||
<iframe
|
<iframe id="add_node_ketcher" src="{% static '/js/ketcher2/ketcher.html' %}" width="100%"
|
||||||
id="add_node_ketcher"
|
height="510"></iframe>
|
||||||
src="{% static '/js/ketcher2/ketcher.html' %}"
|
|
||||||
width="100%"
|
|
||||||
height="510"
|
|
||||||
></iframe>
|
|
||||||
</div>
|
</div>
|
||||||
<p></p>
|
<p></p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="add_pathway_node_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="add_pathway_node_modal_form_submit">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function newStructureModalketcherToNewStructureModalTextInput() {
|
function newStructureModalketcherToNewStructureModalTextInput() {
|
||||||
$("#node-smiles").val(this.ketcher.getSmiles());
|
$('#node-smiles').val(this.ketcher.getSmiles());
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#add_node_ketcher").on("load", function () {
|
|
||||||
|
$('#add_node_ketcher').on('load', function() {
|
||||||
const checkKetcherReady = () => {
|
const checkKetcherReady = () => {
|
||||||
win = this.contentWindow;
|
win = this.contentWindow
|
||||||
if (win.ketcher && "editor" in win.ketcher) {
|
if (win.ketcher && 'editor' in win.ketcher) {
|
||||||
win.ketcher.editor.event.change.handlers.push({
|
win.ketcher.editor.event.change.handlers.push({
|
||||||
once: false,
|
once: false,
|
||||||
priority: 0,
|
priority: 0,
|
||||||
f: newStructureModalketcherToNewStructureModalTextInput,
|
f: newStructureModalketcherToNewStructureModalTextInput,
|
||||||
ketcher: win.ketcher,
|
ketcher: win.ketcher
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(checkKetcherReady, 100);
|
setTimeout(checkKetcherReady, 100);
|
||||||
@ -104,16 +59,20 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
checkKetcherReady();
|
checkKetcherReady();
|
||||||
});
|
})
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#add_pathway_node_modal_form_submit").on("click", function (e) {
|
$('#add_pathway_node_modal_form_submit').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).prop("disabled",true);
|
$(this).prop("disabled",true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// submit form
|
// submit form
|
||||||
$("#add_pathway_node_modal_form").submit();
|
$('#add_pathway_node_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,102 +1,57 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="add_structure_modal" tabindex="-1" aria-labelledby="add_structure_modal" aria-modal="true"
|
||||||
class="modal fade bs-modal-lg"
|
role="dialog">
|
||||||
id="add_structure_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="add_structure_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">Create a new Structure</h4>
|
<h4 class="modal-title">Create a new Structure</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="add_structure_modal_form" accept-charset="UTF-8" action="{% url 'package compound structure list' meta.current_package.uuid compound.uuid %}" data-remote="true" method="post">
|
||||||
id="add_structure_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{% url 'package compound structure list' meta.current_package.uuid compound.uuid %}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="structure-name">Name</label>
|
<label for="structure-name">Name</label>
|
||||||
<input
|
<input id="structure-name" class="form-control" name="structure-name" placeholder="Name"/>
|
||||||
id="structure-name"
|
|
||||||
class="form-control"
|
|
||||||
name="structure-name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="structure-description">Description</label>
|
<label for="structure-description">Description</label>
|
||||||
<input
|
<input id="structure-description" class="form-control" name="structure-description" placeholder="Description"/>
|
||||||
id="structure-description"
|
|
||||||
class="form-control"
|
|
||||||
name="structure-description"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
<label for="structure-smiles">SMILES</label>
|
<label for="structure-smiles">SMILES</label>
|
||||||
<input
|
<input type="text" class="form-control" name="structure-smiles" placeholder="SMILES" id="structure-smiles">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
name="structure-smiles"
|
|
||||||
placeholder="SMILES"
|
|
||||||
id="structure-smiles"
|
|
||||||
/>
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<div>
|
<div>
|
||||||
<iframe
|
<iframe id="add_structure_ketcher" src="{% static '/js/ketcher2/ketcher.html' %}" width="100%"
|
||||||
id="add_structure_ketcher"
|
height="510"></iframe>
|
||||||
src="{% static '/js/ketcher2/ketcher.html' %}"
|
|
||||||
width="100%"
|
|
||||||
height="510"
|
|
||||||
></iframe>
|
|
||||||
</div>
|
</div>
|
||||||
<p></p>
|
<p></p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="add_structure_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="add_structure_modal_form_submit">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function newStructureModalketcherToNewStructureModalTextInput() {
|
function newStructureModalketcherToNewStructureModalTextInput() {
|
||||||
$("#structure-smiles").val(this.ketcher.getSmiles());
|
$('#structure-smiles').val(this.ketcher.getSmiles());
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#add_structure_ketcher").on("load", function () {
|
|
||||||
|
$('#add_structure_ketcher').on('load', function() {
|
||||||
const checkKetcherReady = () => {
|
const checkKetcherReady = () => {
|
||||||
win = this.contentWindow;
|
win = this.contentWindow
|
||||||
if (win.ketcher && "editor" in win.ketcher) {
|
if (win.ketcher && 'editor' in win.ketcher) {
|
||||||
win.ketcher.editor.event.change.handlers.push({
|
win.ketcher.editor.event.change.handlers.push({
|
||||||
once: false,
|
once: false,
|
||||||
priority: 0,
|
priority: 0,
|
||||||
f: newStructureModalketcherToNewStructureModalTextInput,
|
f: newStructureModalketcherToNewStructureModalTextInput,
|
||||||
ketcher: win.ketcher,
|
ketcher: win.ketcher
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(checkKetcherReady, 100);
|
setTimeout(checkKetcherReady, 100);
|
||||||
@ -104,16 +59,20 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
checkKetcherReady();
|
checkKetcherReady();
|
||||||
});
|
})
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#add_structure_modal_form_submit").on("click", function (e) {
|
$('#add_structure_modal_form_submit').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).prop("disabled",true);
|
$(this).prop("disabled",true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// submit form
|
// submit form
|
||||||
$("#add_structure_modal_form").submit();
|
$('#add_structure_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Delete Edge -->
|
<!-- Delete Edge -->
|
||||||
<div id="delete_pathway_edge_modal" class="modal" tabindex="-1">
|
<div id="delete_pathway_edge_modal" class="modal" tabindex="-1">
|
||||||
@ -5,36 +6,19 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Delete Edge</h3>
|
<h3 class="modal-title">Delete Edge</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
Deletes the Edge. Nodes referenced by this edge will remain.
|
Deletes the Edge. Nodes referenced by this edge will remain.
|
||||||
<p></p>
|
<p></p>
|
||||||
<form
|
<form id="delete-pathway-edge-modal-form" accept-charset="UTF-8" action="" data-remote="true"
|
||||||
id="delete-pathway-edge-modal-form"
|
method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<select
|
<select id="delete_pathway_edge_edges" name="edge-url"
|
||||||
id="delete_pathway_edge_edges"
|
data-actions-box='true' class="form-control" data-width='100%'>
|
||||||
name="edge-url"
|
<option value="" disabled selected>Select Reaction to delete</option>
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option value="" disabled selected>
|
|
||||||
Select Reaction to delete
|
|
||||||
</option>
|
|
||||||
{% for e in pathway.edges %}
|
{% for e in pathway.edges %}
|
||||||
<option value="{{ e.url }}">{{ e.edge_label.name|safe }}</option>
|
<option value="{{ e.url }}">{{ e.edge_label.name|safe }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -45,16 +29,8 @@
|
|||||||
<div id="delete_pathway_edge_image"></div>
|
<div id="delete_pathway_edge_image"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="delete-pathway-edge-modal-submit">Delete</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="delete-pathway-edge-modal-submit"
|
|
||||||
>
|
|
||||||
Delete
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -63,27 +39,28 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
$("#delete_pathway_edge_edges").selectpicker();
|
$("#delete_pathway_edge_edges").selectpicker();
|
||||||
|
|
||||||
$("#delete_pathway_edge_edges").on("change", function (e) {
|
$("#delete_pathway_edge_edges").on('change', function (e) {
|
||||||
edge_url = $("#delete_pathway_edge_edges option:selected").val();
|
edge_url = $('#delete_pathway_edge_edges option:selected').val()
|
||||||
|
|
||||||
if (edge_url !== "") {
|
if (edge_url !== "") {
|
||||||
$("#delete_pathway_edge_image").empty();
|
$('#delete_pathway_edge_image').empty();
|
||||||
$("#delete_pathway_edge_image").append(
|
$('#delete_pathway_edge_image').append(
|
||||||
"<img width='100%' src='" + edge_url + "?image=svg'>",
|
"<img width='100%' src='" + edge_url + "?image=svg'>"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
$("#delete-pathway-edge-modal-submit").click(function (e) {
|
$('#delete-pathway-edge-modal-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
edge_url = $("#delete_pathway_edge_edges option:selected").val();
|
edge_url = $('#delete_pathway_edge_edges option:selected').val()
|
||||||
|
|
||||||
if (edge_url === "") {
|
if (edge_url === "") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#delete-pathway-edge-modal-form").attr("action", edge_url);
|
$('#delete-pathway-edge-modal-form').attr('action', edge_url)
|
||||||
$("#delete-pathway-edge-modal-form").submit();
|
$('#delete-pathway-edge-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,41 +6,21 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Delete Node</h3>
|
<h3 class="modal-title">Delete Node</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
Deletes the Node. Edges having this Node as Substrate or Product will be
|
Deletes the Node. Edges having this Node as Substrate or Product will be removed as well.
|
||||||
removed as well.
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<form
|
<form id="delete-pathway-node-modal-form" accept-charset="UTF-8" action="" data-remote="true"
|
||||||
id="delete-pathway-node-modal-form"
|
method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<select
|
<select id="delete_pathway_node_nodes" name="node-url"
|
||||||
id="delete_pathway_node_nodes"
|
data-actions-box='true' class="form-control" data-width='100%'>
|
||||||
name="node-url"
|
<option value="" disabled selected>Select Compound to delete</option>
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option value="" disabled selected>
|
|
||||||
Select Compound to delete
|
|
||||||
</option>
|
|
||||||
{% for n in pathway.nodes %}
|
{% for n in pathway.nodes %}
|
||||||
<option value="{{ n.url }}">
|
<option value="{{ n.url }}">{{ n.default_node_label.name|safe }}</option>
|
||||||
{{ n.default_node_label.name|safe }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<input type="hidden" id="hidden" name="hidden" value="delete"/>
|
<input type="hidden" id="hidden" name="hidden" value="delete"/>
|
||||||
@ -49,16 +29,8 @@
|
|||||||
<div id="delete_pathway_node_image"></div>
|
<div id="delete_pathway_node_image"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="delete-pathway-node-modal-submit">Delete</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="delete-pathway-node-modal-submit"
|
|
||||||
>
|
|
||||||
Delete
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -67,27 +39,28 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
$("#delete_pathway_node_nodes").selectpicker();
|
$("#delete_pathway_node_nodes").selectpicker();
|
||||||
|
|
||||||
$("#delete_pathway_node_nodes").on("change", function (e) {
|
$("#delete_pathway_node_nodes").on('change', function (e) {
|
||||||
node_url = $("#delete_pathway_node_nodes option:selected").val();
|
node_url = $('#delete_pathway_node_nodes option:selected').val()
|
||||||
|
|
||||||
if (node_url !== "") {
|
if (node_url !== "") {
|
||||||
$("#delete_pathway_node_image").empty();
|
$('#delete_pathway_node_image').empty();
|
||||||
$("#delete_pathway_node_image").append(
|
$('#delete_pathway_node_image').append(
|
||||||
"<img width='100%' src='" + node_url + "?image=svg'>",
|
"<img width='100%' src='" + node_url + "?image=svg'>"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
$("#delete-pathway-node-modal-submit").click(function (e) {
|
$('#delete-pathway-node-modal-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
node_url = $("#delete_pathway_node_nodes option:selected").val();
|
node_url = $('#delete_pathway_node_nodes option:selected').val()
|
||||||
|
|
||||||
if (node_url === "") {
|
if (node_url === "") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#delete-pathway-node-modal-form").attr("action", node_url);
|
$('#delete-pathway-node-modal-form').attr('action', node_url)
|
||||||
$("#delete-pathway-node-modal-form").submit();
|
$('#delete-pathway-node-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -5,49 +5,32 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Download Pathway as CSV</h3>
|
<h3 class="modal-title">Download Pathway as CSV</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
By clicking on Download the Pathway will be converted into a CSV and
|
By clicking on Download the Pathway will be converted into a CSV and directly downloaded.
|
||||||
directly downloaded.
|
<form id="download-pathway-csv-modal-form" accept-charset="UTF-8" action="{{ pathway.url }}"
|
||||||
<form
|
data-remote="true" method="GET">
|
||||||
id="download-pathway-csv-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ pathway.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="GET"
|
|
||||||
>
|
|
||||||
<input type="hidden" name="download" value="true"/>
|
<input type="hidden" name="download" value="true"/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="download-pathway-csv-modal-submit">Download</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="download-pathway-csv-modal-submit"
|
|
||||||
>
|
|
||||||
Download
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#download-pathway-csv-modal-submit").click(function (e) {
|
|
||||||
|
$('#download-pathway-csv-modal-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#download-pathway-csv-modal-form").submit();
|
$('#download-pathway-csv-modal-form').submit();
|
||||||
$("#download_pathway_csv_modal").modal("hide");
|
$('#download_pathway_csv_modal').modal('hide');
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -5,12 +5,7 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Download Pathway as Image</h3>
|
<h3 class="modal-title">Download Pathway as Image</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -18,26 +13,20 @@
|
|||||||
By clicking on Download the Pathway will be saved as SVG.
|
By clicking on Download the Pathway will be saved as SVG.
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="download-pathway-image-modal-submit">Download</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="download-pathway-image-modal-submit"
|
|
||||||
>
|
|
||||||
Download
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#download-pathway-image-modal-submit").click(function (e) {
|
|
||||||
|
$('#download-pathway-image-modal-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
downloadSVG($("#pwsvg")[0], '{{ pathway.name.split|join:"_" }}.svg');
|
downloadSVG($('#pwsvg')[0], '{{ pathway.name.split|join:"_" }}.svg')
|
||||||
$("#download_pathway_image_modal").modal("hide");
|
$('#download_pathway_image_modal').modal('hide');
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Compound -->
|
<!-- Edit Compound -->
|
||||||
<div id="edit_compound_modal" class="modal" tabindex="-1">
|
<div id="edit_compound_modal" class="modal" tabindex="-1">
|
||||||
@ -5,66 +6,42 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Edit Compound</h5>
|
<h5 class="modal-title">Edit Compound</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Edit Compound.</p>
|
<p>Edit Compound.</p>
|
||||||
<form
|
<form id="edit-compound-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-compound-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="compound-name">Name</label>
|
<label for="compound-name">Name</label>
|
||||||
<input
|
<input id="compound-name" class="form-control" name="compound-name" value="{{ compound.name|safe}}">
|
||||||
id="compound-name"
|
|
||||||
class="form-control"
|
|
||||||
name="compound-name"
|
|
||||||
value="{{ compound.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="compound-description">Description</label>
|
<label for="compound-description">Description</label>
|
||||||
<input
|
<input id="compound-description" type="text" class="form-control"
|
||||||
id="compound-description"
|
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
value="{{ compound.description|safe }}"
|
value="{{ compound.description|safe }}"
|
||||||
name="compound-description"
|
name="compound-description">
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-compound-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-compound-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-compound-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-compound-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-compound-modal-form").submit();
|
$('#edit-compound-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Compound -->
|
<!-- Edit Compound -->
|
||||||
<div id="edit_compound_structure_modal" class="modal" tabindex="-1">
|
<div id="edit_compound_structure_modal" class="modal" tabindex="-1">
|
||||||
@ -5,66 +6,41 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Create a Compound</h5>
|
<h5 class="modal-title">Create a Compound</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Edit a Compound Structure.</p>
|
<p>Edit a Compound Structure.</p>
|
||||||
<form
|
<form id="edit-compound-structure-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-compound-structure-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="compound-structure-name">Name</label>
|
<label for="compound-structure-name">Name</label>
|
||||||
<input
|
<input id="compound-structure-name" class="form-control" name="compound-structure-name" value="{{ compound_structure.name|safe }}">
|
||||||
id="compound-structure-name"
|
|
||||||
class="form-control"
|
|
||||||
name="compound-structure-name"
|
|
||||||
value="{{ compound_structure.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="compound-structure-description">Description</label>
|
<label for="compound-structure-description">Description</label>
|
||||||
<input
|
<input id="compound-structure-description" type="text" class="form-control"
|
||||||
id="compound-structure-description"
|
value="{{ compound_structure.description|safe }}" name="compound-structure-description">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
value="{{ compound_structure.description|safe }}"
|
|
||||||
name="compound-structure-description"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-compound-structure-modal-submit">Create</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-compound-structure-modal-submit"
|
|
||||||
>
|
|
||||||
Create
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-compound-structure-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-compound-structure-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-compound-structure-modal-form").submit();
|
$('#edit-compound-structure-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Package Permission -->
|
<!-- Edit Package Permission -->
|
||||||
<div id="edit_group_member_modal" class="modal" tabindex="-1">
|
<div id="edit_group_member_modal" class="modal" tabindex="-1">
|
||||||
@ -5,20 +6,15 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Add or Remove Group Member</h5>
|
<h5 class="modal-title">Add or Remove Group Member</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>
|
<p>
|
||||||
To add member (either User or entire Groups) to this group select the
|
To add member (either User or entire Groups) to this group select the entity you want to add below
|
||||||
entity you want to add below and click the check mark.
|
and click the check mark.
|
||||||
<br />
|
<br>
|
||||||
To remove member simply click the <code>X</code> next to the member.
|
To remove member simply click the <code>X</code> next to the member.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -32,24 +28,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form
|
<form id="modal-form-group-member" class="form-inline" role="form" accept-charset="UTF-8" action=""
|
||||||
id="modal-form-group-member"
|
data-remote="true" method="post">
|
||||||
class="form-inline"
|
|
||||||
role="form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="col-xs-8">
|
<div class="col-xs-8">
|
||||||
<select
|
<select id="select_member" name="member" data-actions-box='true'
|
||||||
id="select_member"
|
class="selPackages" data-width='100%'>
|
||||||
name="member"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="selPackages"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled selected>User</option>
|
<option disabled selected>User</option>
|
||||||
{% for u in users %}
|
{% for u in users %}
|
||||||
<option value="{{ u.url }}">{{ u.username }}</option>
|
<option value="{{ u.url }}">{{ u.username }}</option>
|
||||||
@ -59,9 +43,10 @@
|
|||||||
<option value="{{ g.url }}">{{ g.name|safe }}</option>
|
<option value="{{ g.url }}">{{ g.name|safe }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<input type="hidden" name="action" value="add" />
|
<input type="hidden" name="action" value="add">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-2">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2"></div>
|
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<button type="submit" style="width:60%;" class="btn col-xs-2">
|
<button type="submit" style="width:60%;" class="btn col-xs-2">
|
||||||
<span class="glyphicon glyphicon-ok"></span>
|
<span class="glyphicon glyphicon-ok"></span>
|
||||||
@ -72,22 +57,16 @@
|
|||||||
<p></p>
|
<p></p>
|
||||||
{% for u in group.user_member.all %}
|
{% for u in group.user_member.all %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form
|
<form id="modal-form-group-member_{{ u.uuid }}" class="form-inline" role="form"
|
||||||
id="modal-form-group-member_{{ u.uuid }}"
|
accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
class="form-inline"
|
|
||||||
role="form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="col-xs-8">
|
<div class="col-xs-8">
|
||||||
{{ u.username }}
|
{{ u.username }}
|
||||||
<input type="hidden" name="member" value="{{ u.url }}"/>
|
<input type="hidden" name="member" value="{{ u.url }}"/>
|
||||||
<input type="hidden" name="action" value="remove" />
|
<input type="hidden" name="action" value="remove">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-2">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2"></div>
|
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<button type="submit" style="width:60%;" class="btn col-xs-2">
|
<button type="submit" style="width:60%;" class="btn col-xs-2">
|
||||||
<span class="glyphicon glyphicon-trash"></span>
|
<span class="glyphicon glyphicon-trash"></span>
|
||||||
@ -99,22 +78,16 @@
|
|||||||
<p></p>
|
<p></p>
|
||||||
{% for g in group.group_member.all %}
|
{% for g in group.group_member.all %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form
|
<form id="modal-form-group-member_{{ g.uuid }}" class="form-inline" role="form"
|
||||||
id="modal-form-group-member_{{ g.uuid }}"
|
accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
class="form-inline"
|
|
||||||
role="form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="col-xs-8">
|
<div class="col-xs-8">
|
||||||
{{ g.name|safe }}
|
{{ g.name|safe }}
|
||||||
<input type="hidden" name="member" value="{{ g.url }}"/>
|
<input type="hidden" name="member" value="{{ g.url }}"/>
|
||||||
<input type="hidden" name="action" value="remove" />
|
<input type="hidden" name="action" value="remove">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-2">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2"></div>
|
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<button type="submit" style="width:60%;" class="btn col-xs-2">
|
<button type="submit" style="width:60%;" class="btn col-xs-2">
|
||||||
<span class="glyphicon glyphicon-trash"></span>
|
<span class="glyphicon glyphicon-trash"></span>
|
||||||
@ -123,29 +96,26 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-package-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-package-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-package-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-package-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-package-modal-form").submit();
|
$('#edit-package-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#select_member").selectpicker();
|
$("#select_member").selectpicker();
|
||||||
});
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,71 +1,45 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Model -->
|
<!-- Edit Model -->
|
||||||
<div id="edit_model_modal" class="modal" tabindex="-1">
|
<div id="edit_model_modal" class="modal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h3 class="modal-title">Update Model</h3>
|
<h3 class="modal-title">Update Model</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Alter Name and Description of the Model.</p>
|
<p>Alter Name and Description of the Model.</p>
|
||||||
<form
|
<form id="edit-model-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-model-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="model-name">Name</label>
|
<label for="model-name">Name</label>
|
||||||
<input
|
<input id="model-name" type="text" class="form-control" name="model-name"
|
||||||
id="model-name"
|
value="{{ model.name|safe }}">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
name="model-name"
|
|
||||||
value="{{ model.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="model-description">Description</label>
|
<label for="model-description">Description</label>
|
||||||
<input
|
<input id="model-description" type="text" class="form-control" name="model-description"
|
||||||
id="model-description"
|
value="{{ model.description|safe }}">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
name="model-description"
|
|
||||||
value="{{ model.description|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-model-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-model-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#edit-model-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-model-modal-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-model-modal-form").submit();
|
$('#edit-model-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Node -->
|
<!-- Edit Node -->
|
||||||
<div id="edit_node_modal" class="modal" tabindex="-1">
|
<div id="edit_node_modal" class="modal" tabindex="-1">
|
||||||
@ -5,66 +6,42 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Edit Node</h5>
|
<h5 class="modal-title">Edit Node</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Edit Node.</p>
|
<p>Edit Node.</p>
|
||||||
<form
|
<form id="edit-node-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-node-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="node-name">Name</label>
|
<label for="node-name">Name</label>
|
||||||
<input
|
<input id="node-name" class="form-control" name="node-name" value="{{ node.name|safe}}">
|
||||||
id="node-name"
|
|
||||||
class="form-control"
|
|
||||||
name="node-name"
|
|
||||||
value="{{ node.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="node-description">Description</label>
|
<label for="node-description">Description</label>
|
||||||
<input
|
<input id="node-description" type="text" class="form-control"
|
||||||
id="node-description"
|
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
value="{{ node.description|safe }}"
|
value="{{ node.description|safe }}"
|
||||||
name="node-description"
|
name="node-description">
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-node-modal-submit">Create</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-node-modal-submit"
|
|
||||||
>
|
|
||||||
Create
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-node-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-node-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-node-modal-form").submit();
|
$('#edit-node-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Package -->
|
<!-- Edit Package -->
|
||||||
<div id="edit_package_modal" class="modal" tabindex="-1">
|
<div id="edit_package_modal" class="modal" tabindex="-1">
|
||||||
@ -5,66 +6,40 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Update Package</h5>
|
<h5 class="modal-title">Update Package</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Edit a Package.</p>
|
<p>Edit a Package.</p>
|
||||||
<form
|
<form id="edit-package-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-package-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="package-name">Name</label>
|
<label for="package-name">Name</label>
|
||||||
<input
|
<input id="package-name" class="form-control" name="package-name" value="{{ package.name|safe}}">
|
||||||
id="package-name"
|
|
||||||
class="form-control"
|
|
||||||
name="package-name"
|
|
||||||
value="{{ package.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="package-description">Description</label>
|
<label for="package-description">Description</label>
|
||||||
<input
|
<input id="package-description" type="text" class="form-control"
|
||||||
id="package-description"
|
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
value="{{ package.description|safe }}"
|
value="{{ package.description|safe }}"
|
||||||
name="package-description"
|
name="package-description">
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-package-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-package-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-package-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-package-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-package-modal-form").submit();
|
$('#edit-package-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Package Permission -->
|
<!-- Edit Package Permission -->
|
||||||
<div id="edit_package_permissions_modal" class="modal" tabindex="-1">
|
<div id="edit_package_permissions_modal" class="modal" tabindex="-1">
|
||||||
@ -5,23 +6,16 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Grant or Revoke Permissions</h5>
|
<h5 class="modal-title">Grant or Revoke Permissions</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>
|
<p>
|
||||||
Modify permissions for this package. Note that if you give
|
Modify permissions for this package. Note that if you give <code>write</code>
|
||||||
<code>write</code> permissions to a user or group,
|
permissions to a user or group, <code>read</code> permissions will be granted automatically.
|
||||||
<code>read</code> permissions will be granted automatically.
|
<br>
|
||||||
<br />
|
To allow users to perform destructive actions, such as deleting the package, <code>owner</code>
|
||||||
To allow users to perform destructive actions, such as deleting the
|
|
||||||
package, <code>owner</code>
|
|
||||||
permissions must be granted.
|
permissions must be granted.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -41,24 +35,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form
|
<form id="modal-form-permissions" class="form-inline" role="form" accept-charset="UTF-8" action=""
|
||||||
id="modal-form-permissions"
|
data-remote="true" method="post">
|
||||||
class="form-inline"
|
|
||||||
role="form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="col-xs-4">
|
<div class="col-xs-4">
|
||||||
<select
|
<select id="select_grantee" name="grantee" data-actions-box='true'
|
||||||
id="select_grantee"
|
class="selPackages" data-width='100%'>
|
||||||
name="grantee"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="selPackages"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled selected>User</option>
|
<option disabled selected>User</option>
|
||||||
{% for u in users %}
|
{% for u in users %}
|
||||||
<option value="{{ u.url }}">{{ u.username }}</option>
|
<option value="{{ u.url }}">{{ u.username }}</option>
|
||||||
@ -79,11 +61,7 @@
|
|||||||
<input type="checkbox" name="owner" id="owner_new"/>
|
<input type="checkbox" name="owner" id="owner_new"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<button
|
<button type="submit" style="width:60%;" class="btn col-xs-2 modify-perm-button">
|
||||||
type="submit"
|
|
||||||
style="width:60%;"
|
|
||||||
class="btn col-xs-2 modify-perm-button"
|
|
||||||
>
|
|
||||||
<span class="glyphicon glyphicon-plus"></span>
|
<span class="glyphicon glyphicon-plus"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -92,50 +70,24 @@
|
|||||||
<p></p>
|
<p></p>
|
||||||
{% for up in user_permissions %}
|
{% for up in user_permissions %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form
|
<form id="modal-form-permissions_{{ up.user.uuid }}" class="form-inline" role="form"
|
||||||
id="modal-form-permissions_{{ up.user.uuid }}"
|
accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
class="form-inline"
|
|
||||||
role="form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="col-xs-4">
|
<div class="col-xs-4">
|
||||||
{{ up.user.username }}
|
{{ up.user.username }}
|
||||||
<input type="hidden" name="grantee" value="{{ up.user.url }}"/>
|
<input type="hidden" name="grantee" value="{{ up.user.url }}"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<input
|
<input type="checkbox" name="read" id="read_{{ up.user.uuid }}" {% if up.has_read %} checked {% endif %}/>
|
||||||
type="checkbox"
|
|
||||||
name="read"
|
|
||||||
id="read_{{ up.user.uuid }}"
|
|
||||||
{% if up.has_read %}checked{% endif %}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<input
|
<input type="checkbox" name="write" id="write_{{ up.user.uuid }}" {% if up.has_write %} checked {% endif %}/>
|
||||||
type="checkbox"
|
|
||||||
name="write"
|
|
||||||
id="write_{{ up.user.uuid }}"
|
|
||||||
{% if up.has_write %}checked{% endif %}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<input
|
<input type="checkbox" name="owner" id="owner_{{ up.user.uuid }}" {% if up.has_all %} checked {% endif %}/>
|
||||||
type="checkbox"
|
|
||||||
name="owner"
|
|
||||||
id="owner_{{ up.user.uuid }}"
|
|
||||||
{% if up.has_all %}checked{% endif %}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<button
|
<button type="submit" style="width:60%;" class="btn col-xs-2 modify-perm-button">
|
||||||
type="submit"
|
|
||||||
style="width:60%;"
|
|
||||||
class="btn col-xs-2 modify-perm-button"
|
|
||||||
>
|
|
||||||
<span class="glyphicon glyphicon-ok"></span>
|
<span class="glyphicon glyphicon-ok"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -145,93 +97,58 @@
|
|||||||
<p></p>
|
<p></p>
|
||||||
{% for gp in group_permissions %}
|
{% for gp in group_permissions %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form
|
<form id="modal-form-permissions_{{ gp.user.uuid }}" class="form-inline" role="form"
|
||||||
id="modal-form-permissions_{{ gp.user.uuid }}"
|
accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
class="form-inline"
|
|
||||||
role="form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="col-xs-4">
|
<div class="col-xs-4">
|
||||||
{{ gp.group.name|safe }}
|
{{ gp.group.name|safe }}
|
||||||
<input
|
<input type="hidden" name="grantee" value="{{ gp.group.url }}"/>
|
||||||
type="hidden"
|
|
||||||
name="grantee"
|
|
||||||
value="{{ gp.group.url }}"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<input
|
<input type="checkbox" name="read" id="read_{{ gp.group.uuid }}" {% if gp.has_read %} checked {% endif %}/>
|
||||||
type="checkbox"
|
|
||||||
name="read"
|
|
||||||
id="read_{{ gp.group.uuid }}"
|
|
||||||
{% if gp.has_read %}checked{% endif %}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<input
|
<input type="checkbox" name="write" id="write_{{ gp.group.uuid }}" {% if gp.has_write %} checked {% endif %}/>
|
||||||
type="checkbox"
|
|
||||||
name="write"
|
|
||||||
id="write_{{ gp.group.uuid }}"
|
|
||||||
{% if gp.has_write %}checked{% endif %}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<input
|
<input type="checkbox" name="owner" id="owner_{{ gp.group.uuid }}" {% if gp.has_all %} checked {% endif %}/>
|
||||||
type="checkbox"
|
|
||||||
name="owner"
|
|
||||||
id="owner_{{ gp.group.uuid }}"
|
|
||||||
{% if gp.has_all %}checked{% endif %}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
<button
|
<button type="submit" style="width:60%;" class="btn col-xs-2 modify-perm-button">
|
||||||
type="submit"
|
|
||||||
style="width:60%;"
|
|
||||||
class="btn col-xs-2 modify-perm-button"
|
|
||||||
>
|
|
||||||
<span class="glyphicon glyphicon-ok"></span>
|
<span class="glyphicon glyphicon-ok"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-package-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-package-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function checkboxClick() {
|
function checkboxClick() {
|
||||||
// id looks like read_3cadef24-220e-4587-9fa5-0e9a17aca2da
|
// id looks like read_3cadef24-220e-4587-9fa5-0e9a17aca2da
|
||||||
parts = this.id.split("_");
|
parts = this.id.split('_');
|
||||||
perm = parts[0];
|
perm = parts[0];
|
||||||
id = parts[1];
|
id = parts[1];
|
||||||
|
|
||||||
readbox = "#read_" + id;
|
readbox = '#read_' + id;
|
||||||
writebox = "#write_" + id;
|
writebox = '#write_' + id;
|
||||||
ownerbox = "#owner_" + id;
|
ownerbox = '#owner_' + id;
|
||||||
|
|
||||||
if (perm == "read" && !$(readbox).prop("checked")) {
|
|
||||||
|
if (perm == 'read' && !$(readbox).prop("checked")) {
|
||||||
$(writebox).prop("checked", false);
|
$(writebox).prop("checked", false);
|
||||||
$(ownerbox).prop("checked", false);
|
$(ownerbox).prop("checked", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perm == "write") {
|
if (perm == 'write') {
|
||||||
if ($(writebox).prop("checked")) {
|
if ($(writebox).prop("checked")) {
|
||||||
$(readbox).prop("checked", true);
|
$(readbox).prop("checked", true);
|
||||||
}
|
}
|
||||||
@ -240,7 +157,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perm == "owner") {
|
if (perm == 'owner') {
|
||||||
if ($(ownerbox).prop("checked")) {
|
if ($(ownerbox).prop("checked")) {
|
||||||
$(readbox).prop("checked", true);
|
$(readbox).prop("checked", true);
|
||||||
$(writebox).prop("checked", true);
|
$(writebox).prop("checked", true);
|
||||||
@ -249,16 +166,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-package-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-package-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-package-modal-form").submit();
|
$('#edit-package-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#select_grantee").selectpicker();
|
$("#select_grantee").selectpicker();
|
||||||
|
|
||||||
// Add click functions to permission checkboxes
|
// Add click functions to permission checkboxes
|
||||||
$('[id^="read_"]').on("click", checkboxClick);
|
$('[id^="read_"]').on('click', checkboxClick);
|
||||||
$('[id^="write_"]').on("click", checkboxClick);
|
$('[id^="write_"]').on('click', checkboxClick);
|
||||||
$('[id^="owner_"]').on("click", checkboxClick);
|
$('[id^="owner_"]').on('click', checkboxClick);
|
||||||
});
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -5,78 +5,42 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Update your Password</h5>
|
<h5 class="modal-title">Update your Password</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>To change your password please fill out the following inputs</p>
|
<p>To change your password please fill out the following inputs</p>
|
||||||
<form
|
<form id="edit-password-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-password-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="old-password">Old Password</label>
|
<label for="old-password">Old Password</label>
|
||||||
<input
|
<input id="old-password" class="form-control" name="old-password" type="password" autocomplete="current-password">
|
||||||
id="old-password"
|
|
||||||
class="form-control"
|
|
||||||
name="old-password"
|
|
||||||
type="password"
|
|
||||||
autocomplete="current-password"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="new-password">New Password</label>
|
<label for="new-password">New Password</label>
|
||||||
<input
|
<input id="new-password" class="form-control" name="new-password" type="password", autocomplete="new-password">
|
||||||
id="new-password"
|
|
||||||
class="form-control"
|
|
||||||
name="new-password"
|
|
||||||
type="password"
|
|
||||||
,
|
|
||||||
autocomplete="new-password"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="new-password-repeat">Repeat New Password</label>
|
<label for="new-password-repeat">Repeat New Password</label>
|
||||||
<input
|
<input id="new-password-repeat" class="form-control" name="new-password-repeat" type="password" autocomplete="new-password">
|
||||||
id="new-password-repeat"
|
|
||||||
class="form-control"
|
|
||||||
name="new-password-repeat"
|
|
||||||
type="password"
|
|
||||||
autocomplete="new-password"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-password-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-password-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-password-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-password-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-password-modal-form").submit();
|
$('#edit-password-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Pathway -->
|
<!-- Edit Pathway -->
|
||||||
<div id="edit_pathway_modal" class="modal" tabindex="-1">
|
<div id="edit_pathway_modal" class="modal" tabindex="-1">
|
||||||
@ -5,68 +6,39 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Edit Pathway</h5>
|
<h5 class="modal-title">Edit Pathway</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Edit Pathway.</p>
|
<p>Edit Pathway.</p>
|
||||||
<form
|
<form id="edit-pathway-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-pathway-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="pathway-name">Name</label>
|
<label for="pathway-name">Name</label>
|
||||||
<input
|
<input id="pathway-name" class="form-control" name="pathway-name" value="{{ pathway.name|safe }}">
|
||||||
id="pathway-name"
|
|
||||||
class="form-control"
|
|
||||||
name="pathway-name"
|
|
||||||
value="{{ pathway.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="pathway-description">Description</label>
|
<label for="pathway-description">Description</label>
|
||||||
<textarea
|
<textarea id="pathway-description" type="text" class="form-control" name="pathway-description"
|
||||||
id="pathway-description"
|
rows="10">{{ pathway.description|safe }}</textarea>
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
name="pathway-description"
|
|
||||||
rows="10"
|
|
||||||
>
|
|
||||||
{{ pathway.description|safe }}</textarea
|
|
||||||
>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-pathway-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-pathway-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-pathway-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-pathway-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-pathway-modal-form").submit();
|
$('#edit-pathway-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -5,31 +5,18 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Update Prediction Setting</h5>
|
<h5 class="modal-title">Update Prediction Setting</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>
|
<p>To update your prediction setting modify parameters in the form below und click "Update"</p>
|
||||||
To update your prediction setting modify parameters in the form below
|
<form id="edit-prediction-setting-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
und click "Update"
|
|
||||||
</p>
|
|
||||||
<form
|
|
||||||
id="edit-prediction-setting-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div id="prediction-setting" class="panel-collapse in collapse">
|
<div id="prediction-setting" class="panel-collapse collapse in">
|
||||||
<div class="panel-body list-group-item">
|
<div class="panel-body list-group-item">
|
||||||
<table class="table-bordered table-hover table">
|
|
||||||
|
<table class="table table-bordered table-hover">
|
||||||
<tr style="background-color: rgba(0, 0, 0, 0.08);">
|
<tr style="background-color: rgba(0, 0, 0, 0.08);">
|
||||||
<th scope="col" width="20%">Parameter</th>
|
<th scope="col" width="20%">Parameter</th>
|
||||||
<th scope="col" width="80%">Value</th>
|
<th scope="col" width="80%">Value</th>
|
||||||
@ -39,26 +26,13 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td width="20%">Model</td>
|
<td width="20%">Model</td>
|
||||||
<td width="80%">
|
<td width="80%">
|
||||||
<table
|
<table width="100%" class="table table-bordered table-hover">
|
||||||
width="100%"
|
|
||||||
class="table-bordered table-hover table"
|
|
||||||
>
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<select
|
<select id="model" name="model" class="form-control" data-width='100%'>
|
||||||
id="model"
|
|
||||||
name="model"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
{% for m in models %}
|
{% for m in models %}
|
||||||
<option
|
<option value="{{ m.id }}" {% if user.prediction_settings.model.url == m.url %}selected{% endif %}>{{ m.name|safe }}</option>
|
||||||
value="{{ m.id }}"
|
|
||||||
{% if user.prediction_settings.model.url == m.url %}selected{% endif %}
|
|
||||||
>
|
|
||||||
{{ m.name|safe }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
@ -76,15 +50,8 @@
|
|||||||
</td>
|
</td>
|
||||||
<td width="80%">
|
<td width="80%">
|
||||||
{% if k == 'threshold' %}
|
{% if k == 'threshold' %}
|
||||||
<input
|
<input type="number" class="form-control" name="{{k}}" value="{{v}}"
|
||||||
type="number"
|
min="0" max="1" step="0.05">
|
||||||
class="form-control"
|
|
||||||
name="{{ k }}"
|
|
||||||
value="{{ v }}"
|
|
||||||
min="0"
|
|
||||||
max="1"
|
|
||||||
step="0.05"
|
|
||||||
/>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -96,40 +63,22 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% for k, v in user.prediction_settings.truncator.items %}
|
{% for k, v in user.prediction_settings.truncator.items %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td><p>
|
||||||
<p>
|
|
||||||
{% if k == 'max_nodes' %}
|
{% if k == 'max_nodes' %}
|
||||||
Max Nodes
|
Max Nodes
|
||||||
{% elif k == 'max_depth' %}
|
{% elif k == 'max_depth' %}
|
||||||
Max Depth
|
Max Depth
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p></td>
|
||||||
</td>
|
<td><p>
|
||||||
<td>
|
|
||||||
<p>
|
|
||||||
{% if k == 'max_nodes' %}
|
{% if k == 'max_nodes' %}
|
||||||
<input
|
<input type="number" class="form-control" name="{{k}}" value="{{v}}" min="1"
|
||||||
type="number"
|
max="50" step="1">
|
||||||
class="form-control"
|
|
||||||
name="{{ k }}"
|
|
||||||
value="{{ v }}"
|
|
||||||
min="1"
|
|
||||||
max="50"
|
|
||||||
step="1"
|
|
||||||
/>
|
|
||||||
{% elif k == 'max_depth' %}
|
{% elif k == 'max_depth' %}
|
||||||
<input
|
<input type="number" class="form-control" name="{{k}}" value="{{v}}" min="1"
|
||||||
type="number"
|
max="8" step="1">
|
||||||
class="form-control"
|
|
||||||
name="{{ k }}"
|
|
||||||
value="{{ v }}"
|
|
||||||
min="1"
|
|
||||||
max="8"
|
|
||||||
step="1"
|
|
||||||
/>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p></td>
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -139,25 +88,19 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-prediction-setting-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-prediction-setting-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-prediction-setting-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-prediction-setting-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-prediction-setting-modal-form").submit();
|
$('#edit-prediction-setting-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,69 +1,45 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Reaction -->
|
<!-- Edit Reaction -->
|
||||||
<div id="edit_reaction_modal" class="modal" tabindex="-1">
|
<div id="edit_reaction_modal" class="modal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h3 class="modal-title">Update Reaction</h3>
|
<h3 class="modal-title">Update Reaction</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="edit-reaction-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-reaction-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="reaction-name">Name</label>
|
<label for="reaction-name">Name</label>
|
||||||
<input
|
<input id="reaction-name" class="form-control" name="reaction-name" value="{{ reaction.name|safe }}">
|
||||||
id="reaction-name"
|
|
||||||
class="form-control"
|
|
||||||
name="reaction-name"
|
|
||||||
value="{{ reaction.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="reaction-description">Description</label>
|
<label for="reaction-description">Description</label>
|
||||||
<input
|
<input id="reaction-description" type="text" class="form-control"
|
||||||
id="reaction-description"
|
value="{{ reaction.description|safe }}" name="reaction-description">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
value="{{ reaction.description|safe }}"
|
|
||||||
name="reaction-description"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-reaction-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-reaction-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-reaction-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-reaction-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-reaction-modal-form").submit();
|
$('#edit-reaction-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,69 +1,45 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit Rule -->
|
<!-- Edit Rule -->
|
||||||
<div id="edit_rule_modal" class="modal" tabindex="-1">
|
<div id="edit_rule_modal" class="modal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h3 class="modal-title">Update Rule</h3>
|
<h3 class="modal-title">Update Rule</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="edit-rule-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-rule-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="rule-name">Name</label>
|
<label for="rule-name">Name</label>
|
||||||
<input
|
<input id="rule-name" class="form-control" name="rule-name" value="{{ rule.name|safe }}">
|
||||||
id="rule-name"
|
|
||||||
class="form-control"
|
|
||||||
name="rule-name"
|
|
||||||
value="{{ rule.name|safe }}"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="rule-description">Description</label>
|
<label for="rule-description">Description</label>
|
||||||
<input
|
<input id="rule-description" type="text" class="form-control"
|
||||||
id="rule-description"
|
value="{{ rule.description|safe }}" name="rule-description">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
value="{{ rule.description|safe }}"
|
|
||||||
name="rule-description"
|
|
||||||
/>
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-rule-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-rule-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-rule-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-rule-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-rule-modal-form").submit();
|
$('#edit-rule-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Edit User -->
|
<!-- Edit User -->
|
||||||
<div id="edit_user_modal" class="modal" tabindex="-1">
|
<div id="edit_user_modal" class="modal" tabindex="-1">
|
||||||
@ -5,106 +6,57 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Update User Defaults</h5>
|
<h5 class="modal-title">Update User Defaults</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Edit User Defaults.</p>
|
<p>Edit User Defaults.</p>
|
||||||
<form
|
<form id="edit-user-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-user-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="default-package">Default Package</label>
|
<label for="default-package">Default Package</label>
|
||||||
<select
|
<select id="default-package" name="default-package" class="form-control" data-width='100%'>
|
||||||
id="default-package"
|
|
||||||
name="default-package"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Select a Package</option>
|
<option disabled>Select a Package</option>
|
||||||
{% for p in meta.writeable_packages %}
|
{% for p in meta.writeable_packages %}
|
||||||
<option
|
<option value="{{ p.url }}" {% if p.id == meta.user.default_package.id %}selected{% endif %}>{{ p.name|safe }}</option>
|
||||||
value="{{ p.url }}"
|
|
||||||
{% if p.id == meta.user.default_package.id %}selected{% endif %}
|
|
||||||
>
|
|
||||||
{{ p.name|safe }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="default-group">Default Group</label>
|
<label for="default-group">Default Group</label>
|
||||||
<select
|
<select id="default-group" name="default-group" class="form-control" data-width='100%'>
|
||||||
id="default-group"
|
|
||||||
name="default-group"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Select a Group</option>
|
<option disabled>Select a Group</option>
|
||||||
{% for g in meta.available_groups %}
|
{% for g in meta.available_groups %}
|
||||||
<option
|
<option value="{{ g.url }}" {% if g.id == meta.user.default_group.id %}selected{% endif %}>{{ g.name|safe }}</option>
|
||||||
value="{{ g.url }}"
|
|
||||||
{% if g.id == meta.user.default_group.id %}selected{% endif %}
|
|
||||||
>
|
|
||||||
{{ g.name|safe }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="default-prediction-setting"
|
<label for="default-prediction-setting">Default Prediction Setting</label>
|
||||||
>Default Prediction Setting</label
|
<select id="default-prediction-setting" name="default-prediction-setting" class="form-control" data-width='100%'>
|
||||||
>
|
|
||||||
<select
|
|
||||||
id="default-prediction-setting"
|
|
||||||
name="default-prediction-setting"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Select a Setting</option>
|
<option disabled>Select a Setting</option>
|
||||||
{% for s in meta.available_settings %}
|
{% for s in meta.available_settings %}
|
||||||
<option
|
<option value="{{ s.url }}" {% if s.id == meta.user.default_setting.id %}selected{% endif %}>{{ s.name|safe }}</option>
|
||||||
value="{{ s.url }}"
|
|
||||||
{% if s.id == meta.user.default_setting.id %}selected{% endif %}
|
|
||||||
>
|
|
||||||
{{ s.name|safe }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-user-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-user-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-user-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-user-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-user-modal-form").submit();
|
$('#edit-user-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
<div
|
|
||||||
class="modal fade"
|
<div class="modal fade" tabindex="-1" id="evaluate_model_modal" role="dialog" aria-labelledby="evaluate_model_modal"
|
||||||
tabindex="-1"
|
aria-hidden="true">
|
||||||
id="evaluate_model_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="evaluate_model_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -16,29 +11,17 @@
|
|||||||
<h4 class="modal-title">Evaluate Model</h4>
|
<h4 class="modal-title">Evaluate Model</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="evaluate_model_form" accept-charset="UTF-8" action="{{ current_object.url }}"
|
||||||
id="evaluate_model_form"
|
data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ current_object.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">
|
||||||
For evaluation, you need to select the packages you want to use.
|
For evaluation, you need to select the packages you want to use.
|
||||||
While the model is evaluating, you can use the model for
|
While the model is evaluating, you can use the model for predictions.
|
||||||
predictions.
|
|
||||||
</div>
|
</div>
|
||||||
<!-- Evaluation Packages -->
|
<!-- Evaluation Packages -->
|
||||||
<label for="model-evaluation-packages">Evaluation Packages</label>
|
<label for="model-evaluation-packages">Evaluation Packages</label>
|
||||||
<select
|
<select id="model-evaluation-packages" name="model-evaluation-packages" data-actions-box='true'
|
||||||
id="model-evaluation-packages"
|
class="form-control" multiple data-width='100%'>
|
||||||
name="model-evaluation-packages"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Reviewed Packages</option>
|
<option disabled>Reviewed Packages</option>
|
||||||
{% for obj in meta.readable_packages %}
|
{% for obj in meta.readable_packages %}
|
||||||
{% if obj.reviewed %}
|
{% if obj.reviewed %}
|
||||||
@ -56,38 +39,35 @@
|
|||||||
|
|
||||||
<!-- Eval Type -->
|
<!-- Eval Type -->
|
||||||
<label for="model-evaluation-type">Evaluation Type</label>
|
<label for="model-evaluation-type">Evaluation Type</label>
|
||||||
<select
|
<select id="model-evaluation-type" name="model-evaluation-type" class="form-control">
|
||||||
id="model-evaluation-type"
|
|
||||||
name="model-evaluation-type"
|
|
||||||
class="form-control"
|
|
||||||
>
|
|
||||||
<option disabled selected>Select evaluation type</option>
|
<option disabled selected>Select evaluation type</option>
|
||||||
<option value="sg">Single Generation</option>
|
<option value="sg">Single Generation</option>
|
||||||
<option value="mg">Multiple Generations</option>
|
<option value="mg">Multiple Generations</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<input type="hidden" name="hidden" value="evaluate" />
|
<input type="hidden" name="hidden" value="evaluate">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a id="evaluate_model_form_submit" class="btn btn-primary" href="#"
|
<a id="evaluate_model_form_submit" class="btn btn-primary" href="#">Evaluate</a>
|
||||||
>Evaluate</a
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
$("#model-evaluation-packages").selectpicker();
|
$("#model-evaluation-packages").selectpicker();
|
||||||
|
|
||||||
$("#evaluate_model_form_submit").on("click", function (e) {
|
$('#evaluate_model_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#evaluate_model_form").submit();
|
$('#evaluate_model_form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -5,49 +5,32 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Export Package as JSON</h3>
|
<h3 class="modal-title">Export Package as JSON</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
By clicking on Export the Package will be serialized into a JSON and
|
By clicking on Export the Package will be serialized into a JSON and directly downloaded.
|
||||||
directly downloaded.
|
<form id="export-package-modal-form" accept-charset="UTF-8" action="{{ package.url }}"
|
||||||
<form
|
data-remote="true" method="GET">
|
||||||
id="export-package-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ package.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="GET"
|
|
||||||
>
|
|
||||||
<input type="hidden" name="export" value="true"/>
|
<input type="hidden" name="export" value="true"/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="export-package-modal-form-submit">Export</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="export-package-modal-form-submit"
|
|
||||||
>
|
|
||||||
Export
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#export-package-modal-form-submit").click(function (e) {
|
|
||||||
|
$('#export-package-modal-form-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#export-package-modal-form").submit();
|
$('#export-package-modal-form').submit();
|
||||||
$("#export_package_modal").modal("hide");
|
$('#export_package_modal').modal('hide');
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Copy Object -->
|
<!-- Copy Object -->
|
||||||
<div id="generic_copy_object_modal" class="modal" tabindex="-1">
|
<div id="generic_copy_object_modal" class="modal" tabindex="-1">
|
||||||
@ -5,58 +6,30 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Copy {{ object_type|capfirst }}</h3>
|
<h3 class="modal-title">Copy {{ object_type|capfirst }}</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="generic-copy-object-modal-form" accept-charset="UTF-8" data-remote="true" method="post">
|
||||||
id="generic-copy-object-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="target-package"
|
<label for="target-package">Select the Target Package you want to copy this {{ object_type }}
|
||||||
>Select the Target Package you want to copy this {{ object_type }}
|
into</label>
|
||||||
into</label
|
<select id="target-package" name="target-package" data-actions-box='true' class="form-control"
|
||||||
>
|
data-width='100%'>
|
||||||
<select
|
|
||||||
id="target-package"
|
|
||||||
name="target-package"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled selected>Select Target Package</option>
|
<option disabled selected>Select Target Package</option>
|
||||||
{% for p in meta.writeable_packages %}
|
{% for p in meta.writeable_packages %}
|
||||||
<option value="{{ p.url }}">{{ p.name|safe }}</option>
|
<option value="{{ p.url }}">{{ p.name|safe }}</option>`
|
||||||
`
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<input type="hidden" name="hidden" value="copy" />
|
<input type="hidden" name="hidden" value="copy">
|
||||||
</form>
|
</form>
|
||||||
<div
|
<div id="copy-object-error-message" class="alert alert-danger" role="alert" style="display: none">
|
||||||
id="copy-object-error-message"
|
</div>
|
||||||
class="alert alert-danger"
|
|
||||||
role="alert"
|
|
||||||
style="display: none"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="generic-copy-object-modal-form-submit">
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="generic-copy-object-modal-form-submit"
|
|
||||||
>
|
|
||||||
Copy
|
Copy
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -65,45 +38,38 @@
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#generic-copy-object-modal-form-submit").click(function (e) {
|
|
||||||
|
$('#generic-copy-object-modal-form-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#copy-object-error-message").hide();
|
$('#copy-object-error-message').hide()
|
||||||
|
|
||||||
const packageUrl = $("#target-package").find(":selected").val();
|
const packageUrl = $('#target-package').find(":selected").val();
|
||||||
|
|
||||||
if (
|
if (packageUrl === 'Select Target Package' || packageUrl === '' || packageUrl === null || packageUrl === undefined) {
|
||||||
packageUrl === "Select Target Package" ||
|
|
||||||
packageUrl === "" ||
|
|
||||||
packageUrl === null ||
|
|
||||||
packageUrl === undefined
|
|
||||||
) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const formData = {
|
const formData = {
|
||||||
hidden: "copy",
|
hidden: 'copy',
|
||||||
object_to_copy: "{{ current_object.url }}",
|
object_to_copy: '{{ current_object.url }}',
|
||||||
};
|
}
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "post",
|
type: 'post',
|
||||||
data: formData,
|
data: formData,
|
||||||
url: packageUrl,
|
url: packageUrl,
|
||||||
success: function (data, textStatus) {
|
success: function (data, textStatus) {
|
||||||
window.location.href = data.success;
|
window.location.href = data.success;
|
||||||
},
|
},
|
||||||
error: function (jqXHR, textStatus, errorThrown) {
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
if (jqXHR.responseJSON.error.indexOf("to the same package") > -1) {
|
if (jqXHR.responseJSON.error.indexOf('to the same package') > -1) {
|
||||||
$("#copy-object-error-message").append(
|
$('#copy-object-error-message').append('<p>The target Package is the same as the source Package. Please select another target!</p>');
|
||||||
"<p>The target Package is the same as the source Package. Please select another target!</p>",
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
$("#copy-object-error-message").append(
|
$('#copy-object-error-message').append('<p>' + jqXHR.responseJSON.error + '</p>');
|
||||||
"<p>" + jqXHR.responseJSON.error + "</p>",
|
}
|
||||||
);
|
$('#copy-object-error-message').show();
|
||||||
}
|
}
|
||||||
$("#copy-object-error-message").show();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -5,54 +5,38 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Delete {{ object_type|capfirst }}</h3>
|
<h3 class="modal-title">Delete {{ object_type|capfirst }}</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
{% if object_type == 'user' %}
|
{% if object_type == 'user' %}
|
||||||
Clicking "Delete" will <strong>permanently</strong> delete the User
|
Clicking "Delete" will <strong>permanently</strong> delete the User and associated data.
|
||||||
and associated data. This action can't be undone!
|
This action can't be undone!
|
||||||
{% else %}
|
{% else %}
|
||||||
Deletes the {{ object_type|capfirst }}. Related objects that depend on
|
Deletes the {{ object_type|capfirst }}. Related objects that depend on this {{ object_type|capfirst }}
|
||||||
this {{ object_type|capfirst }} will be deleted as well.
|
will be deleted as well.
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form
|
<form id="generic-delete-modal-form" accept-charset="UTF-8" action="{{ current_object.url }}"
|
||||||
id="generic-delete-modal-form"
|
data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ current_object.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" id="hidden" name="hidden" value="delete"/>
|
<input type="hidden" id="hidden" name="hidden" value="delete"/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="generic-delete-modal-form-submit">Delete</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="generic-delete-modal-form-submit"
|
|
||||||
>
|
|
||||||
Delete
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#generic-delete-modal-form-submit").click(function (e) {
|
|
||||||
|
$('#generic-delete-modal-form-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#generic-delete-modal-form").submit();
|
$('#generic-delete-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@ -47,110 +48,66 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="set_aliases_modal" tabindex="-1" aria-labelledby="set_aliases_modal"
|
||||||
class="modal fade bs-modal-lg"
|
aria-modal="true" role="dialog">
|
||||||
id="set_aliases_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="set_aliases_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">
|
<h4 class="modal-title">Set Aliases for {{ current_object.name|safe }}</h4>
|
||||||
Set Aliases for {{ current_object.name|safe }}
|
|
||||||
</h4>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="set_aliases_modal_form" accept-charset="UTF-8" action="{{ current_object.url }}"
|
||||||
id="set_aliases_modal_form"
|
data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ current_object.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="alias-input">Aliases:</label>
|
<label for="alias-input">Aliases:</label>
|
||||||
<div class="form-control alias-container" id="alias-box">
|
<div class="form-control alias-container" id="alias-box">
|
||||||
{% for alias in current_object.aliases %}
|
{% for alias in current_object.aliases %}
|
||||||
<span class="alias"
|
<span class="alias">{{ alias|escape }}<span class="remove">×</span></span>
|
||||||
>{{ alias|escape }}<span class="remove">×</span></span
|
|
||||||
>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<input
|
<input type="text" id="alias-input" class="alias-input" placeholder="Add Alias...">
|
||||||
type="text"
|
|
||||||
id="alias-input"
|
|
||||||
class="alias-input"
|
|
||||||
placeholder="Add Alias..."
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div
|
<div id="add-alias-error-message" class="alert alert-danger" role="alert" style="display: none">
|
||||||
id="add-alias-error-message"
|
</div>
|
||||||
class="alert alert-danger"
|
|
||||||
role="alert"
|
|
||||||
style="display: none"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close</button>
|
||||||
type="button"
|
<button type="button" class="btn btn-primary" id="set_aliases_modal_form_submit">Submit</button>
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="set_aliases_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
function addAlias(aliasText) {
|
function addAlias(aliasText) {
|
||||||
aliasText = aliasText.trim();
|
aliasText = aliasText.trim();
|
||||||
if (aliasText === "") return;
|
if (aliasText === '') return;
|
||||||
|
|
||||||
// Avoid duplicate aliass
|
// Avoid duplicate aliass
|
||||||
var exists = false;
|
var exists = false;
|
||||||
$("#alias-box .alias").each(function () {
|
$('#alias-box .alias').each(function () {
|
||||||
if (
|
if ($(this).text().replace('×', '').trim().toLowerCase() === aliasText.toLowerCase()) {
|
||||||
$(this).text().replace("×", "").trim().toLowerCase() ===
|
|
||||||
aliasText.toLowerCase()
|
|
||||||
) {
|
|
||||||
exists = true;
|
exists = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
var aliasHtml =
|
var aliasHtml = '<span class="alias">' + $('<div>').text(aliasText).html() +
|
||||||
'<span class="alias">' +
|
|
||||||
$("<div>").text(aliasText).html() +
|
|
||||||
'<span class="remove">×</span></span>';
|
'<span class="remove">×</span></span>';
|
||||||
$(aliasHtml).insertBefore("#alias-input");
|
$(aliasHtml).insertBefore('#alias-input');
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#alias-input").val("");
|
$('#alias-input').val('');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add alias when Enter is pressed
|
// Add alias when Enter is pressed
|
||||||
$("#alias-input").on("keypress", function (e) {
|
$('#alias-input').on('keypress', function (e) {
|
||||||
if (e.which === 13) {
|
if (e.which === 13) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
addAlias($(this).val());
|
addAlias($(this).val());
|
||||||
@ -158,56 +115,56 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Add alias when input loses focus
|
// Add alias when input loses focus
|
||||||
$("#alias-input").on("blur", function () {
|
$('#alias-input').on('blur', function () {
|
||||||
var val = $(this).val();
|
var val = $(this).val();
|
||||||
if (val.trim() !== "") {
|
if (val.trim() !== '') {
|
||||||
addAlias(val);
|
addAlias(val);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove alias when clicking ×
|
// Remove alias when clicking ×
|
||||||
$("#alias-box").on("click", ".remove", function () {
|
$('#alias-box').on('click', '.remove', function () {
|
||||||
$(this).closest(".alias").remove();
|
$(this).closest('.alias').remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Focus input when clicking the container
|
// Focus input when clicking the container
|
||||||
$("#alias-box").on("click", function () {
|
$('#alias-box').on('click', function () {
|
||||||
$("#alias-input").focus();
|
$('#alias-input').focus();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#set_aliases_modal_form_submit").on("click", function (e) {
|
|
||||||
|
$('#set_aliases_modal_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
let aliases = [];
|
let aliases = [];
|
||||||
$("#alias-box .alias").each(function () {
|
$('#alias-box .alias').each(function () {
|
||||||
aliases.push($(this).text().replace("×", "").trim());
|
aliases.push($(this).text().replace('×', '').trim())
|
||||||
});
|
});
|
||||||
|
|
||||||
if (aliases.length === 0) {
|
if (aliases.length === 0) {
|
||||||
// Set empty string for deletion of all aliases
|
// Set empty string for deletion of all aliases
|
||||||
// If empty list is sent, its gets removed entirely from post data
|
// If empty list is sent, its gets removed entirely from post data
|
||||||
aliases = [""];
|
aliases = ['']
|
||||||
}
|
}
|
||||||
|
|
||||||
formData = {
|
formData = {
|
||||||
aliases: aliases,
|
'aliases': aliases
|
||||||
};
|
}
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "post",
|
type: 'post',
|
||||||
data: formData,
|
data: formData,
|
||||||
url: "{{ current_object.url }}",
|
url: '{{ current_object.url }}',
|
||||||
traditional: true,
|
traditional: true,
|
||||||
success: function (data, textStatus) {
|
success: function (data, textStatus) {
|
||||||
window.location.href = data.success;
|
window.location.href = data.success;
|
||||||
},
|
},
|
||||||
error: function (jqXHR, textStatus, errorThrown) {
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
$("#add-alias-error-message").append(
|
$('#add-alias-error-message').append('<p>Setting aliases failed!</p>');
|
||||||
"<p>Setting aliases failed!</p>",
|
$('#add-alias-error-message').show(); }
|
||||||
);
|
|
||||||
$("#add-alias-error-message").show();
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Delete Object -->
|
<!-- Delete Object -->
|
||||||
<div id="generic_set_external_reference_modal" class="modal" tabindex="-1">
|
<div id="generic_set_external_reference_modal" class="modal" tabindex="-1">
|
||||||
@ -5,47 +6,25 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Add External References</h3>
|
<h3 class="modal-title">Add External References</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="generic-set-external-reference-modal-form" accept-charset="UTF-8"
|
||||||
id="generic-set-external-reference-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ current_object.url }}"
|
action="{{ current_object.url }}"
|
||||||
data-remote="true"
|
data-remote="true" method="post">
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="database-select"
|
<label for="database-select">Select the Database you want to attach an External Reference
|
||||||
>Select the Database you want to attach an External Reference
|
for</label>
|
||||||
for</label
|
<select id="database-select" name="selected-database" data-actions-box='true' class="form-control"
|
||||||
>
|
data-width='100%'>
|
||||||
<select
|
|
||||||
id="database-select"
|
|
||||||
name="selected-database"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled selected>Select Database</option>
|
<option disabled selected>Select Database</option>
|
||||||
{% for entity, databases in meta.external_databases.items %}
|
{% for entity, databases in meta.external_databases.items %}
|
||||||
{% if entity == object_type %}
|
{% if entity == object_type %}
|
||||||
{% for db in databases %}
|
{% for db in databases %}
|
||||||
<option
|
<option id="db-select-{{ db.database.pk }}" data-input-placeholder="{{ db.placeholder }}"
|
||||||
id="db-select-{{ db.database.pk }}"
|
value="{{ db.database.id }}">{{ db.database.name|safe }}</option>`
|
||||||
data-input-placeholder="{{ db.placeholder }}"
|
|
||||||
value="{{ db.database.id }}"
|
|
||||||
>
|
|
||||||
{{ db.database.name|safe }}
|
|
||||||
</option>
|
|
||||||
`
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -53,45 +32,30 @@
|
|||||||
<p></p>
|
<p></p>
|
||||||
<div id="input-div" style="display: none">
|
<div id="input-div" style="display: none">
|
||||||
<label for="identifier" >The reference</label>
|
<label for="identifier" >The reference</label>
|
||||||
<input
|
<input type="text" id="identifier" name="identifier" class="form-control" placeholder="">
|
||||||
type="text"
|
|
||||||
id="identifier"
|
|
||||||
name="identifier"
|
|
||||||
class="form-control"
|
|
||||||
placeholder=""
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="generic-set-external-reference-modal-form-submit">Submit</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="generic-set-external-reference-modal-form-submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
$("#database-select").on("change", function () {
|
$("#database-select").on("change", function () {
|
||||||
let selected = $(this).val();
|
let selected = $(this).val();
|
||||||
$("#identifier").attr(
|
$("#identifier").attr("placeholder", $('#db-select-' + selected).data('input-placeholder'));
|
||||||
"placeholder",
|
|
||||||
$("#db-select-" + selected).data("input-placeholder"),
|
|
||||||
);
|
|
||||||
$("#input-div").show();
|
$("#input-div").show();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#generic-set-external-reference-modal-form-submit").click(function (e) {
|
$('#generic-set-external-reference-modal-form-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#generic-set-external-reference-modal-form").submit();
|
$('#generic-set-external-reference-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,71 +1,37 @@
|
|||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="set_scenario_modal" tabindex="-1" aria-labelledby="set_scenario_modal"
|
||||||
class="modal fade bs-modal-lg"
|
aria-modal="true" role="dialog">
|
||||||
id="set_scenario_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="set_scenario_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">
|
<h4 class="modal-title">Set Scenarios for {{ current_object.name|safe }}</h4>
|
||||||
Set Scenarios for {{ current_object.name|safe }}
|
|
||||||
</h4>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div id="loading_scenario_div" class="text-center"></div>
|
<div id="loading_scenario_div" class="text-center"></div>
|
||||||
<form
|
<form id="set_scenario_modal_form" accept-charset="UTF-8" action="{{ current_object.url }}"
|
||||||
id="set_scenario_modal_form"
|
data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ current_object.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="scenario-select">Scenarios</label>
|
<label for="scenario-select">Scenarios</label>
|
||||||
<select
|
<select id="scenario-select" name="selected-scenarios" data-actions-box='true' class="form-control"
|
||||||
id="scenario-select"
|
multiple data-width='100%'>
|
||||||
name="selected-scenarios"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
multiple
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Select Scenarios</option>
|
<option disabled>Select Scenarios</option>
|
||||||
<option value="" hidden></option>
|
<option value="" hidden></option>
|
||||||
</select>
|
</select>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="set_scenario_modal_form_submit"
|
|
||||||
>
|
|
||||||
Submit
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="set_scenario_modal_form_submit">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{# prettier-ignore-start #}
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
@ -109,4 +75,3 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{# prettier-ignore-end #}
|
|
||||||
|
|||||||
@ -5,33 +5,18 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 class="modal-title">Identify Missing Rules</h3>
|
<h3 class="modal-title">Identify Missing Rules</h3>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
By clicking on Download we'll search the Pathway for Reactions that are
|
By clicking on Download we'll search the Pathway for Reactions that are not backed by
|
||||||
not backed by a Rule or which can be assembled by chaining two rules.
|
a Rule or which can be assembled by chaining two rules.
|
||||||
<form
|
<form id="identify-missing-rules-modal-form" accept-charset="UTF-8" action="{{ pathway.url }}"
|
||||||
id="identify-missing-rules-modal-form"
|
data-remote="true" method="GET">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ pathway.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="GET"
|
|
||||||
>
|
|
||||||
<label for="rule-package">Select the Rule Package</label>
|
<label for="rule-package">Select the Rule Package</label>
|
||||||
<select
|
<select id="rule-package" name="rule-package" data-actions-box='true' class="form-control"
|
||||||
id="rule-package"
|
data-width='100%'>
|
||||||
name="rule-package"
|
|
||||||
data-actions-box="true"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Reviewed Packages</option>
|
<option disabled>Reviewed Packages</option>
|
||||||
{% for obj in meta.readable_packages %}
|
{% for obj in meta.readable_packages %}
|
||||||
{% if obj.reviewed %}
|
{% if obj.reviewed %}
|
||||||
@ -50,26 +35,20 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="identify-missing-rules-modal-submit">Download</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="identify-missing-rules-modal-submit"
|
|
||||||
>
|
|
||||||
Download
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#identify-missing-rules-modal-submit").click(function (e) {
|
|
||||||
|
$('#identify-missing-rules-modal-submit').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#identify-missing-rules-modal-form").submit();
|
$('#identify-missing-rules-modal-form').submit();
|
||||||
$("#identify_missing_rules_modal").modal("hide");
|
$('#identify_missing_rules_modal').modal('hide');
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,52 +1,35 @@
|
|||||||
<div
|
|
||||||
class="modal fade"
|
<div class="modal fade"
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
id="manage_api_token_modal"
|
id="manage_api_token_modal"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
aria-labelledby="manage_api_token_modal"
|
aria-labelledby="manage_api_token_modal"
|
||||||
aria-hidden="true"
|
aria-hidden="true">
|
||||||
>
|
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal">
|
<button type="button"
|
||||||
|
class="close"
|
||||||
|
data-dismiss="modal">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
<span class="sr-only">Close</span>
|
<span class="sr-only">Close</span>
|
||||||
</button>
|
</button>
|
||||||
<h3 class="modal-title">Manage API Token</h3>
|
<h3 class="modal-title">Manage API Token</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>
|
<p>Requesting a Token will invalidate all potential existing tokens. The new token will only be shown once, so ensure to store it in secure place</p>
|
||||||
Requesting a Token will invalidate all potential existing tokens. The
|
<form id="request_api_token_form"
|
||||||
new token will only be shown once, so ensure to store it in secure
|
|
||||||
place
|
|
||||||
</p>
|
|
||||||
<form
|
|
||||||
id="request_api_token_form"
|
|
||||||
accept-charset="UTF-8"
|
accept-charset="UTF-8"
|
||||||
action=""
|
action=""
|
||||||
data-remote="true"
|
data-remote="true"
|
||||||
method="post"
|
method="post">
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
<label for="token-name">Name</label>
|
<label for="token-name">Name</label>
|
||||||
<input
|
<input type="text" id="token-name" class="form-control" name="name" placeholder="Generic Token for {{ meta.user.username }}"/>
|
||||||
type="text"
|
|
||||||
id="token-name"
|
|
||||||
class="form-control"
|
|
||||||
name="name"
|
|
||||||
placeholder="Generic Token for {{ meta.user.username }}"
|
|
||||||
/>
|
|
||||||
<label for="valid-for">Valid for (in days)</label>
|
<label for="valid-for">Valid for (in days)</label>
|
||||||
<input
|
<input type="number" id="valid-for" class="form-control" name="valid-for" value="90"/>
|
||||||
type="number"
|
<input type="hidden" name="hidden" value="request-api-token">
|
||||||
id="valid-for"
|
|
||||||
class="form-control"
|
|
||||||
name="valid-for"
|
|
||||||
value="90"
|
|
||||||
/>
|
|
||||||
<input type="hidden" name="hidden" value="request-api-token" />
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
<div id="new-token">
|
<div id="new-token">
|
||||||
@ -54,23 +37,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="existing-tokens">
|
<div id="existing-tokens">
|
||||||
{% for t in tokens %}
|
{% for t in tokens %}
|
||||||
<form
|
<form id="delete-token-{{ forloop.counter0 }}" accept-charset="UTF-8" action="{{ meta.user.url }}" data-remote="true" method="post">
|
||||||
id="delete-token-{{ forloop.counter0 }}"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ meta.user.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="hidden" name="hidden" value="delete" />
|
<input type="hidden" name="hidden" value="delete">
|
||||||
<input type="hidden" name="token-id" value="{{ t.pk }}" />
|
<input type="hidden" name="token-id" value="{{ t.pk }}">
|
||||||
<input
|
<input type="text" class="form-control" value="{{ t.name|safe }}" disabled>
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
value="{{ t.name|safe }}"
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button type="submit" class="btn btn-danger">Delete</button>
|
<button type="submit" class="btn btn-danger">Delete</button>
|
||||||
</span>
|
</span>
|
||||||
@ -80,11 +52,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a id="manage_api_token_form_submit" class="btn btn-primary" href="#"
|
<a id="manage_api_token_form_submit"
|
||||||
>Submit</a
|
class="btn btn-primary"
|
||||||
>
|
href="#">Submit</a>
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
<button type="button"
|
||||||
Cancel
|
class="btn btn-default"
|
||||||
|
data-dismiss="modal">Cancel
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -92,15 +65,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#new-token").hide();
|
$('#new-token').hide()
|
||||||
|
|
||||||
$("#manage_api_token_form_submit").on("click", function (e) {
|
$('#manage_api_token_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
const formData = $("#request_api_token_form").serialize();
|
const formData = $('#request_api_token_form').serialize();
|
||||||
$.post("", formData, function (response) {
|
$.post('', formData, function(response) {
|
||||||
$("#new-token-pre").text(response.raw_token);
|
$('#new-token-pre').text(response.raw_token);
|
||||||
$("#new-token").show();
|
$('#new-token').show();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -114,5 +87,6 @@
|
|||||||
form.remove();
|
form.remove();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -5,48 +5,31 @@
|
|||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Publish Package</h5>
|
<h5 class="modal-title">Publish Package</h5>
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Clicking on Publish will make this Package publicly available!</p>
|
<p>Clicking on Publish will make this Package publicly available!</p>
|
||||||
<form
|
<form id="publish-package-modal-form" accept-charset="UTF-8" action="{{ current_package.url }}" data-remote="true" method="post">
|
||||||
id="publish-package-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ current_package.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="hidden" value="publish-package" />
|
<input type="hidden" name="hidden" value="publish-package">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="publish-package-modal-form-submit">Publish</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="publish-package-modal-form-submit"
|
|
||||||
>
|
|
||||||
Publish
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#publish-package-modal-form-submit").click(function (e) {
|
|
||||||
|
$('#publish-package-modal-form-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#publish-package-modal-form").submit();
|
$('#publish-package-modal-form').submit();
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
<div
|
<div class="modal fade" tabindex="-1" id="retrain_model_modal" role="dialog" aria-labelledby="retrain_model_modal"
|
||||||
class="modal fade"
|
aria-hidden="true">
|
||||||
tabindex="-1"
|
|
||||||
id="retrain_model_modal"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="retrain_model_modal"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
@ -16,40 +10,34 @@
|
|||||||
<h4 class="modal-title">Retrain Model</h4>
|
<h4 class="modal-title">Retrain Model</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="retrain_model_form" accept-charset="UTF-8" action="{{ meta.current_package.url }}/model"
|
||||||
id="retrain_model_form"
|
data-remote="true" method="post">
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ meta.current_object.url }}"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">
|
||||||
To reflect changes in the rule or data packages, you can use the
|
To reflect changes in the rule or data packages, you can use the "Retrain" button,
|
||||||
"Retrain" button, to let the model reflect the changes without
|
to let the model reflect the changes without creating a new model.
|
||||||
creating a new model. While the model is retraining, it will be
|
While the model is retraining, it will be unavailable for prediction.
|
||||||
unavailable for prediction.
|
|
||||||
</div>
|
</div>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="hidden" value="retrain" />
|
<input type="hidden" name="action" value="retrain">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a id="retrain_model_form_submit" class="btn btn-primary" href="#"
|
<a id="retrain_model_form_submit" class="btn btn-primary" href="#">Retrain</a>
|
||||||
>Retrain</a
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#retrain_model_form_submit").on("click", function (e) {
|
|
||||||
|
$('#retrain_model_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#retrain_model_form").submit();
|
$('#retrain_model_form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
<div
|
<div class="modal fade"
|
||||||
class="modal fade"
|
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
id="set_license_modal"
|
id="set_license_modal"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
aria-labelledby="set_license_modal"
|
aria-labelledby="set_license_modal"
|
||||||
aria-hidden="true"
|
aria-hidden="true">
|
||||||
>
|
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal">
|
<button type="button"
|
||||||
|
class="close"
|
||||||
|
data-dismiss="modal">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
<span class="sr-only">Close</span>
|
<span class="sr-only">Close</span>
|
||||||
</button>
|
</button>
|
||||||
@ -21,99 +21,50 @@
|
|||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<p>
|
<p>
|
||||||
Set the license for all data in this package:
|
Set the license for all data in this package:
|
||||||
<br />
|
<br> <br>
|
||||||
<br />
|
(For more information please visit our <a target="#"
|
||||||
(For more information please visit our
|
href="https://wiki.envipath.org/index.php/License">wiki</a>.)
|
||||||
<a target="#" href="https://wiki.envipath.org/index.php/License"
|
|
||||||
>wiki</a
|
|
||||||
>.)
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div id="ccfig"></div>
|
<div id="ccfig"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<form
|
<form id="set_license_form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="set_license_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="radio">
|
<div class="radio">
|
||||||
<label
|
<label><input type="radio" name="optlicense" onclick="cc()" id="ccradio">Creative commons license</label>
|
||||||
><input
|
|
||||||
type="radio"
|
|
||||||
name="optlicense"
|
|
||||||
onclick="cc()"
|
|
||||||
id="ccradio"
|
|
||||||
/>Creative commons license</label
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label
|
<label><input type="checkbox" value="" onclick="cc()" id="ccremix" disabled>Allow adaptations of your work to be shared</label>
|
||||||
><input
|
|
||||||
type="checkbox"
|
|
||||||
value=""
|
|
||||||
onclick="cc()"
|
|
||||||
id="ccremix"
|
|
||||||
disabled
|
|
||||||
/>Allow adaptations of your work to be shared</label
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label
|
<label><input type="checkbox" value="" onclick="cc()" id="ccnocom" disabled>Prohibit commercial use</label>
|
||||||
><input
|
|
||||||
type="checkbox"
|
|
||||||
value=""
|
|
||||||
onclick="cc()"
|
|
||||||
id="ccnocom"
|
|
||||||
disabled
|
|
||||||
/>Prohibit commercial use</label
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label
|
<label><input type="checkbox" value="" onclick="cc()" id="ccalike" disabled>Share only if others share alike</label>
|
||||||
><input
|
|
||||||
type="checkbox"
|
|
||||||
value=""
|
|
||||||
onclick="cc()"
|
|
||||||
id="ccalike"
|
|
||||||
disabled
|
|
||||||
/>Share only if others share alike</label
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="radio">
|
<div class="radio">
|
||||||
<label
|
<label><input type="radio" name="optlicense" onclick="cc()" id="noccradio">No creative commons license, contact package owner for license information</label>
|
||||||
><input
|
|
||||||
type="radio"
|
|
||||||
name="optlicense"
|
|
||||||
onclick="cc()"
|
|
||||||
id="noccradio"
|
|
||||||
/>No creative commons license, contact package owner for license
|
|
||||||
information</label
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" id="license" name="license" />
|
<input type="hidden" id="license" name="license">
|
||||||
|
<input type="hidden" id="license-link" name="license-link">
|
||||||
|
<input type="hidden" id="license-image-link" name="license-image-link">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button id="set_license_form_submit" class="btn btn-primary">
|
<button id="set_license_form_submit" class="btn btn-primary">Submit</button>
|
||||||
Submit
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
</button>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function ccstring(ccremix, ccnocom, ccalike){
|
function ccstring(ccremix, ccnocom, ccalike){
|
||||||
var ccstring = "by";
|
var ccstring = "by";
|
||||||
|
|
||||||
@ -132,41 +83,41 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function cc() {
|
function cc() {
|
||||||
var nocc = $("#noccradio").prop("checked");
|
var nocc = $('#noccradio').prop('checked')
|
||||||
var iscc = $("#ccradio").prop("checked");
|
var iscc = $('#ccradio').prop('checked');
|
||||||
|
|
||||||
if(nocc) {
|
if(nocc) {
|
||||||
$("#ccradio").prop("checked", false);
|
$('#ccradio').prop('checked', false);
|
||||||
$("#ccremix").prop("checked", false);
|
$('#ccremix').prop('checked', false);
|
||||||
$("#ccnocom").prop("checked", false);
|
$('#ccnocom').prop('checked', false);
|
||||||
$("#ccalike").prop("checked", false);
|
$('#ccalike').prop('checked', false);
|
||||||
|
|
||||||
$("#ccremix").prop("disabled", true);
|
$('#ccremix').prop('disabled', true);
|
||||||
$("#ccnocom").prop("disabled", true);
|
$('#ccnocom').prop('disabled', true);
|
||||||
$("#ccalike").prop("disabled", true);
|
$('#ccalike').prop('disabled', true);
|
||||||
} else if (iscc) {
|
} else if (iscc) {
|
||||||
$("#ccremix").prop("disabled", false);
|
$('#ccremix').prop('disabled', false);
|
||||||
$("#ccnocom").prop("disabled", false);
|
$('#ccnocom').prop('disabled', false);
|
||||||
|
|
||||||
if ($("#ccremix").prop("checked")) {
|
if ($('#ccremix').prop('checked')) {
|
||||||
$("#ccalike").prop("disabled", false);
|
$('#ccalike').prop('disabled', false);
|
||||||
} else {
|
} else {
|
||||||
$("#ccalike").prop("disabled", true);
|
$('#ccalike').prop('disabled', true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var remix = $("#ccremix").prop("checked");
|
var remix = $('#ccremix').prop('checked');
|
||||||
var nocom = $("#ccnocom").prop("checked");
|
var nocom = $('#ccnocom').prop('checked');
|
||||||
var alike = $("#ccalike").prop("checked");
|
var alike = $('#ccalike').prop('checked');
|
||||||
|
|
||||||
if(nocc) {
|
if(nocc) {
|
||||||
$("#set_license_form_submit").prop("disabled", false);
|
$('#set_license_form_submit').prop('disabled', false);
|
||||||
$("#ccfig").empty();
|
$('#ccfig').empty();
|
||||||
$("#license").val("no-license");
|
$('#license').val('no-license')
|
||||||
} else if(iscc) {
|
} else if(iscc) {
|
||||||
$("#set_license_form_submit").prop("disabled", false);
|
$('#set_license_form_submit').prop('disabled', false);
|
||||||
$("#ccfig").empty();
|
$('#ccfig').empty();
|
||||||
var ccstr = ccstring(remix, nocom, alike);
|
var ccstr = ccstring(remix, nocom, alike)
|
||||||
|
|
||||||
var link = `https://creativecommons.org/licenses/${ccstr}/4.0/`;
|
var link = `https://creativecommons.org/licenses/${ccstr}/4.0/`;
|
||||||
var imageLink = `https://licensebuttons.net/l/${ccstr}/4.0/88x31.png`;
|
var imageLink = `https://licensebuttons.net/l/${ccstr}/4.0/88x31.png`;
|
||||||
@ -175,24 +126,28 @@
|
|||||||
<img src='${imageLink}'>
|
<img src='${imageLink}'>
|
||||||
</a>`;
|
</a>`;
|
||||||
|
|
||||||
$("#ccfig").append(img_tpl);
|
$('#ccfig').append(img_tpl);
|
||||||
$("#license").val(ccstr);
|
$('#license').val(ccstr);
|
||||||
|
$('#license-link').val(link);
|
||||||
|
$('#license-image-link').val(imageLink);
|
||||||
} else {
|
} else {
|
||||||
$("#ccfig").empty();
|
$('#ccfig').empty();
|
||||||
$("#set_license_form_submit").prop("disabled", true);
|
$('#set_license_form_submit').prop('disabled', true);
|
||||||
$("#license").val("no-license");
|
$('#license').val('no-license')
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
// Disable by default as nothing is selected
|
// Disable by default as nothing is selected
|
||||||
|
|
||||||
cc();
|
cc();
|
||||||
$("#set_license_form_submit").prop("disabled", true);
|
$('#set_license_form_submit').prop('disabled', true);
|
||||||
|
|
||||||
$("#set_license_form_submit").on("click", function (e) {
|
$('#set_license_form_submit').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#set_license_form").submit();
|
$('#set_license_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@ -1,62 +1,39 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Update Scenario Additional Information-->
|
<!-- Update Scenario Additional Information-->
|
||||||
<div
|
<div id="update_scenario_additional_information_modal" class="modal" tabindex="-1">
|
||||||
id="update_scenario_additional_information_modal"
|
|
||||||
class="modal"
|
|
||||||
tabindex="-1"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h3 class="modal-title">Update Additional Information</h3>
|
<h3 class="modal-title">Update Additional Information</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="edit-scenario-additional-information-modal-form" accept-charset="UTF-8" action="" data-remote="true" method="post">
|
||||||
id="edit-scenario-additional-information-modal-form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action=""
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% for widget in update_widgets %}
|
{% for widget in update_widgets %}
|
||||||
{{ widget|safe }}
|
{{ widget|safe }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<input
|
<input type="hidden" name="hidden" value="set-additional-information">
|
||||||
type="hidden"
|
|
||||||
name="hidden"
|
|
||||||
value="set-additional-information"
|
|
||||||
/>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
Close
|
<button type="button" class="btn btn-primary" id="edit-scenario-additional-information-modal-submit">Update</button>
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
id="edit-scenario-additional-information-modal-submit"
|
|
||||||
>
|
|
||||||
Update
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#edit-scenario-additional-information-modal-submit").click(function (e) {
|
|
||||||
|
$('#edit-scenario-additional-information-modal-submit').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#edit-scenario-additional-information-modal-form").submit();
|
$('#edit-scenario-additional-information-modal-form').submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,157 +1,94 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<div
|
<div class="modal fade bs-modal-lg" id="predict_modal" tabindex="-1" aria-labelledby="predict_modal" aria-modal="true"
|
||||||
class="modal fade bs-modal-lg"
|
role="dialog">
|
||||||
id="predict_modal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="predict_modal"
|
|
||||||
aria-modal="true"
|
|
||||||
role="dialog"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
aria-label="Close"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
<h4 class="modal-title">Predict a Pathway</h4>
|
<h4 class="modal-title">Predict a Pathway</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form
|
<form id="predict_modal_form" accept-charset="UTF-8" action="{{ meta.current_package.url }}/pathway" data-remote="true" method="post">
|
||||||
id="predict_modal_form"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
action="{{ meta.current_package.url }}/pathway"
|
|
||||||
data-remote="true"
|
|
||||||
method="post"
|
|
||||||
>
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<label for="name">Name</label>
|
<label for="name">Name</label>
|
||||||
<input
|
<input id="name" class="form-control" name="name" placeholder="Name"/>
|
||||||
id="name"
|
|
||||||
class="form-control"
|
|
||||||
name="name"
|
|
||||||
placeholder="Name"
|
|
||||||
/>
|
|
||||||
<label for="description">Description</label>
|
<label for="description">Description</label>
|
||||||
<input
|
<input id="description" class="form-control" name="description" placeholder="Description"/>
|
||||||
id="description"
|
|
||||||
class="form-control"
|
|
||||||
name="description"
|
|
||||||
placeholder="Description"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<label for="predict">Predict pathway or build yourself?</label>
|
<label for="predict">Predict pathway or build yourself?</label>
|
||||||
<div class="radio" id="predict">
|
<div class="radio" id="predict">
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="predict" id="radioPredict" value="predict" checked/>Predict
|
||||||
type="radio"
|
pathway
|
||||||
name="predict"
|
|
||||||
id="radioPredict"
|
|
||||||
value="predict"
|
|
||||||
checked
|
|
||||||
/>Predict pathway
|
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="predict" id="radioIncremental" value="incremental"/>Incremental
|
||||||
type="radio"
|
prediction
|
||||||
name="predict"
|
|
||||||
id="radioIncremental"
|
|
||||||
value="incremental"
|
|
||||||
/>Incremental prediction
|
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input type="radio" name="predict" id="radioBuild" value="build"/>Build pathway
|
||||||
type="radio"
|
|
||||||
name="predict"
|
|
||||||
id="radioBuild"
|
|
||||||
value="build"
|
|
||||||
/>Build pathway
|
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<label for="predict-modal-smiles">SMILES</label>
|
<label for="predict-modal-smiles">SMILES</label>
|
||||||
<input
|
<input type="text" class="form-control" name="smiles" placeholder="SMILES" id="predict-modal-smiles">
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
name="smiles"
|
|
||||||
placeholder="SMILES"
|
|
||||||
id="predict-modal-smiles"
|
|
||||||
/>
|
|
||||||
<p id="ketcher_container"></p>
|
<p id="ketcher_container"></p>
|
||||||
<div>
|
<div>
|
||||||
<iframe
|
<iframe id="predict-modal-ketcher" src="{% static '/js/ketcher2/ketcher.html' %}" width="100%"
|
||||||
id="predict-modal-ketcher"
|
height="510"></iframe>
|
||||||
src="{% static '/js/ketcher2/ketcher.html' %}"
|
|
||||||
width="100%"
|
|
||||||
height="510"
|
|
||||||
></iframe>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label for="prediction-setting">Default Prediction Setting</label>
|
<label for="prediction-setting">Default Prediction Setting</label>
|
||||||
<select
|
<select id="prediction-setting" name="prediction-setting" class="form-control"
|
||||||
id="prediction-setting"
|
data-width='100%'>
|
||||||
name="prediction-setting"
|
|
||||||
class="form-control"
|
|
||||||
data-width="100%"
|
|
||||||
>
|
|
||||||
<option disabled>Select a Setting</option>
|
<option disabled>Select a Setting</option>
|
||||||
{% for s in meta.available_settings %}
|
{% for s in meta.available_settings %}
|
||||||
<option
|
<option value="{{ s.url }}"{% if s.id == meta.user.default_setting.id %}selected{% endif %}>
|
||||||
value="{{ s.url }}"
|
{{ s.name|safe }}{% if s.id == meta.user.default_setting.id %} <i>(User default)</i>{% endif %}
|
||||||
{% if s.id == meta.user.default_setting.id %}selected{% endif %}
|
|
||||||
>
|
|
||||||
{{ s.name|safe }}{% if s.id == meta.user.default_setting.id %}
|
|
||||||
<i>(User default)</i>
|
|
||||||
{% endif %}
|
|
||||||
</option>
|
</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button
|
<button type="button" class="btn btn-secondary pull-left" data-dismiss="modal">Close
|
||||||
type="button"
|
|
||||||
class="btn btn-secondary pull-left"
|
|
||||||
data-dismiss="modal"
|
|
||||||
>
|
|
||||||
Close
|
|
||||||
</button>
|
|
||||||
<button type="button" class="btn btn-primary" id="predictButton">
|
|
||||||
Predict
|
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="predictButton">Predict</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function predictModalketcherToPredictModalTextInput() {
|
function predictModalketcherToPredictModalTextInput() {
|
||||||
$("#predict-modal-smiles").val(this.ketcher.getSmiles());
|
$('#predict-modal-smiles').val(this.ketcher.getSmiles());
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#predict-modal-ketcher").on("load", function () {
|
|
||||||
|
$('#predict-modal-ketcher').on('load', function() {
|
||||||
const checkKetcherReady = () => {
|
const checkKetcherReady = () => {
|
||||||
win = this.contentWindow;
|
win = this.contentWindow
|
||||||
if (win.ketcher && "editor" in win.ketcher) {
|
if (win.ketcher && 'editor' in win.ketcher) {
|
||||||
win.ketcher.editor.event.change.handlers.push({
|
win.ketcher.editor.event.change.handlers.push({
|
||||||
once: false,
|
once: false,
|
||||||
priority: 0,
|
priority: 0,
|
||||||
f: predictModalketcherToPredictModalTextInput,
|
f: predictModalketcherToPredictModalTextInput,
|
||||||
ketcher: win.ketcher,
|
ketcher: win.ketcher
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(checkKetcherReady, 100);
|
setTimeout(checkKetcherReady, 100);
|
||||||
@ -159,9 +96,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
checkKetcherReady();
|
checkKetcherReady();
|
||||||
});
|
})
|
||||||
|
|
||||||
$("#predictButton").on("click", function (e) {
|
$('#predictButton').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$(this).prop("disabled", true);
|
$(this).prop("disabled", true);
|
||||||
|
|
||||||
@ -172,7 +109,7 @@
|
|||||||
// existing pws...
|
// existing pws...
|
||||||
|
|
||||||
// submit form
|
// submit form
|
||||||
$("#predict_modal_form").submit();
|
$('#predict_modal_form').submit();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,686 +0,0 @@
|
|||||||
{% load static %}
|
|
||||||
<dialog id="search_modal" class="modal @max-sm:modal-top justify-center">
|
|
||||||
<div class="modal-box h-full w-lvw p-1 sm:h-8/12 sm:w-[85vw] sm:max-w-5xl">
|
|
||||||
<!-- Search Input and Mode Selector -->
|
|
||||||
<div class="form-control mb-4 w-full shrink-0">
|
|
||||||
<div class="join m-0 w-full items-center p-3">
|
|
||||||
<label class="input join-item input-ghost grow">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="lucide lucide-search-icon lucide-search"
|
|
||||||
>
|
|
||||||
<path d="m21 21-4.34-4.34" />
|
|
||||||
<circle cx="11" cy="11" r="8" />
|
|
||||||
</svg>
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
autofocus
|
|
||||||
id="modal_searchbar"
|
|
||||||
placeholder="Benfuracarb"
|
|
||||||
class="grow"
|
|
||||||
aria-label="Search"
|
|
||||||
/>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<!-- Mode Dropdown -->
|
|
||||||
<div>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
tabindex="0"
|
|
||||||
id="modal_mode_button"
|
|
||||||
popovertarget="search_dropdown_menu"
|
|
||||||
style="anchor-name:--1"
|
|
||||||
class="btn join-item btn-ghost"
|
|
||||||
>
|
|
||||||
Text
|
|
||||||
<svg
|
|
||||||
class="ml-1 h-4 w-4"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M19 9l-7 7-7-7"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
<ul
|
|
||||||
tabindex="0"
|
|
||||||
class="dropdown dropdown-end menu bg-base-200 rounded-box w-64 p-2 shadow-lg"
|
|
||||||
popover
|
|
||||||
id="search_dropdown_menu"
|
|
||||||
style="position-anchor:--anchor-2"
|
|
||||||
>
|
|
||||||
<li class="menu-title">Text</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
id="modal_dropdown_text"
|
|
||||||
class="tooltip tooltip-left"
|
|
||||||
data-tip="Search on object names and descriptions"
|
|
||||||
>
|
|
||||||
Text
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="menu-title">SMILES</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
id="modal_dropdown_smiles_default"
|
|
||||||
class="tooltip tooltip-left"
|
|
||||||
data-tip="Ignores stereochemistry and charge"
|
|
||||||
>
|
|
||||||
Default
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
id="modal_dropdown_smiles_canonical"
|
|
||||||
class="tooltip tooltip-left"
|
|
||||||
data-tip="Ignores stereochemistry, preserves charge"
|
|
||||||
>
|
|
||||||
Canonical
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
id="modal_dropdown_smiles_exact"
|
|
||||||
class="tooltip tooltip-left"
|
|
||||||
data-tip="Exact match for stereochemistry and charge"
|
|
||||||
>
|
|
||||||
Exact
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="menu-title">InChI</li>
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
id="modal_dropdown_inchikey"
|
|
||||||
class="tooltip tooltip-left"
|
|
||||||
data-tip="Search by InChIKey"
|
|
||||||
>
|
|
||||||
InChIKey
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
id="modal_search_button"
|
|
||||||
class="btn btn-xs btn-ghost join-item"
|
|
||||||
>
|
|
||||||
<kbd class="kbd kbd-sm text-base-content/50 p-1">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="lucide lucide-corner-down-left-icon lucide-corner-down-left"
|
|
||||||
>
|
|
||||||
<path d="M20 4v7a4 4 0 0 1-4 4H4" />
|
|
||||||
<path d="m9 10-5 5 5 5" />
|
|
||||||
</svg>
|
|
||||||
</kbd>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Package Selector with Pills -->
|
|
||||||
<div class="form-control mb-4 shrink-0">
|
|
||||||
<!-- Pills Container -->
|
|
||||||
<div
|
|
||||||
id="modal_package_pills_container"
|
|
||||||
class="border-base-300 m-3 flex min-h-12 flex-wrap items-center gap-2 rounded-lg border-2 border-dashed p-3"
|
|
||||||
>
|
|
||||||
<!-- Pills will be added here dynamically -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Package Dropdown Menu -->
|
|
||||||
<ul
|
|
||||||
class="dropdown dropdown-center menu bg-base-200 rounded-box max-h-96 w-80 overflow-y-auto p-2 shadow-lg"
|
|
||||||
popover
|
|
||||||
id="package_dropdown_menu"
|
|
||||||
style="position-anchor:--anchor-packages"
|
|
||||||
>
|
|
||||||
{% if unreviewed_packages %}
|
|
||||||
<li class="menu-title">Reviewed Packages</li>
|
|
||||||
{% for obj in reviewed_packages %}
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
class="package-option flex items-center justify-between"
|
|
||||||
data-package-url="{{ obj.url }}"
|
|
||||||
data-package-name="{{ obj.name }}"
|
|
||||||
>
|
|
||||||
<span>{{ obj.name }}</span>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="package-checkmark hidden h-4 w-4"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M5 13l4 4L19 7"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
<li class="menu-title">Unreviewed Packages</li>
|
|
||||||
{% for obj in unreviewed_packages %}
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
class="package-option flex items-center justify-between"
|
|
||||||
data-package-url="{{ obj.url }}"
|
|
||||||
data-package-name="{{ obj.name }}"
|
|
||||||
>
|
|
||||||
<span>{{ obj.name }}</span>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="package-checkmark hidden h-4 w-4"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M5 13l4 4L19 7"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
{% else %}
|
|
||||||
<li class="menu-title">Reviewed Packages</li>
|
|
||||||
{% for obj in reviewed_packages %}
|
|
||||||
<li>
|
|
||||||
<a
|
|
||||||
class="package-option flex items-center justify-between"
|
|
||||||
data-package-url="{{ obj.url }}"
|
|
||||||
data-package-name="{{ obj.name }}"
|
|
||||||
>
|
|
||||||
<span>{{ obj.name }}</span>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="package-checkmark hidden h-4 w-4"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M5 13l4 4L19 7"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Loading Indicator -->
|
|
||||||
<div id="search_loading" class="hidden shrink-0 justify-center py-8">
|
|
||||||
<span class="loading loading-spinner loading-lg text-primary"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Results Container - scrollable -->
|
|
||||||
<div id="search_results" class="min-h-0 flex-1 overflow-y-auto p-2"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Backdrop to close -->
|
|
||||||
<form method="dialog" class="modal-backdrop">
|
|
||||||
<button>close</button>
|
|
||||||
</form>
|
|
||||||
</dialog>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
(function () {
|
|
||||||
// Package Selector Module - Data-driven multiselect package selection
|
|
||||||
const PackageSelector = {
|
|
||||||
// Single source of truth: array of selected packages
|
|
||||||
selectedPackages: [],
|
|
||||||
|
|
||||||
elements: {
|
|
||||||
pillsContainer: null,
|
|
||||||
packageDropdown: null,
|
|
||||||
packageOptions: null,
|
|
||||||
},
|
|
||||||
|
|
||||||
init() {
|
|
||||||
this.cacheElements();
|
|
||||||
this.loadInitialSelection();
|
|
||||||
this.attachEventListeners();
|
|
||||||
this.render();
|
|
||||||
},
|
|
||||||
|
|
||||||
cacheElements() {
|
|
||||||
this.elements.pillsContainer = document.getElementById(
|
|
||||||
"modal_package_pills_container",
|
|
||||||
);
|
|
||||||
this.elements.packageDropdown = document.getElementById(
|
|
||||||
"package_dropdown_menu",
|
|
||||||
);
|
|
||||||
this.elements.packageOptions =
|
|
||||||
document.querySelectorAll(".package-option");
|
|
||||||
},
|
|
||||||
|
|
||||||
loadInitialSelection() {
|
|
||||||
// Load pre-selected packages from server-rendered pills
|
|
||||||
const existingPills =
|
|
||||||
this.elements.pillsContainer.querySelectorAll(".badge");
|
|
||||||
existingPills.forEach((pill) => {
|
|
||||||
this.selectedPackages.push({
|
|
||||||
url: pill.dataset.packageUrl,
|
|
||||||
name: pill.dataset.packageName,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// If no pills found, select all reviewed packages by default
|
|
||||||
if (this.selectedPackages.length === 0) {
|
|
||||||
// Iterate through all menu items and collect reviewed packages
|
|
||||||
const menuItems =
|
|
||||||
this.elements.packageDropdown.querySelectorAll("li");
|
|
||||||
|
|
||||||
for (const item of menuItems) {
|
|
||||||
// Check if this is the "Unreviewed Packages" menu title
|
|
||||||
if (
|
|
||||||
item.classList.contains("menu-title") &&
|
|
||||||
item.textContent.trim() === "Unreviewed Packages"
|
|
||||||
) {
|
|
||||||
break; // Stop processing after this point
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for package options (only reviewed packages reach here)
|
|
||||||
const packageOption = item.querySelector(".package-option");
|
|
||||||
if (packageOption) {
|
|
||||||
this.selectedPackages.push({
|
|
||||||
url: packageOption.dataset.packageUrl,
|
|
||||||
name: packageOption.dataset.packageName,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
attachEventListeners() {
|
|
||||||
// Toggle package selection on dropdown item click
|
|
||||||
this.elements.packageOptions.forEach((option) => {
|
|
||||||
option.addEventListener("click", (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation(); // Prevent dropdown from closing
|
|
||||||
const packageUrl = option.dataset.packageUrl;
|
|
||||||
const packageName = option.dataset.packageName;
|
|
||||||
this.togglePackageSelection(packageUrl, packageName);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Remove package when X is clicked (using event delegation)
|
|
||||||
this.elements.pillsContainer.addEventListener("click", (e) => {
|
|
||||||
if (
|
|
||||||
e.target.classList.contains("package-remove-btn") ||
|
|
||||||
e.target.closest(".package-remove-btn")
|
|
||||||
) {
|
|
||||||
const pill = e.target.closest(".badge");
|
|
||||||
if (pill) {
|
|
||||||
const packageUrl = pill.dataset.packageUrl;
|
|
||||||
this.removePackage(packageUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
togglePackageSelection(packageUrl, packageName) {
|
|
||||||
const index = this.selectedPackages.findIndex(
|
|
||||||
(pkg) => pkg.url === packageUrl,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (index !== -1) {
|
|
||||||
// Remove from selection
|
|
||||||
this.selectedPackages.splice(index, 1);
|
|
||||||
} else {
|
|
||||||
// Add to selection
|
|
||||||
this.selectedPackages.push({ url: packageUrl, name: packageName });
|
|
||||||
}
|
|
||||||
|
|
||||||
this.render();
|
|
||||||
},
|
|
||||||
|
|
||||||
removePackage(packageUrl) {
|
|
||||||
const index = this.selectedPackages.findIndex(
|
|
||||||
(pkg) => pkg.url === packageUrl,
|
|
||||||
);
|
|
||||||
if (index !== -1) {
|
|
||||||
this.selectedPackages.splice(index, 1);
|
|
||||||
this.render();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
render() {
|
|
||||||
this.renderPills();
|
|
||||||
this.renderAddButton();
|
|
||||||
this.renderCheckmarks();
|
|
||||||
},
|
|
||||||
|
|
||||||
renderPills() {
|
|
||||||
// Clear existing pills and button (except placeholder)
|
|
||||||
const pills = this.elements.pillsContainer.querySelectorAll(".badge");
|
|
||||||
pills.forEach((pill) => pill.remove());
|
|
||||||
|
|
||||||
const existingButton = this.elements.pillsContainer.querySelector(
|
|
||||||
"#modal_package_add_button",
|
|
||||||
);
|
|
||||||
if (existingButton) {
|
|
||||||
existingButton.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create pills from data
|
|
||||||
this.selectedPackages.forEach((pkg) => {
|
|
||||||
const pill = this.createPillElement(pkg.url, pkg.name);
|
|
||||||
this.elements.pillsContainer.appendChild(pill);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
renderAddButton() {
|
|
||||||
// Only render button if there are packages available
|
|
||||||
if (this.elements.packageOptions.length === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const button = document.createElement("button");
|
|
||||||
button.type = "button";
|
|
||||||
button.id = "modal_package_add_button";
|
|
||||||
button.setAttribute("popovertarget", "package_dropdown_menu");
|
|
||||||
button.style.cssText = "anchor-name:--anchor-packages";
|
|
||||||
button.className = "btn btn-sm btn-ghost gap-2 text-base-content/50";
|
|
||||||
|
|
||||||
button.innerHTML = `
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus-icon lucide-plus"><path d="M5 12h14"/><path d="M12 5v14"/></svg>
|
|
||||||
Add Package
|
|
||||||
`;
|
|
||||||
|
|
||||||
this.elements.pillsContainer.appendChild(button);
|
|
||||||
},
|
|
||||||
|
|
||||||
createPillElement(packageUrl, packageName) {
|
|
||||||
const pill = document.createElement("span");
|
|
||||||
pill.className = "badge badge-outline gap-2 max-w-xs";
|
|
||||||
pill.dataset.packageUrl = packageUrl;
|
|
||||||
pill.dataset.packageName = packageName;
|
|
||||||
|
|
||||||
pill.innerHTML = `
|
|
||||||
<span class="truncate" title="${packageName}">${packageName}</span>
|
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="h-4 w-4 cursor-pointer hover:text-error package-remove-btn flex-shrink-0 rotate-45"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none" stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<path d="M5 12h14"/><path d="M12 5v14"/>
|
|
||||||
</svg>
|
|
||||||
`;
|
|
||||||
|
|
||||||
return pill;
|
|
||||||
},
|
|
||||||
|
|
||||||
renderCheckmarks() {
|
|
||||||
// Update all checkmarks based on selected packages
|
|
||||||
this.elements.packageOptions.forEach((option) => {
|
|
||||||
const packageUrl = option.dataset.packageUrl;
|
|
||||||
const isSelected = this.selectedPackages.some(
|
|
||||||
(pkg) => pkg.url === packageUrl,
|
|
||||||
);
|
|
||||||
const checkmark = option.querySelector(".package-checkmark");
|
|
||||||
|
|
||||||
if (checkmark) {
|
|
||||||
checkmark.classList.toggle("hidden", !isSelected);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
getSelectedPackages() {
|
|
||||||
return this.selectedPackages.map((pkg) => pkg.url);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Modal and Search Management
|
|
||||||
const modal = document.getElementById("search_modal");
|
|
||||||
const searchbar = document.getElementById("modal_searchbar");
|
|
||||||
const searchButton = document.getElementById("modal_search_button");
|
|
||||||
const modeButton = document.getElementById("modal_mode_button");
|
|
||||||
const resultsDiv = document.getElementById("search_results");
|
|
||||||
const loadingDiv = document.getElementById("search_loading");
|
|
||||||
|
|
||||||
// MutationObserver to detect when modal opens
|
|
||||||
const observer = new MutationObserver((mutations) => {
|
|
||||||
mutations.forEach((mutation) => {
|
|
||||||
if (mutation.attributeName === "open" && modal.open) {
|
|
||||||
PackageSelector.render();
|
|
||||||
// Delay focus to allow CSS transitions to complete (modal has 0.3s transition)
|
|
||||||
setTimeout(() => {
|
|
||||||
searchbar.focus();
|
|
||||||
}, 320);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
observer.observe(modal, { attributes: true });
|
|
||||||
|
|
||||||
// Close modal when clicking outside (on the backdrop)
|
|
||||||
// According to DaisyUI docs: https://daisyui.com/components/modal/
|
|
||||||
// The backdrop form with method="dialog" should handle closing automatically when its button is clicked.
|
|
||||||
// We also handle clicks directly on the dialog element (backdrop area) or the backdrop form.
|
|
||||||
modal.addEventListener("click", function (event) {
|
|
||||||
const backdrop = modal.querySelector(".modal-backdrop");
|
|
||||||
const modalBox = modal.querySelector(".modal-box");
|
|
||||||
|
|
||||||
// Close if clicking directly on the dialog element (backdrop area)
|
|
||||||
// or on the backdrop form (but ensure we're not clicking on modal-box content)
|
|
||||||
if (
|
|
||||||
event.target === modal ||
|
|
||||||
(backdrop &&
|
|
||||||
(event.target === backdrop || backdrop.contains(event.target)) &&
|
|
||||||
!modalBox.contains(event.target))
|
|
||||||
) {
|
|
||||||
modal.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Clear results when modal closes
|
|
||||||
modal.addEventListener("close", function () {
|
|
||||||
resultsDiv.innerHTML = "";
|
|
||||||
loadingDiv.classList.add("hidden");
|
|
||||||
searchbar.value = "";
|
|
||||||
});
|
|
||||||
|
|
||||||
// Mode dropdown handlers
|
|
||||||
const dropdownMenu = document.getElementById("search_dropdown_menu");
|
|
||||||
|
|
||||||
const modeButtons = [
|
|
||||||
{ id: "modal_dropdown_text", text: "Text" },
|
|
||||||
{ id: "modal_dropdown_smiles_default", text: "Default" },
|
|
||||||
{ id: "modal_dropdown_smiles_canonical", text: "Canonical" },
|
|
||||||
{ id: "modal_dropdown_smiles_exact", text: "Exact" },
|
|
||||||
{ id: "modal_dropdown_inchikey", text: "InChIKey" },
|
|
||||||
];
|
|
||||||
|
|
||||||
modeButtons.forEach(({ id, text }) => {
|
|
||||||
document.getElementById(id).addEventListener("click", function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
modeButton.innerHTML =
|
|
||||||
text +
|
|
||||||
` <svg class="w-4 h-4 ml-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
|
|
||||||
</svg>`;
|
|
||||||
// Close dropdown using popover API
|
|
||||||
if (dropdownMenu && typeof dropdownMenu.hidePopover === "function") {
|
|
||||||
dropdownMenu.hidePopover();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Initialize Package Selector
|
|
||||||
PackageSelector.init();
|
|
||||||
|
|
||||||
// Search Response Handler
|
|
||||||
function handleSearchResponse(data) {
|
|
||||||
resultsDiv.innerHTML = "";
|
|
||||||
|
|
||||||
function makeContent(objs) {
|
|
||||||
let links = "";
|
|
||||||
objs.forEach((obj) => {
|
|
||||||
links += `<a href="${obj.url}" class="block px-4 py-2 hover:bg-base-300 rounded-lg transition-colors">${obj.name}</a>`;
|
|
||||||
});
|
|
||||||
return links;
|
|
||||||
}
|
|
||||||
|
|
||||||
let allEmpty = true;
|
|
||||||
let content = "";
|
|
||||||
|
|
||||||
// Category order for better UX
|
|
||||||
const categoryOrder = [
|
|
||||||
"Compounds",
|
|
||||||
"Compound Structures",
|
|
||||||
"Rules",
|
|
||||||
"Reactions",
|
|
||||||
"Pathways",
|
|
||||||
];
|
|
||||||
|
|
||||||
categoryOrder.forEach((key) => {
|
|
||||||
if (!data[key] || data[key].length < 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
allEmpty = false;
|
|
||||||
|
|
||||||
content += `
|
|
||||||
<div class="collapse collapse-arrow bg-base-200 mb-2">
|
|
||||||
<input type="checkbox" checked />
|
|
||||||
<div class="collapse-title font-medium">
|
|
||||||
${key} <span class="badge badge-neutral badge-sm ml-2">${data[key].length}</span>
|
|
||||||
</div>
|
|
||||||
<div class="collapse-content">
|
|
||||||
${makeContent(data[key])}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (allEmpty) {
|
|
||||||
resultsDiv.innerHTML = `
|
|
||||||
<div class="alert alert-warning">
|
|
||||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
|
|
||||||
</svg>
|
|
||||||
<span>No results found</span>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
} else {
|
|
||||||
resultsDiv.innerHTML = `
|
|
||||||
<div class="mb-2">
|
|
||||||
<div class="text-sm font-semibold text-base-content/70 mb-2">Results</div>
|
|
||||||
${content}
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Search Execution
|
|
||||||
function performSearch(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
const query = searchbar.value.trim();
|
|
||||||
|
|
||||||
if (!query) {
|
|
||||||
console.log("Search phrase empty, won't do search");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const selPacks = PackageSelector.getSelectedPackages();
|
|
||||||
|
|
||||||
if (selPacks.length < 1) {
|
|
||||||
console.log("No package selected, won't do search");
|
|
||||||
resultsDiv.innerHTML = `
|
|
||||||
<div class="alert alert-info">
|
|
||||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
||||||
</svg>
|
|
||||||
<span>Please select at least one package</span>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const mode = modeButton.textContent.trim().toLowerCase();
|
|
||||||
|
|
||||||
const params = new URLSearchParams();
|
|
||||||
selPacks.forEach((pack) => params.append("packages", pack));
|
|
||||||
params.append("search", query);
|
|
||||||
params.append("mode", mode);
|
|
||||||
|
|
||||||
// Show loading
|
|
||||||
loadingDiv.classList.remove("hidden");
|
|
||||||
resultsDiv.innerHTML = "";
|
|
||||||
|
|
||||||
fetch(`{{ SERVER_BASE }}/search?${params.toString()}`, {
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
Accept: "application/json",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then((response) => {
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error("Search request failed");
|
|
||||||
}
|
|
||||||
return response.json();
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
loadingDiv.classList.add("hidden");
|
|
||||||
handleSearchResponse(result);
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
loadingDiv.classList.add("hidden");
|
|
||||||
console.error("Search error:", error);
|
|
||||||
resultsDiv.innerHTML = `
|
|
||||||
<div class="alert alert-error">
|
|
||||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
||||||
</svg>
|
|
||||||
<span>Search failed. Please try again.</span>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Event listeners for search
|
|
||||||
searchButton.addEventListener("click", performSearch);
|
|
||||||
searchbar.addEventListener("keydown", function (e) {
|
|
||||||
if (e.key === "Enter") {
|
|
||||||
performSearch(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user