diff --git a/.gitignore b/.gitignore index 40a7bfc9..26cc66b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,21 +1,23 @@ +*.class +*.dump +.classpath .gradle/ .idea/ -.settings/ -.classpath .project -/build/ -/target/ -src/main/resources/edu/ucsd/sbrg/identifiersOrgRegistry/IdentifiersOrg-Registry.json -/src/scripts/ModelPolisherTemplate.* -ModelPolisher.iml -jsbml.log +.settings/ /.DS_Store +/.vscode/ +/bin +/build/ +/gradle +/lib /minimalSysBio.xml /model_polisher.log /out /src/main/resources/edu/ucsd/sbrg/example_models/output +/src/scripts/ModelPolisherTemplate.* /src/test/resources/edu/ucsd/sbrg/bigg/e_coli_core.zip -*.class -/bin -/.vscode/ -*.dump \ No newline at end of file +/target/ +ModelPolisher.iml +jsbml.log +src/main/resources/edu/ucsd/sbrg/identifiersOrgRegistry/IdentifiersOrg-Registry.json \ No newline at end of file diff --git a/README.md b/README.md index e3b2d88d..a803114f 100644 --- a/README.md +++ b/README.md @@ -3,91 +3,101 @@ -*Authors:* [Andreas Dräger](https://github.com/draeger/), [Thomas J. Zajac](https://github.com/mephenor/), [Matthias König](https://github.com/matthiaskoenig), [Kaustubh Trivedi](https://github.com/codekaust) - -[![Build Status](https://travis-ci.org/draeger-lab/ModelPolisher.svg?branch=master?style=plastic)](https://travis-ci.org/draeger-lab/ModelPolisher) -[![Stable version](https://img.shields.io/badge/Stable_version-2.0-brightgreen.svg?style=plastic)](https://github.com/draeger-lab/ModelPolisher/releases/) +[![Stable version](https://img.shields.io/badge/Stable_version-2.1-brightgreen.svg?style=plastic)](https://github.com/draeger-lab/ModelPolisher/releases/) [![DOI](http://img.shields.io/badge/DOI-10.1371%20%2F%20journal.pone.0149263-blue.svg?style=plastic)](https://doi.org/10.1371/journal.pone.0149263) [![License (MIT)](https://img.shields.io/badge/license-MIT-blue.svg?style=plastic)](http://opensource.org/licenses/MIT) -ModelPolisher accesses the [BiGG Models knowledgebase](http://bigg.ucsd.edu) to annotate and autocomplete [SBML](http://sbml.org) models. -Thereby, the program mainly relies on [BiGG identifiers](https://github.com/SBRG/bigg_models/wiki/BiGG-Models-ID-Specification-and-Guidelines) for model components. -Moreover, it fixes some apparent errors in the models and uses mappings from [AnnotateDB](https://github.com/matthiaskoenig/annotatedb) to further add annotations. +ModelPolisher is a simple single-purpose automated curation tool for SBML models. +It + +- improves the adherence to FAIR data standards as practiced in the SBML modelling community, +- implements non-binding best practices as defined by the [SBML specification]() documents, +- adds MIRIAM-style semantic annotations to models, using the [BiGG Models knowledgebase](http://bigg.ucsd.edu) and [AnnotateDB](). + +You can find comprehensive documentation on what ModelPolisher does in [our Wiki](https://github.com/draeger-lab/ModelPolisher/wiki). + +Furthermore, it can, on a best effort basis, attempt to perform minimal fixes on a model to make it valid with regards to the [SBMLValidator](). +Note however, that it will not perform curation on a model that cannot be brought into a valid state. + +Again, you find comprehensive documentation on this in [our Wiki](https://github.com/draeger-lab/ModelPolisher/wiki). + +Currently supported versions of the SBML standard are: -ModelPolisher is primarily a command-line based tool. You can run ModelPolisher locally [using `Docker`](#using-docker) or using your installation of BiGG Models database (see https://github.com/SBRG/bigg_models). +- Version 3 Level 1 + - FBC Version 2 + +You can use ModelPolisher as a tool via its [Python API client]() to our HTTP server, or locally using Docker or as a Standalone JAR. + +ModelPolisher can also be used as a Java library, building on the [JSBML]() project. # Table of Contents -* [Usage Notes](#run-ModelPolisher) +* [Performance](#performance) +* [Using ModelPolisher as a Tool](#using-modelpolisher-as-a-tool) + * [Parameters](#parameters) + * [Using the Python API package](#using-the-python-api-client- + package) * [Using Docker](#using-docker) - * [Using ModelPolisher jar](#using-jar) -* [How to cite ModelPolisher?](#cite-ModelPolisher) + * [Using ModelPolisher Jar](#using-modepolisher-jar) +* [Using ModelPolisher as a Java library](#using-modelpolisher-as-a-java-library) +* [How to cite ModelPolisher](#how-to-cite-ModelPolisher) * [Licenses](#licenses) -# Usage Notes +# Performance +We have run ModelPolisher on all models in the BiGG Database and on 3000 models available on Biomodels. Furthermore, we have evaluated it's performance on newly generated models using [CarveMe](), [Reconstructor]() and the [KBase Create Metabolic Model App](), with regards to [MEMOTE]() scores. -We recommend users to run ModelPolisher [using `docker`](#using-docker), though ModelPolisher can be run [from ModelPolisher `jar`](#using-jar), which is preferred for developers. +Here you can see a brief overview of its impact: -NOTE: ModelPolisher provides various command line arguments which can be seen using arguments `-?` and `--help`: -``` -java -jar /ModelPolisher/target/ModelPolisher-2.1.jar -? -``` +You can find a more detailed analysis in [our Wiki](). -See further documentation on the most important arguments here [here](https://github.com/draeger-lab/ModelPolisher/wiki/Command-Line-Arguments). +# Using ModelPolisher as a Tool +We recommend users to either use the [Python API client package](#using-the-python-api-client-package) or run ModelPolisher [using `docker`](#using-docker). -## Using Docker -ModelPolisher can be run in docker containers. This allows user to skip the build process, and database setup required to run ModelPolisher. Please install `docker` and `docker-compose`, if not installed already. +However, ModelPolisher can also be run [from the ModelPolisher `Jar`](#using-jar). -Clone ModelPolisher and change directory to ModelPolisher/: -``` -git clone https://github.com/draeger-lab/ModelPolisher/ -cd /ModelPolisher -``` -Now, bring up docker containers required for ModelPolisher(NOTE: You must be in `ModelPolisher/` directory): -``` -docker-compose up -``` +## Using the Python API client package +If you don't want to process large numbers of models and have an internet connection available, this is the recommended usage. -We recommend using docker-compose in non-detached mode when building containers for first time. If you have previously built ModelPolisher containers use `docker-compose up --detach`. +ModelPolisher is hosted as an HTTP server at [biodata.informatik.uni-halle.de/modelling/polisher](biodata.informatik.uni-halle.de/modelling/polisher). -NOTE: Once database backend is set-up by `docker-compose`, the databases are also available at following ports for `localhost`: -- AnnotateDB: `1013` -- BiGGDB: `1310` +We provide a [Python API client package](https://github.com/draeger-lab/MPClient) (available on PyPI) for interaction with the server. All documentation regarding usage of the API client can be found in that repository. -On running these commands, databases will be restored in respective containers. After databases are successfully set up, use the following command (in `ModelPolisher/` directory) to run ModelPolisher: -``` -docker-compose run -v :/models/ polisher --input=/models/ --output=/models/output/ --annotate-with-bigg=true --add-adb-annotations=true --output-combine=true -``` +## Using ModelPolisher Locally +ModelPolisher can also be run locally. -Note: You must pass *absolute path for host directory*. This command will mount volume `` to `/models/` in container. Thus, outputs will be produced in directory `/output`. +If you want to process a large number of models, or you don't feel comfortable using the Python API client package, this is the recommendend usage. -User may use `-u ` with `docker-compose run` in above command to generate output with correct ownership. Preferably use uid (obtained by `id -u `) due to some existing bugs in docker. +### Parameters +Parameters can be passed via a [json file](https://github.com/draeger-lab/ModelPolisher/wiki/Parameters#json-file) or as [command line arguments]((https://github.com/draeger-lab/ModelPolisher/wiki/Parameters#command-line-arguments)). -To bring down the containers, you can run `docker-compose stop`. This will only stop the containers but won't delete them. Otherwise, you can use `docker-compose down -v` to stop and remove all containers and related volumes. +### Using Docker +ModelPolisher is provided as a [Docker image](). -Note: `docker-compose down -v` will cause all databases to be restored again on running `docker-compose up`, as restored databases exist in containers not in images. +This repository contains a [`docker-compose.yml`](./docker-compose.yml) which also sets up [BiGG DB]() and [AnnotateDB]() as Docker containers, to support the [annotation functionality](https://github.com/draeger-lab/ModelPolisher/wiki/Annotation). -Using `docker` might cause system space to be filled up, and `docker-compose up` may fail due to insufficient space. Use the following commands if there is need to empty space used by ModelPolisher_docker: -``` -docker stop modelpolisher_biggdb modelpolisher_adb modelpolisher_java -docker rm modelpolisher_biggdb modelpolisher_adb modelpolisher_java -docker rmi modelpolisher_java:latest modelpolisher_adb:latest modelpolisher_biggdb:latest postgres:11.4 openjdk:11-slim -docker volume prune +For a single model file, you can use +``` shell +docker-compose run \ + -v :/models/ \ + polisher \ + --input=/models/ \ + --output=/models/output/ \ + --annotate-with-bigg=true \ + --add-adb-annotations=true \ + --output-combine=true ``` -#### Using a non-release jar with Docker +Output will be produced in directory `/output`. -Building using `gradle devel` builds a container with the local ModelPolisher jar. -This container can be used analogously to the release version, though either `-f docker-compose.devel.yml` needs to be -passed to each invocation of `docker-compose` or the `COMPOSE_FILE` environment variable needs to be set so it points -to `docker-compose.devel.yml`, e.g. using `export COMPOSE_FILE=docker-compose.devel.yml` for sh or bash. +*Note*: It is always recommended to [run Docker as your current user](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user) and not as root. Running as root will produce root-owned output. Users can use `-u ` with `docker-compose run` to generate output with correct ownership in this case. -## Using ModelPolisher jar -For polishing models, you essentially need to run ModelPolisher using `jar` produced from [build instructions](#build-instructions). +### Using ModelPolisher Jar +You can run ModelPolisher using its `Jar `. +See [Releases](https://github.com/draeger-lab/ModelPolisher/releases/latest) for downloads of stable versions of standalone Jars and the [Parameters](https://github.com/draeger-lab/ModelPolisher/wiki/Parameters) Wiki page for documentation of the input parameters. -User needs to host the [BiGG](https://github.com/SBRG/bigg_models) Database & [AnnotateDB](https://github.com/matthiaskoenig/annotatedb) on `PostgreSQL` on your local system. +If the [annotation functionality](https://github.com/draeger-lab/ModelPolisher/wiki/Annotation) is required, users need to provide connections to the [BiGG](https://github.com/SBRG/bigg_models) Database and/or [AnnotateDB](https://github.com/matthiaskoenig/annotatedb) as `PostgreSQL` databases. -Now, you can run the following command in general: +This can be achieved like this: ``` java -jar "/ModelPolisher/target/ModelPolisher-2.1.jar" \ --input= \ @@ -107,22 +117,18 @@ java -jar "/ModelPolisher/target/ModelPolisher-2.1.jar" \ --adb-passwd= ``` -We understand problems in setting-up database backend and that a developer would need to build ModelPolisher multiple times and making required changes in `java` Dockerfile will be a tedious task. -We recommend the following practice for developers: -1. Set up required databases by running `docker-compose up`. -2. After making required changes in codebase build `jar` by `gradle fatJar`. -3. Run the newly build jar using: -``` -java -jar ./target/ModelPolisher-2.1.jar --input= --output= --output-combine=true --annotate-with-bigg=true --bigg-host=0.0.0.0 --bigg-port=1310 --add-adb-annotations=true --adb-host=0.0.0.0 --adb-port=1013 -``` -Note: All above commands must be run in `/ModelPolisher/` directory and you must have installed Java `version >= 8` and Gradle `version >= 5.0`. -# How to cite ModelPolisher? +Note: ModelPolisher requires Java `version >= 17`. + +# Using ModelPolisher as a Java library +ModelPolisher and all its dependencies are hosted on [Maven Central](). You can see our [GitHub Pages](http://draeger-lab.github.io/ModelPolisher/) for its Javadocs. +# How to cite ModelPolisher The online version of ModelPolisher is described in this article: http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0149263 The article ["BiGG Models: A platform for integrating, standardizing and sharing genome-scale models"](https://nar.oxfordjournals.org/content/44/D1/D515) describes BiGG Models knowledge-base including ModelPolisher. -# Licenses - +# Licenses ModelPolisher is distributed under the MIT License (see LICENSE). -An Overview of all dependencies is provided in [THIRD-PARTY.txt](https://github.com/draeger-lab/ModelPolisher/blob/master/THIRD-PARTY.txt), their respective licenses can be found in the licenses folder. +An Overview of all dependencies is provided in [THIRD-PARTY.txt](https://github.com/draeger-lab/ModelPolisher/blob/master/THIRD-PARTY.txt), their respective licenses can be found in the [licenses](./licenses) folder. + + diff --git a/build.gradle b/build.gradle old mode 100644 new mode 100755 index 9cf7972a..eed62ac6 --- a/build.gradle +++ b/build.gradle @@ -35,14 +35,14 @@ licenseReport { /** === Java plugin configuration === **/ // sourceCompatibility defines the version of Java for compiling the source code. -// Ensures that the Java compiler will accept Java 18 language features. -sourceCompatibility = JavaVersion.VERSION_18 +// Ensures that the Java compiler will accept Java 17 language features. +sourceCompatibility = JavaVersion.VERSION_17 // targetCompatibility defines the version of Java bytecode to be generated. // Ensures that the compiled bytecode is compatible with Java 18 JVMs. -// Implication: The generated bytecode will run on Java 18 and newer JVMs, +// Implication: The generated bytecode will run on Java 17 and newer JVMs, // but not on older versions. -targetCompatibility = JavaVersion.VERSION_18 +targetCompatibility = JavaVersion.VERSION_17 /* Logical grouping of source files and resources. @@ -188,8 +188,8 @@ tasks.javadoc { classpath = sourceSets.main.runtimeClasspath source = sourceSets.main.allJava options.addBooleanOption('Xdoclint:none', true) - file(new File(rootProject.projectDir.toString() + "/docs")).mkdirs() - destinationDir = new File(rootProject.projectDir.toString() + "/docs") + file(new File(rootProject.projectDir.toString() + "/public/javadoc")).mkdirs() + destinationDir = new File(rootProject.projectDir.toString() + "/public/javadoc") } diff --git a/dependency-licenses.txt b/dependency-licenses.txt deleted file mode 100644 index 00a37347..00000000 --- a/dependency-licenses.txt +++ /dev/null @@ -1,3 +0,0 @@ -License information for dependencies can be created by running 'gradle generateLicenseReport' -and is located in build/reports/dependency-license/index.html. -This functionality is provided by the 'Gradle License Report' plugin (https://github.com/jk1/Gradle-License-Report). diff --git a/docs/copy.svg b/docs/copy.svg deleted file mode 100644 index 7c46ab15..00000000 --- a/docs/copy.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - diff --git a/docs/link.svg b/docs/link.svg deleted file mode 100644 index 7ccc5ed0..00000000 --- a/docs/link.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - diff --git a/docs/script.js b/docs/script.js deleted file mode 100644 index bb9c8a24..00000000 --- a/docs/script.js +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var moduleSearchIndex; -var packageSearchIndex; -var typeSearchIndex; -var memberSearchIndex; -var tagSearchIndex; - -var oddRowColor = "odd-row-color"; -var evenRowColor = "even-row-color"; -var sortAsc = "sort-asc"; -var sortDesc = "sort-desc"; -var tableTab = "table-tab"; -var activeTableTab = "active-table-tab"; - -function loadScripts(doc, tag) { - createElem(doc, tag, 'search.js'); - - createElem(doc, tag, 'module-search-index.js'); - createElem(doc, tag, 'package-search-index.js'); - createElem(doc, tag, 'type-search-index.js'); - createElem(doc, tag, 'member-search-index.js'); - createElem(doc, tag, 'tag-search-index.js'); -} - -function createElem(doc, tag, path) { - var script = doc.createElement(tag); - var scriptElement = doc.getElementsByTagName(tag)[0]; - script.src = pathtoroot + path; - scriptElement.parentNode.insertBefore(script, scriptElement); -} - -// Helper for making content containing release names comparable lexicographically -function makeComparable(s) { - return s.toLowerCase().replace(/(\d+)/g, - function(n, m) { - return ("000" + m).slice(-4); - }); -} - -// Switches between two styles depending on a condition -function toggleStyle(classList, condition, trueStyle, falseStyle) { - if (condition) { - classList.remove(falseStyle); - classList.add(trueStyle); - } else { - classList.remove(trueStyle); - classList.add(falseStyle); - } -} - -// Sorts the rows in a table lexicographically by the content of a specific column -function sortTable(header, columnIndex, columns) { - var container = header.parentElement; - var descending = header.classList.contains(sortAsc); - container.querySelectorAll("div.table-header").forEach( - function(header) { - header.classList.remove(sortAsc); - header.classList.remove(sortDesc); - } - ) - var cells = container.children; - var rows = []; - for (var i = columns; i < cells.length; i += columns) { - rows.push(Array.prototype.slice.call(cells, i, i + columns)); - } - var comparator = function(a, b) { - var ka = makeComparable(a[columnIndex].textContent); - var kb = makeComparable(b[columnIndex].textContent); - if (ka < kb) - return descending ? 1 : -1; - if (ka > kb) - return descending ? -1 : 1; - return 0; - }; - var sorted = rows.sort(comparator); - var visible = 0; - sorted.forEach(function(row) { - if (row[0].style.display !== 'none') { - var isEvenRow = visible++ % 2 === 0; - } - row.forEach(function(cell) { - toggleStyle(cell.classList, isEvenRow, evenRowColor, oddRowColor); - container.appendChild(cell); - }) - }); - toggleStyle(header.classList, descending, sortDesc, sortAsc); -} - -// Toggles the visibility of a table category in all tables in a page -function toggleGlobal(checkbox, selected, columns) { - var display = checkbox.checked ? '' : 'none'; - document.querySelectorAll("div.table-tabs").forEach(function(t) { - var id = t.parentElement.getAttribute("id"); - var selectedClass = id + "-tab" + selected; - // if selected is empty string it selects all uncategorized entries - var selectUncategorized = !Boolean(selected); - var visible = 0; - document.querySelectorAll('div.' + id) - .forEach(function(elem) { - if (selectUncategorized) { - if (elem.className.indexOf(selectedClass) === -1) { - elem.style.display = display; - } - } else if (elem.classList.contains(selectedClass)) { - elem.style.display = display; - } - if (elem.style.display === '') { - var isEvenRow = visible++ % (columns * 2) < columns; - toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); - } - }); - var displaySection = visible === 0 ? 'none' : ''; - t.parentElement.style.display = displaySection; - document.querySelector("li#contents-" + id).style.display = displaySection; - }) -} - -// Shows the elements of a table belonging to a specific category -function show(tableId, selected, columns) { - if (tableId !== selected) { - document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') - .forEach(function(elem) { - elem.style.display = 'none'; - }); - } - document.querySelectorAll('div.' + selected) - .forEach(function(elem, index) { - elem.style.display = ''; - var isEvenRow = index % (columns * 2) < columns; - toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); - }); - updateTabs(tableId, selected); -} - -function updateTabs(tableId, selected) { - document.getElementById(tableId + '.tabpanel') - .setAttribute('aria-labelledby', selected); - document.querySelectorAll('button[id^="' + tableId + '"]') - .forEach(function(tab, index) { - if (selected === tab.id || (tableId === selected && index === 0)) { - tab.className = activeTableTab; - tab.setAttribute('aria-selected', true); - tab.setAttribute('tabindex',0); - } else { - tab.className = tableTab; - tab.setAttribute('aria-selected', false); - tab.setAttribute('tabindex',-1); - } - }); -} - -function switchTab(e) { - var selected = document.querySelector('[aria-selected=true]'); - if (selected) { - if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { - // left or up arrow key pressed: move focus to previous tab - selected.previousSibling.click(); - selected.previousSibling.focus(); - e.preventDefault(); - } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { - // right or down arrow key pressed: move focus to next tab - selected.nextSibling.click(); - selected.nextSibling.focus(); - e.preventDefault(); - } - } -} - -var updateSearchResults = function() {}; - -function indexFilesLoaded() { - return moduleSearchIndex - && packageSearchIndex - && typeSearchIndex - && memberSearchIndex - && tagSearchIndex; -} -// Copy the contents of the local snippet to the clipboard -function copySnippet(button) { - copyToClipboard(button.nextElementSibling.innerText); - switchCopyLabel(button, button.firstElementChild); -} -function copyToClipboard(content) { - var textarea = document.createElement("textarea"); - textarea.style.height = 0; - document.body.appendChild(textarea); - textarea.value = content; - textarea.select(); - document.execCommand("copy"); - document.body.removeChild(textarea); -} -function switchCopyLabel(button, span) { - var copied = span.getAttribute("data-copied"); - button.classList.add("visible"); - var initialLabel = span.innerHTML; - span.innerHTML = copied; - setTimeout(function() { - button.classList.remove("visible"); - setTimeout(function() { - if (initialLabel !== copied) { - span.innerHTML = initialLabel; - } - }, 100); - }, 1900); -} -// Workaround for scroll position not being included in browser history (8249133) -document.addEventListener("DOMContentLoaded", function(e) { - var contentDiv = document.querySelector("div.flex-content"); - window.addEventListener("popstate", function(e) { - if (e.state !== null) { - contentDiv.scrollTop = e.state; - } - }); - window.addEventListener("hashchange", function(e) { - history.replaceState(contentDiv.scrollTop, document.title); - }); - var timeoutId; - contentDiv.addEventListener("scroll", function(e) { - if (timeoutId) { - clearTimeout(timeoutId); - } - timeoutId = setTimeout(function() { - history.replaceState(contentDiv.scrollTop, document.title); - }, 100); - }); - if (!location.hash) { - history.replaceState(contentDiv.scrollTop, document.title); - } -}); diff --git a/docs/search-page.js b/docs/search-page.js deleted file mode 100644 index 540c90f5..00000000 --- a/docs/search-page.js +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -"use strict"; -$(function() { - var copy = $("#page-search-copy"); - var expand = $("#page-search-expand"); - var searchLink = $("span#page-search-link"); - var redirect = $("input#search-redirect"); - function setSearchUrlTemplate() { - var href = document.location.href.split(/[#?]/)[0]; - href += "?q=" + "%s"; - if (redirect.is(":checked")) { - href += "&r=1"; - } - searchLink.html(href); - copy[0].onmouseenter(); - } - function copyLink(e) { - copyToClipboard(this.previousSibling.innerText); - switchCopyLabel(this, this.lastElementChild); - } - copy.click(copyLink); - copy[0].onmouseenter = function() {}; - redirect.click(setSearchUrlTemplate); - setSearchUrlTemplate(); - copy.prop("disabled", false); - redirect.prop("disabled", false); - expand.click(function (e) { - var searchInfo = $("div.page-search-info"); - if(this.parentElement.hasAttribute("open")) { - searchInfo.attr("style", "border-width: 0;"); - } else { - searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight")); - } - }); -}); -$(window).on("load", function() { - var input = $("#page-search-input"); - var reset = $("#page-search-reset"); - var notify = $("#page-search-notify"); - var resultSection = $("div#result-section"); - var resultContainer = $("div#result-container"); - var searchTerm = ""; - var activeTab = ""; - var fixedTab = false; - var visibleTabs = []; - var feelingLucky = false; - function renderResults(result) { - if (!result.length) { - notify.html(messages.noResult); - } else if (result.length === 1) { - notify.html(messages.oneResult); - } else { - notify.html(messages.manyResults.replace("{0}", result.length)); - } - resultContainer.empty(); - var r = { - "types": [], - "members": [], - "packages": [], - "modules": [], - "searchTags": [] - }; - for (var i in result) { - var item = result[i]; - var arr = r[item.category]; - arr.push(item); - } - if (!activeTab || r[activeTab].length === 0 || !fixedTab) { - Object.keys(r).reduce(function(prev, curr) { - if (r[curr].length > 0 && r[curr][0].score > prev) { - activeTab = curr; - return r[curr][0].score; - } - return prev; - }, 0); - } - if (feelingLucky && activeTab) { - notify.html(messages.redirecting) - var firstItem = r[activeTab][0]; - window.location = getURL(firstItem.indexItem, firstItem.category); - return; - } - if (result.length > 20) { - if (searchTerm[searchTerm.length - 1] === ".") { - if (activeTab === "types" && r["members"].length > r["types"].length) { - activeTab = "members"; - } else if (activeTab === "packages" && r["types"].length > r["packages"].length) { - activeTab = "types"; - } - } - } - var categoryCount = Object.keys(r).reduce(function(prev, curr) { - return prev + (r[curr].length > 0 ? 1 : 0); - }, 0); - visibleTabs = []; - var tabContainer = $("
").appendTo(resultContainer); - for (var key in r) { - var id = "#result-tab-" + key.replace("searchTags", "search_tags"); - if (r[key].length) { - var count = r[key].length >= 1000 ? "999+" : r[key].length; - if (result.length > 20 && categoryCount > 1) { - var button = $("").appendTo(tabContainer); - button.click(key, function(e) { - fixedTab = true; - renderResult(e.data, $(this)); - }); - visibleTabs.push(key); - } else { - $("" + categories[key] - + " (" + count + ")").appendTo(tabContainer); - renderTable(key, r[key]).appendTo(resultContainer); - tabContainer = $("
").appendTo(resultContainer); - - } - } - } - if (activeTab && result.length > 20 && categoryCount > 1) { - $("button#result-tab-" + activeTab).addClass("active-table-tab"); - renderTable(activeTab, r[activeTab]).appendTo(resultContainer); - } - resultSection.show(); - function renderResult(category, button) { - activeTab = category; - setSearchUrl(); - resultContainer.find("div.summary-table").remove(); - renderTable(activeTab, r[activeTab]).appendTo(resultContainer); - button.siblings().removeClass("active-table-tab"); - button.addClass("active-table-tab"); - } - } - function selectTab(category) { - $("button#result-tab-" + category).click(); - } - function renderTable(category, items) { - var table = $("
") - .addClass(category === "modules" - ? "one-column-search-results" - : "two-column-search-results"); - var col1, col2; - if (category === "modules") { - col1 = "Module"; - } else if (category === "packages") { - col1 = "Module"; - col2 = "Package"; - } else if (category === "types") { - col1 = "Package"; - col2 = "Class" - } else if (category === "members") { - col1 = "Class"; - col2 = "Member"; - } else if (category === "searchTags") { - col1 = "Location"; - col2 = "Name"; - } - $("
" + col1 + "
").appendTo(table); - if (category !== "modules") { - $("
" + col2 + "
").appendTo(table); - } - $.each(items, function(index, item) { - var rowColor = index % 2 ? "odd-row-color" : "even-row-color"; - renderItem(item, table, rowColor); - }); - return table; - } - function renderItem(item, table, rowColor) { - var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length); - var link = $("") - .attr("href", getURL(item.indexItem, item.category)) - .attr("tabindex", "0") - .addClass("search-result-link") - .html(label); - var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1); - if (item.category === "searchTags") { - container = item.indexItem.h || ""; - } - if (item.category !== "modules") { - $("
").html(container).addClass("col-plain").addClass(rowColor).appendTo(table); - } - $("
").html(link).addClass("col-last").addClass(rowColor).appendTo(table); - } - var timeout; - function schedulePageSearch() { - if (timeout) { - clearTimeout(timeout); - } - timeout = setTimeout(function () { - doPageSearch() - }, 100); - } - function doPageSearch() { - setSearchUrl(); - var term = searchTerm = input.val().trim(); - if (term === "") { - notify.html(messages.enterTerm); - activeTab = ""; - fixedTab = false; - resultContainer.empty(); - resultSection.hide(); - } else { - notify.html(messages.searching); - doSearch({ term: term, maxResults: 1200 }, renderResults); - } - } - function setSearchUrl() { - var query = input.val().trim(); - var url = document.location.pathname; - if (query) { - url += "?q=" + encodeURI(query); - if (activeTab && fixedTab) { - url += "&c=" + activeTab; - } - } - history.replaceState({query: query}, "", url); - } - input.on("input", function(e) { - feelingLucky = false; - schedulePageSearch(); - }); - $(document).keydown(function(e) { - if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) { - if (activeTab && visibleTabs.length > 1) { - var idx = visibleTabs.indexOf(activeTab); - idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1; - selectTab(visibleTabs[idx % visibleTabs.length]); - return false; - } - } - }); - reset.click(function() { - notify.html(messages.enterTerm); - resultSection.hide(); - activeTab = ""; - fixedTab = false; - resultContainer.empty(); - input.val('').focus(); - setSearchUrl(); - }); - input.prop("disabled", false); - reset.prop("disabled", false); - - var urlParams = new URLSearchParams(window.location.search); - if (urlParams.has("q")) { - input.val(urlParams.get("q")) - } - if (urlParams.has("c")) { - activeTab = urlParams.get("c"); - fixedTab = true; - } - if (urlParams.get("r")) { - feelingLucky = true; - } - if (input.val()) { - doPageSearch(); - } else { - notify.html(messages.enterTerm); - } - input.select().focus(); -}); diff --git a/docs/search.html b/docs/search.html deleted file mode 100644 index 992770e3..00000000 --- a/docs/search.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - -Search (ModelPolisher 2.1 API) - - - - - - - - - - - - - -
- -
-
-

Search

-
- - -
-Additional resources -
-
-
-

The help page provides an introduction to the scope and syntax of JavaDoc search.

-

You can use the <ctrl> or <cmd> keys in combination with the left and right arrow keys to switch between result tabs in this page.

-

The URL template below may be used to configure this page as a search engine in browsers that support this feature. It has been tested to work in Google Chrome and Mozilla Firefox. Note that other browsers may not support this feature or require a different URL format.

-link -

- -

-
-

Loading search index...

- -
-
-
- - diff --git a/docs/search.js b/docs/search.js deleted file mode 100644 index d3986705..00000000 --- a/docs/search.js +++ /dev/null @@ -1,458 +0,0 @@ -/* - * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -"use strict"; -const messages = { - enterTerm: "Enter a search term", - noResult: "No results found", - oneResult: "Found one result", - manyResults: "Found {0} results", - loading: "Loading search index...", - searching: "Searching...", - redirecting: "Redirecting to first result...", - linkIcon: "Link icon", - linkToSection: "Link to this section" -} -const categories = { - modules: "Modules", - packages: "Packages", - types: "Classes and Interfaces", - members: "Members", - searchTags: "Search Tags" -}; -const highlight = "$&"; -const NO_MATCH = {}; -const MAX_RESULTS = 300; -function checkUnnamed(name, separator) { - return name === "" || !name ? "" : name + separator; -} -function escapeHtml(str) { - return str.replace(//g, ">"); -} -function getHighlightedText(str, boundaries, from, to) { - var start = from; - var text = ""; - for (var i = 0; i < boundaries.length; i += 2) { - var b0 = boundaries[i]; - var b1 = boundaries[i + 1]; - if (b0 >= to || b1 <= from) { - continue; - } - text += escapeHtml(str.slice(start, Math.max(start, b0))); - text += ""; - text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1))); - text += ""; - start = Math.min(to, b1); - } - text += escapeHtml(str.slice(start, to)); - return text; -} -function getURLPrefix(item, category) { - var urlPrefix = ""; - var slash = "/"; - if (category === "modules") { - return item.l + slash; - } else if (category === "packages" && item.m) { - return item.m + slash; - } else if (category === "types" || category === "members") { - if (item.m) { - urlPrefix = item.m + slash; - } else { - $.each(packageSearchIndex, function(index, it) { - if (it.m && item.p === it.l) { - urlPrefix = it.m + slash; - } - }); - } - } - return urlPrefix; -} -function getURL(item, category) { - if (item.url) { - return item.url; - } - var url = getURLPrefix(item, category); - if (category === "modules") { - url += "module-summary.html"; - } else if (category === "packages") { - if (item.u) { - url = item.u; - } else { - url += item.l.replace(/\./g, '/') + "/package-summary.html"; - } - } else if (category === "types") { - if (item.u) { - url = item.u; - } else { - url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html"; - } - } else if (category === "members") { - url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#"; - if (item.u) { - url += item.u; - } else { - url += item.l; - } - } else if (category === "searchTags") { - url += item.u; - } - item.url = url; - return url; -} -function createMatcher(term, camelCase) { - if (camelCase && !isUpperCase(term)) { - return null; // no need for camel-case matcher for lower case query - } - var pattern = ""; - var upperCase = []; - term.trim().split(/\s+/).forEach(function(w, index, array) { - var tokens = w.split(/(?=[A-Z,.()<>?[\/])/); - for (var i = 0; i < tokens.length; i++) { - var s = tokens[i]; - // ',' and '?' are the only delimiters commonly followed by space in java signatures - pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")"; - upperCase.push(false); - var isWordToken = /\w$/.test(s); - if (isWordToken) { - if (i === tokens.length - 1 && index < array.length - 1) { - // space in query string matches all delimiters - pattern += "(.*?)"; - upperCase.push(isUpperCase(s[0])); - } else { - if (!camelCase && isUpperCase(s) && s.length === 1) { - pattern += "()"; - } else { - pattern += "([a-z0-9$<>?[\\]]*?)"; - } - upperCase.push(isUpperCase(s[0])); - } - } else { - pattern += "()"; - upperCase.push(false); - } - } - }); - var re = new RegExp(pattern, "gi"); - re.upperCase = upperCase; - return re; -} -function findMatch(matcher, input, startOfName, endOfName) { - var from = startOfName; - matcher.lastIndex = from; - var match = matcher.exec(input); - // Expand search area until we get a valid result or reach the beginning of the string - while (!match || match.index + match[0].length < startOfName || endOfName < match.index) { - if (from === 0) { - return NO_MATCH; - } - from = input.lastIndexOf(".", from - 2) + 1; - matcher.lastIndex = from; - match = matcher.exec(input); - } - var boundaries = []; - var matchEnd = match.index + match[0].length; - var score = 5; - var start = match.index; - var prevEnd = -1; - for (var i = 1; i < match.length; i += 2) { - var isUpper = isUpperCase(input[start]); - var isMatcherUpper = matcher.upperCase[i]; - // capturing groups come in pairs, match and non-match - boundaries.push(start, start + match[i].length); - // make sure groups are anchored on a left word boundary - var prevChar = input[start - 1] || ""; - var nextChar = input[start + 1] || ""; - if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) { - if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) { - score -= 0.1; - } else if (isMatcherUpper && start === prevEnd) { - score -= isUpper ? 0.1 : 1.0; - } else { - return NO_MATCH; - } - } - prevEnd = start + match[i].length; - start += match[i].length + match[i + 1].length; - - // lower score for parts of the name that are missing - if (match[i + 1] && prevEnd < endOfName) { - score -= rateNoise(match[i + 1]); - } - } - // lower score if a type name contains unmatched camel-case parts - if (input[matchEnd - 1] !== "." && endOfName > matchEnd) - score -= rateNoise(input.slice(matchEnd, endOfName)); - score -= rateNoise(input.slice(0, Math.max(startOfName, match.index))); - - if (score <= 0) { - return NO_MATCH; - } - return { - input: input, - score: score, - boundaries: boundaries - }; -} -function isUpperCase(s) { - return s !== s.toLowerCase(); -} -function isLowerCase(s) { - return s !== s.toUpperCase(); -} -function rateNoise(str) { - return (str.match(/([.(])/g) || []).length / 5 - + (str.match(/([A-Z]+)/g) || []).length / 10 - + str.length / 20; -} -function doSearch(request, response) { - var term = request.term.trim(); - var maxResults = request.maxResults || MAX_RESULTS; - if (term.length === 0) { - return this.close(); - } - var matcher = { - plainMatcher: createMatcher(term, false), - camelCaseMatcher: createMatcher(term, true) - } - var indexLoaded = indexFilesLoaded(); - - function getPrefix(item, category) { - switch (category) { - case "packages": - return checkUnnamed(item.m, "/"); - case "types": - return checkUnnamed(item.p, "."); - case "members": - return checkUnnamed(item.p, ".") + item.c + "."; - default: - return ""; - } - } - function useQualifiedName(category) { - switch (category) { - case "packages": - return /[\s/]/.test(term); - case "types": - case "members": - return /[\s.]/.test(term); - default: - return false; - } - } - function searchIndex(indexArray, category) { - var matches = []; - if (!indexArray) { - if (!indexLoaded) { - matches.push({ l: messages.loading, category: category }); - } - return matches; - } - $.each(indexArray, function (i, item) { - var prefix = getPrefix(item, category); - var simpleName = item.l; - var qualifiedName = prefix + simpleName; - var useQualified = useQualifiedName(category); - var input = useQualified ? qualifiedName : simpleName; - var startOfName = useQualified ? prefix.length : 0; - var endOfName = category === "members" && input.indexOf("(", startOfName) > -1 - ? input.indexOf("(", startOfName) : input.length; - var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName); - if (m === NO_MATCH && matcher.camelCaseMatcher) { - m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName); - } - if (m !== NO_MATCH) { - m.indexItem = item; - m.prefix = prefix; - m.category = category; - if (!useQualified) { - m.input = qualifiedName; - m.boundaries = m.boundaries.map(function(b) { - return b + prefix.length; - }); - } - matches.push(m); - } - return true; - }); - return matches.sort(function(e1, e2) { - return e2.score - e1.score; - }).slice(0, maxResults); - } - - var result = searchIndex(moduleSearchIndex, "modules") - .concat(searchIndex(packageSearchIndex, "packages")) - .concat(searchIndex(typeSearchIndex, "types")) - .concat(searchIndex(memberSearchIndex, "members")) - .concat(searchIndex(tagSearchIndex, "searchTags")); - - if (!indexLoaded) { - updateSearchResults = function() { - doSearch(request, response); - } - } else { - updateSearchResults = function() {}; - } - response(result); -} -// JQuery search menu implementation -$.widget("custom.catcomplete", $.ui.autocomplete, { - _create: function() { - this._super(); - this.widget().menu("option", "items", "> .result-item"); - // workaround for search result scrolling - this.menu._scrollIntoView = function _scrollIntoView( item ) { - var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; - if ( this._hasScroll() ) { - borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; - paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; - offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; - scroll = this.activeMenu.scrollTop(); - elementHeight = this.activeMenu.height() - 26; - itemHeight = item.outerHeight(); - - if ( offset < 0 ) { - this.activeMenu.scrollTop( scroll + offset ); - } else if ( offset + itemHeight > elementHeight ) { - this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); - } - } - }; - }, - _renderMenu: function(ul, items) { - var currentCategory = ""; - var widget = this; - widget.menu.bindings = $(); - $.each(items, function(index, item) { - if (item.category && item.category !== currentCategory) { - ul.append("
  • " + categories[item.category] + "
  • "); - currentCategory = item.category; - } - var li = widget._renderItemData(ul, item); - if (item.category) { - li.attr("aria-label", categories[item.category] + " : " + item.l); - } else { - li.attr("aria-label", item.l); - } - li.attr("class", "result-item"); - }); - ul.append(""); - }, - _renderItem: function(ul, item) { - var li = $("
  • ").appendTo(ul); - var div = $("
    ").appendTo(li); - var label = item.l - ? item.l - : getHighlightedText(item.input, item.boundaries, 0, item.input.length); - var idx = item.indexItem; - if (item.category === "searchTags" && idx && idx.h) { - if (idx.d) { - div.html(label + " (" + idx.h + ")
    " - + idx.d + "
    "); - } else { - div.html(label + " (" + idx.h + ")"); - } - } else { - div.html(label); - } - return li; - } -}); -$(function() { - var expanded = false; - var windowWidth; - function collapse() { - if (expanded) { - $("div#navbar-top").removeAttr("style"); - $("button#navbar-toggle-button") - .removeClass("expanded") - .attr("aria-expanded", "false"); - expanded = false; - } - } - $("button#navbar-toggle-button").click(function (e) { - if (expanded) { - collapse(); - } else { - var navbar = $("div#navbar-top"); - navbar.height(navbar.prop("scrollHeight")); - $("button#navbar-toggle-button") - .addClass("expanded") - .attr("aria-expanded", "true"); - expanded = true; - windowWidth = window.innerWidth; - } - }); - $("ul.sub-nav-list-small li a").click(collapse); - $("input#search-input").focus(collapse); - $("main").click(collapse); - $("section[id] > :header, :header[id], :header:has(a[id])").each(function(idx, el) { - // Create anchor links for headers with an associated id attribute - var hdr = $(el); - var id = hdr.attr("id") || hdr.parent("section").attr("id") || hdr.children("a").attr("id"); - if (id) { - hdr.append(" " + messages.linkIcon +""); - } - }); - $(window).on("orientationchange", collapse).on("resize", function(e) { - if (expanded && windowWidth !== window.innerWidth) collapse(); - }); - var search = $("#search-input"); - var reset = $("#reset-button"); - search.catcomplete({ - minLength: 1, - delay: 200, - source: doSearch, - response: function(event, ui) { - if (!ui.content.length) { - ui.content.push({ l: messages.noResult }); - } else { - $("#search-input").empty(); - } - }, - autoFocus: true, - focus: function(event, ui) { - return false; - }, - position: { - collision: "flip" - }, - select: function(event, ui) { - if (ui.item.indexItem) { - var url = getURL(ui.item.indexItem, ui.item.category); - window.location.href = pathtoroot + url; - $("#search-input").focus(); - } - } - }); - search.val(''); - search.prop("disabled", false); - reset.prop("disabled", false); - reset.click(function() { - search.val('').focus(); - }); - search.focus(); -}); diff --git a/docs/stylesheet.css b/docs/stylesheet.css deleted file mode 100644 index f71489f8..00000000 --- a/docs/stylesheet.css +++ /dev/null @@ -1,1272 +0,0 @@ -/* - * Javadoc style sheet - */ - -@import url('resources/fonts/dejavu.css'); - -/* - * These CSS custom properties (variables) define the core color and font - * properties used in this stylesheet. - */ -:root { - /* body, block and code fonts */ - --body-font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; - --block-font-family: 'DejaVu Serif', Georgia, "Times New Roman", Times, serif; - --code-font-family: 'DejaVu Sans Mono', monospace; - /* Base font sizes for body and code elements */ - --body-font-size: 14px; - --code-font-size: 14px; - /* Text colors for body and block elements */ - --body-text-color: #353833; - --block-text-color: #474747; - /* Background colors for various structural elements */ - --body-background-color: #ffffff; - --section-background-color: #f8f8f8; - --detail-background-color: #ffffff; - /* Colors for navigation bar and table captions */ - --navbar-background-color: #4D7A97; - --navbar-text-color: #ffffff; - /* Background color for subnavigation and various headers */ - --subnav-background-color: #dee3e9; - /* Background and text colors for selected tabs and navigation items */ - --selected-background-color: #f8981d; - --selected-text-color: #253441; - --selected-link-color: #1f389c; - /* Background colors for generated tables */ - --even-row-color: #ffffff; - --odd-row-color: #eeeeef; - /* Text color for page title */ - --title-color: #2c4557; - /* Text colors for links */ - --link-color: #4A6782; - --link-color-active: #bb7a2a; - /* Snippet colors */ - --snippet-background-color: #ebecee; - --snippet-text-color: var(--block-text-color); - --snippet-highlight-color: #f7c590; - /* Border colors for structural elements and user defined tables */ - --border-color: #ededed; - --table-border-color: #000000; - /* Search input colors */ - --search-input-background-color: #ffffff; - --search-input-text-color: #000000; - --search-input-placeholder-color: #909090; - /* Highlight color for active search tag target */ - --search-tag-highlight-color: #ffff00; - /* Adjustments for icon and active background colors of copy-to-clipboard buttons */ - --copy-icon-brightness: 100%; - --copy-button-background-color-active: rgba(168, 168, 176, 0.3); - /* Colors for invalid tag notifications */ - --invalid-tag-background-color: #ffe6e6; - --invalid-tag-text-color: #000000; -} -/* - * Styles for individual HTML elements. - * - * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular - * HTML element throughout the page. - */ -body { - background-color:var(--body-background-color); - color:var(--body-text-color); - font-family:var(--body-font-family); - font-size:var(--body-font-size); - margin:0; - padding:0; - height:100%; - width:100%; -} -iframe { - margin:0; - padding:0; - height:100%; - width:100%; - overflow-y:scroll; - border:none; -} -a:link, a:visited { - text-decoration:none; - color:var(--link-color); -} -a[href]:hover, a[href]:focus { - text-decoration:none; - color:var(--link-color-active); -} -pre { - font-family:var(--code-font-family); - font-size:1em; -} -h1 { - font-size:1.428em; -} -h2 { - font-size:1.285em; -} -h3 { - font-size:1.14em; -} -h4 { - font-size:1.072em; -} -h5 { - font-size:1.001em; -} -h6 { - font-size:0.93em; -} -/* Disable font boosting for selected elements */ -h1, h2, h3, h4, h5, h6, div.member-signature { - max-height: 1000em; -} -ul { - list-style-type:disc; -} -code, tt { - font-family:var(--code-font-family); -} -:not(h1, h2, h3, h4, h5, h6) > code, -:not(h1, h2, h3, h4, h5, h6) > tt { - font-size:var(--code-font-size); - padding-top:4px; - margin-top:8px; - line-height:1.4em; -} -dt code { - font-family:var(--code-font-family); - font-size:1em; - padding-top:4px; -} -.summary-table dt code { - font-family:var(--code-font-family); - font-size:1em; - vertical-align:top; - padding-top:4px; -} -sup { - font-size:8px; -} -button { - font-family: var(--body-font-family); - font-size: 1em; -} -/* - * Styles for HTML generated by javadoc. - * - * These are style classes that are used by the standard doclet to generate HTML documentation. - */ - -/* - * Styles for document title and copyright. - */ -.about-language { - float:right; - padding:0 21px 8px 8px; - font-size:0.915em; - margin-top:-9px; - height:2.9em; -} -.legal-copy { - margin-left:.5em; -} -/* - * Styles for navigation bar. - */ -@media screen { - div.flex-box { - position:fixed; - display:flex; - flex-direction:column; - height: 100%; - width: 100%; - } - header.flex-header { - flex: 0 0 auto; - } - div.flex-content { - flex: 1 1 auto; - overflow-y: auto; - } -} -.top-nav { - background-color:var(--navbar-background-color); - color:var(--navbar-text-color); - float:left; - width:100%; - clear:right; - min-height:2.8em; - padding:10px 0 0 0; - overflow:hidden; - font-size:0.857em; -} -button#navbar-toggle-button { - display:none; -} -ul.sub-nav-list-small { - display: none; -} -.sub-nav { - background-color:var(--subnav-background-color); - float:left; - width:100%; - overflow:hidden; - font-size:0.857em; -} -.sub-nav div { - clear:left; - float:left; - padding:6px; - text-transform:uppercase; -} -.sub-nav .sub-nav-list { - padding-top:4px; -} -ul.nav-list { - display:block; - margin:0 25px 0 0; - padding:0; -} -ul.sub-nav-list { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.nav-list li { - list-style:none; - float:left; - padding: 5px 6px; - text-transform:uppercase; -} -.sub-nav .nav-list-search { - float:right; - margin:0; - padding:6px; - clear:none; - text-align:right; - position:relative; -} -ul.sub-nav-list li { - list-style:none; - float:left; -} -.top-nav a:link, .top-nav a:active, .top-nav a:visited { - color:var(--navbar-text-color); - text-decoration:none; - text-transform:uppercase; -} -.top-nav a:hover { - color:var(--link-color-active); -} -.nav-bar-cell1-rev { - background-color:var(--selected-background-color); - color:var(--selected-text-color); - margin: auto 5px; -} -.skip-nav { - position:absolute; - top:auto; - left:-9999px; - overflow:hidden; -} -/* - * Hide navigation links and search box in print layout - */ -@media print { - ul.nav-list, div.sub-nav { - display:none; - } -} -/* - * Styles for page header. - */ -.title { - color:var(--title-color); - margin:10px 0; -} -.sub-title { - margin:5px 0 0 0; -} -ul.contents-list { - margin: 0 0 15px 0; - padding: 0; - list-style: none; -} -ul.contents-list li { - font-size:0.93em; -} -/* - * Styles for headings. - */ -body.class-declaration-page .summary h2, -body.class-declaration-page .details h2, -body.class-use-page h2, -body.module-declaration-page .block-list h2 { - font-style: italic; - padding:0; - margin:15px 0; -} -body.class-declaration-page .summary h3, -body.class-declaration-page .details h3, -body.class-declaration-page .summary .inherited-list h2 { - background-color:var(--subnav-background-color); - border:1px solid var(--border-color); - margin:0 0 6px -8px; - padding:7px 5px; -} -/* - * Styles for page layout containers. - */ -main { - clear:both; - padding:10px 20px; - position:relative; -} -dl.notes > dt { - font-family: var(--body-font-family); - font-size:0.856em; - font-weight:bold; - margin:10px 0 0 0; - color:var(--body-text-color); -} -dl.notes > dd { - margin:5px 10px 10px 0; - font-size:1em; - font-family:var(--block-font-family) -} -dl.name-value > dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -dl.name-value > dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* - * Styles for lists. - */ -li.circle { - list-style:circle; -} -ul.horizontal li { - display:inline; - font-size:0.9em; -} -div.inheritance { - margin:0; - padding:0; -} -div.inheritance div.inheritance { - margin-left:2em; -} -ul.block-list, -ul.details-list, -ul.member-list, -ul.summary-list { - margin:10px 0 10px 0; - padding:0; -} -ul.block-list > li, -ul.details-list > li, -ul.member-list > li, -ul.summary-list > li { - list-style:none; - margin-bottom:15px; - line-height:1.4; -} -ul.ref-list { - padding:0; - margin:0; -} -ul.ref-list > li { - list-style:none; -} -.summary-table dl, .summary-table dl dt, .summary-table dl dd { - margin-top:0; - margin-bottom:1px; -} -ul.tag-list, ul.tag-list-long { - padding-left: 0; - list-style: none; -} -ul.tag-list li { - display: inline; -} -ul.tag-list li:not(:last-child):after, -ul.tag-list-long li:not(:last-child):after -{ - content: ", "; - white-space: pre-wrap; -} -ul.preview-feature-list { - list-style: none; - margin:0; - padding:0.1em; - line-height: 1.6em; -} -/* - * Styles for tables. - */ -.summary-table, .details-table { - width:100%; - border-spacing:0; - border:1px solid var(--border-color); - border-top:0; - padding:0; -} -.caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:var(--selected-text-color); - clear:none; - overflow:hidden; - padding: 10px 0 0 1px; - margin:0; -} -.caption a:link, .caption a:visited { - color:var(--selected-link-color); -} -.caption a:hover, -.caption a:active { - color:var(--navbar-text-color); -} -.caption span { - font-weight:bold; - white-space:nowrap; - padding:5px 12px 7px 12px; - display:inline-block; - float:left; - background-color:var(--selected-background-color); - border: none; - height:16px; -} -div.table-tabs { - padding:10px 0 0 1px; - margin:10px 0 0 0; -} -div.table-tabs > button { - border: none; - cursor: pointer; - padding: 5px 12px 7px 12px; - font-weight: bold; - margin-right: 8px; -} -div.table-tabs > .active-table-tab { - background: var(--selected-background-color); - color: var(--selected-text-color); -} -div.table-tabs > button.table-tab { - background: var(--navbar-background-color); - color: var(--navbar-text-color); -} -.two-column-search-results { - display: grid; - grid-template-columns: minmax(400px, max-content) minmax(400px, auto); -} -div.checkboxes { - line-height: 2em; -} -div.checkboxes > span { - margin-left: 10px; -} -div.checkboxes > label { - margin-left: 8px; - white-space: nowrap; -} -div.checkboxes > label > input { - margin: 0 2px; -} -.two-column-summary { - display: grid; - grid-template-columns: minmax(25%, max-content) minmax(25%, auto); -} -.three-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto); -} -.three-column-release-summary { - display: grid; - grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto); -} -.four-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto); -} -@media screen and (max-width: 1000px) { - .four-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(15%, auto); - } -} -@media screen and (max-width: 800px) { - .two-column-search-results { - display: grid; - grid-template-columns: minmax(40%, max-content) minmax(40%, auto); - } - .three-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(25%, auto); - } - .three-column-release-summary { - display: grid; - grid-template-columns: minmax(70%, max-content) minmax(30%, max-content) - } - .three-column-summary .col-last, - .three-column-release-summary .col-last{ - grid-column-end: span 2; - } -} -@media screen and (max-width: 600px) { - .two-column-summary { - display: grid; - grid-template-columns: 1fr; - } -} -.summary-table > div, .details-table > div { - text-align:left; - padding: 8px 3px 3px 7px; - overflow-x: auto; - scrollbar-width: thin; -} -.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { - vertical-align:top; - padding-right:0; - padding-top:8px; - padding-bottom:3px; -} -.table-header { - background:var(--subnav-background-color); - font-weight: bold; -} -/* Sortable table columns */ -.table-header[onclick] { - cursor: pointer; -} -.table-header[onclick]::after { - content:""; - display:inline-block; - background-image:url('data:image/svg+xml; utf8, \ - \ - '); - background-size:100% 100%; - width:9px; - height:14px; - margin-left:4px; - margin-bottom:-3px; -} -.table-header[onclick].sort-asc::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); - -} -.table-header[onclick].sort-desc::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); -} -.col-first, .col-first { - font-size:0.93em; -} -.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { - font-size:0.93em; -} -.col-first, .col-second, .col-constructor-name { - vertical-align:top; - overflow: auto; -} -.col-last { - white-space:normal; -} -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-constructor-name a:link, .col-constructor-name a:visited, -.col-summary-item-name a:link, .col-summary-item-name a:visited { - font-weight:bold; -} -.even-row-color, .even-row-color .table-header { - background-color:var(--even-row-color); -} -.odd-row-color, .odd-row-color .table-header { - background-color:var(--odd-row-color); -} -/* - * Styles for contents. - */ -div.block { - font-size:var(--body-font-size); - font-family:var(--block-font-family); -} -.col-last div { - padding-top:0; -} -.col-last a { - padding-bottom:3px; -} -.module-signature, -.package-signature, -.type-signature, -.member-signature { - font-family:var(--code-font-family); - font-size:1em; - margin:14px 0; - white-space: pre-wrap; -} -.module-signature, -.package-signature, -.type-signature { - margin-top: 0; -} -.member-signature .type-parameters-long, -.member-signature .parameters, -.member-signature .exceptions { - display: inline-block; - vertical-align: top; - white-space: pre; -} -.member-signature .type-parameters { - white-space: normal; -} -/* - * Styles for formatting effect. - */ -.source-line-no { - /* Color of line numbers in source pages can be set via custom property below */ - color:var(--source-linenumber-color, green); - padding:0 30px 0 0; -} -.block { - display:block; - margin:0 10px 5px 0; - color:var(--block-text-color); -} -.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link, -.module-label-in-package, .module-label-in-type, .package-label-in-type, -.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { - font-weight:bold; -} -.deprecation-comment, .help-footnote, .preview-comment { - font-style:italic; -} -.deprecation-block { - font-size:1em; - font-family:var(--block-font-family); - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -.preview-block { - font-size:1em; - font-family:var(--block-font-family); - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -div.block div.deprecation-comment { - font-style:normal; -} -details.invalid-tag, span.invalid-tag { - font-size:1em; - font-family:var(--block-font-family); - color: var(--invalid-tag-text-color); - background: var(--invalid-tag-background-color); - border: thin solid var(--table-border-color); - border-radius:2px; - padding: 2px 4px; - display:inline-block; -} -details summary { - cursor: pointer; -} -/* - * Styles specific to HTML5 elements. - */ -main, nav, header, footer, section { - display:block; -} -/* - * Styles for javadoc search. - */ -.ui-state-active { - /* Overrides the color of selection used in jQuery UI */ - background: var(--selected-background-color); - border: 1px solid var(--selected-background-color); - color: var(--selected-text-color); -} -.ui-autocomplete-category { - font-weight:bold; - font-size:15px; - padding:7px 0 7px 3px; - background-color:var(--navbar-background-color); - color:var(--navbar-text-color); -} -.ui-autocomplete { - max-height:85%; - max-width:65%; - overflow-y:auto; - overflow-x:auto; - scrollbar-width: thin; - white-space:nowrap; - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); -} -ul.ui-autocomplete { - position:fixed; - z-index:1; - background-color: var(--body-background-color); -} -ul.ui-autocomplete li { - float:left; - clear:both; - min-width:100%; -} -ul.ui-autocomplete li.ui-static-link { - position:sticky; - bottom:0; - left:0; - background: var(--subnav-background-color); - padding: 5px 0; - font-family: var(--body-font-family); - font-size: 0.93em; - font-weight: bolder; - z-index: 2; -} -li.ui-static-link a, li.ui-static-link a:visited { - text-decoration:none; - color:var(--link-color); - float:right; - margin-right:20px; -} -.ui-autocomplete .result-item { - font-size: inherit; -} -.ui-autocomplete .result-highlight { - font-weight:bold; -} -#search-input, #page-search-input { - background-image:url('resources/glass.png'); - background-size:13px; - background-repeat:no-repeat; - background-position:2px 3px; - background-color: var(--search-input-background-color); - color: var(--search-input-text-color); - border-color: var(--border-color); - padding-left:20px; - width: 250px; - margin: 0; -} -#search-input { - margin-left: 4px; -} -#reset-button { - background-color: transparent; - background-image:url('resources/x.png'); - background-repeat:no-repeat; - background-size:contain; - border:0; - border-radius:0; - width:12px; - height:12px; - position:absolute; - right:12px; - top:10px; - font-size:0; -} -::placeholder { - color:var(--search-input-placeholder-color); - opacity: 1; -} -.search-tag-desc-result { - font-style:italic; - font-size:11px; -} -.search-tag-holder-result { - font-style:italic; - font-size:12px; -} -.search-tag-result:target { - background-color:var(--search-tag-highlight-color); -} -details.page-search-details { - display: inline-block; -} -div#result-container { - font-size: 1em; -} -div#result-container a.search-result-link { - padding: 0; - margin: 4px 0; - width: 100%; -} -#result-container .result-highlight { - font-weight:bolder; -} -.page-search-info { - background-color: var(--subnav-background-color); - border-radius: 3px; - border: 0 solid var(--border-color); - padding: 0 8px; - overflow: hidden; - height: 0; - transition: all 0.2s ease; -} -div.table-tabs > button.table-tab { - background: var(--navbar-background-color); - color: var(--navbar-text-color); -} -.page-search-header { - padding: 5px 12px 7px 12px; - font-weight: bold; - margin-right: 3px; - background-color:var(--navbar-background-color); - color:var(--navbar-text-color); - display: inline-block; -} -button.page-search-header { - border: none; - cursor: pointer; -} -span#page-search-link { - text-decoration: underline; -} -.module-graph span, .sealed-graph span { - display:none; - position:absolute; -} -.module-graph:hover span, .sealed-graph:hover span { - display:block; - margin: -100px 0 0 100px; - z-index: 1; -} -.inherited-list { - margin: 10px 0 10px 0; -} -section.class-description { - line-height: 1.4; -} -.summary section[class$="-summary"], .details section[class$="-details"], -.class-uses .detail, .serialized-class-details { - padding: 0 20px 5px 10px; - border: 1px solid var(--border-color); - background-color: var(--section-background-color); -} -.inherited-list, section[class$="-details"] .detail { - padding:0 0 5px 8px; - background-color:var(--detail-background-color); - border:none; -} -.vertical-separator { - padding: 0 5px; -} -ul.help-section-list { - margin: 0; -} -ul.help-subtoc > li { - display: inline-block; - padding-right: 5px; - font-size: smaller; -} -ul.help-subtoc > li::before { - content: "\2022" ; - padding-right:2px; -} -.help-note { - font-style: italic; -} -/* - * Indicator icon for external links. - */ -main a[href*="://"]::after { - content:""; - display:inline-block; - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); - background-size:100% 100%; - width:7px; - height:7px; - margin-left:2px; - margin-bottom:4px; -} -main a[href*="://"]:hover::after, -main a[href*="://"]:focus::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); -} -/* - * Styles for header/section anchor links - */ -a.anchor-link { - opacity: 0; - transition: opacity 0.1s; -} -:hover > a.anchor-link { - opacity: 80%; -} -a.anchor-link:hover, -a.anchor-link:focus-visible, -a.anchor-link.visible { - opacity: 100%; -} -a.anchor-link > img { - width: 0.9em; - height: 0.9em; -} -/* - * Styles for copy-to-clipboard buttons - */ -button.copy { - opacity: 70%; - border: none; - border-radius: 3px; - position: relative; - background:none; - transition: opacity 0.3s; - cursor: pointer; -} -:hover > button.copy { - opacity: 80%; -} -button.copy:hover, -button.copy:active, -button.copy:focus-visible, -button.copy.visible { - opacity: 100%; -} -button.copy img { - position: relative; - background: none; - filter: brightness(var(--copy-icon-brightness)); -} -button.copy:active { - background-color: var(--copy-button-background-color-active); -} -button.copy span { - color: var(--body-text-color); - position: relative; - top: -0.1em; - transition: all 0.1s; - font-size: 0.76rem; - line-height: 1.2em; - opacity: 0; -} -button.copy:hover span, -button.copy:focus-visible span, -button.copy.visible span { - opacity: 100%; -} -/* search page copy button */ -button#page-search-copy { - margin-left: 0.4em; - padding:0.3em; - top:0.13em; -} -button#page-search-copy img { - width: 1.2em; - height: 1.2em; - padding: 0.01em 0; - top: 0.15em; -} -button#page-search-copy span { - color: var(--body-text-color); - line-height: 1.2em; - padding: 0.2em; - top: -0.18em; -} -div.page-search-info:hover button#page-search-copy span { - opacity: 100%; -} -/* snippet copy button */ -button.snippet-copy { - position: absolute; - top: 6px; - right: 6px; - height: 1.7em; - padding: 2px; -} -button.snippet-copy img { - width: 18px; - height: 18px; - padding: 0.05em 0; -} -button.snippet-copy span { - line-height: 1.2em; - padding: 0.2em; - position: relative; - top: -0.5em; -} -div.snippet-container:hover button.snippet-copy span { - opacity: 100%; -} -/* - * Styles for user-provided tables. - * - * borderless: - * No borders, vertical margins, styled caption. - * This style is provided for use with existing doc comments. - * In general, borderless tables should not be used for layout purposes. - * - * plain: - * Plain borders around table and cells, vertical margins, styled caption. - * Best for small tables or for complex tables for tables with cells that span - * rows and columns, when the "striped" style does not work well. - * - * striped: - * Borders around the table and vertical borders between cells, striped rows, - * vertical margins, styled caption. - * Best for tables that have a header row, and a body containing a series of simple rows. - */ - -table.borderless, -table.plain, -table.striped { - margin-top: 10px; - margin-bottom: 10px; -} -table.borderless > caption, -table.plain > caption, -table.striped > caption { - font-weight: bold; - font-size: smaller; -} -table.borderless th, table.borderless td, -table.plain th, table.plain td, -table.striped th, table.striped td { - padding: 2px 5px; -} -table.borderless, -table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, -table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { - border: none; -} -table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { - background-color: transparent; -} -table.plain { - border-collapse: collapse; - border: 1px solid var(--table-border-color); -} -table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { - background-color: transparent; -} -table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, -table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { - border: 1px solid var(--table-border-color); -} -table.striped { - border-collapse: collapse; - border: 1px solid var(--table-border-color); -} -table.striped > thead { - background-color: var(--subnav-background-color); -} -table.striped > thead > tr > th, table.striped > thead > tr > td { - border: 1px solid var(--table-border-color); -} -table.striped > tbody > tr:nth-child(even) { - background-color: var(--odd-row-color) -} -table.striped > tbody > tr:nth-child(odd) { - background-color: var(--even-row-color) -} -table.striped > tbody > tr > th, table.striped > tbody > tr > td { - border-left: 1px solid var(--table-border-color); - border-right: 1px solid var(--table-border-color); -} -table.striped > tbody > tr > th { - font-weight: normal; -} -/** - * Tweak style for small screens. - */ -@media screen and (max-width: 920px) { - header.flex-header { - max-height: 100vh; - overflow-y: auto; - } - div#navbar-top { - height: 2.8em; - transition: height 0.35s ease; - } - ul.nav-list { - display: block; - width: 40%; - float:left; - clear: left; - margin: 10px 0 0 0; - padding: 0; - } - ul.nav-list li { - float: none; - padding: 6px; - margin-left: 10px; - margin-top: 2px; - } - ul.sub-nav-list-small { - display:block; - height: 100%; - width: 50%; - float: right; - clear: right; - background-color: var(--subnav-background-color); - color: var(--body-text-color); - margin: 6px 0 0 0; - padding: 0; - } - ul.sub-nav-list-small ul { - padding-left: 20px; - } - ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited { - color:var(--link-color); - } - ul.sub-nav-list-small a:hover { - color:var(--link-color-active); - } - ul.sub-nav-list-small li { - list-style:none; - float:none; - padding: 6px; - margin-top: 1px; - text-transform:uppercase; - } - ul.sub-nav-list-small > li { - margin-left: 10px; - } - ul.sub-nav-list-small li p { - margin: 5px 0; - } - div#navbar-sub-list { - display: none; - } - .top-nav a:link, .top-nav a:active, .top-nav a:visited { - display: block; - } - button#navbar-toggle-button { - width: 3.4em; - height: 2.8em; - background-color: transparent; - display: block; - float: left; - border: 0; - margin: 0 10px; - cursor: pointer; - font-size: 10px; - } - button#navbar-toggle-button .nav-bar-toggle-icon { - display: block; - width: 24px; - height: 3px; - margin: 1px 0 4px 0; - border-radius: 2px; - transition: all 0.1s; - background-color: var(--navbar-text-color); - } - button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) { - transform: rotate(45deg); - transform-origin: 10% 10%; - width: 26px; - } - button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) { - opacity: 0; - } - button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) { - transform: rotate(-45deg); - transform-origin: 10% 90%; - width: 26px; - } -} -@media screen and (max-width: 800px) { - .about-language { - padding-right: 16px; - } - ul.nav-list li { - margin-left: 5px; - } - ul.sub-nav-list-small > li { - margin-left: 5px; - } - main { - padding: 10px; - } - .summary section[class$="-summary"], .details section[class$="-details"], - .class-uses .detail, .serialized-class-details { - padding: 0 8px 5px 8px; - } - body { - -webkit-text-size-adjust: none; - } -} -@media screen and (max-width: 400px) { - .about-language { - font-size: 10px; - padding-right: 12px; - } -} -@media screen and (max-width: 400px) { - .nav-list-search { - width: 94%; - } - #search-input, #page-search-input { - width: 70%; - } -} -@media screen and (max-width: 320px) { - .nav-list-search > label { - display: none; - } - .nav-list-search { - width: 90%; - } - #search-input, #page-search-input { - width: 80%; - } -} - -pre.snippet { - background-color: var(--snippet-background-color); - color: var(--snippet-text-color); - padding: 10px; - margin: 12px 0; - overflow: auto; - white-space: pre; -} -div.snippet-container { - position: relative; -} -@media screen and (max-width: 800px) { - pre.snippet { - padding-top: 26px; - } - button.snippet-copy { - top: 4px; - right: 4px; - } -} -pre.snippet .italic { - font-style: italic; -} -pre.snippet .bold { - font-weight: bold; -} -pre.snippet .highlighted { - background-color: var(--snippet-highlight-color); - border-radius: 10%; -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136..d64cd491 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138..1af9e093 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13..1aa94a42 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. diff --git a/gradlew.bat b/gradlew.bat index 7101f8e4..6689b85b 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. goto fail diff --git a/lib/de/zbit/SysBio/1390/SysBio-1390.jar b/lib/de/zbit/SysBio/1390/SysBio-1390.jar deleted file mode 100644 index 41eddc08..00000000 Binary files a/lib/de/zbit/SysBio/1390/SysBio-1390.jar and /dev/null differ diff --git a/doc/img/ModelPolisherIcon.png b/public/img/ModelPolisherIcon.png similarity index 100% rename from doc/img/ModelPolisherIcon.png rename to public/img/ModelPolisherIcon.png diff --git a/doc/img/ModelPolisherIcon.psd b/public/img/ModelPolisherIcon.psd similarity index 100% rename from doc/img/ModelPolisherIcon.psd rename to public/img/ModelPolisherIcon.psd diff --git a/doc/img/ModelPolisherIcon256.png b/public/img/ModelPolisherIcon256.png similarity index 100% rename from doc/img/ModelPolisherIcon256.png rename to public/img/ModelPolisherIcon256.png diff --git a/docs/allclasses-index.html b/public/javadoc/allclasses-index.html similarity index 96% rename from docs/allclasses-index.html rename to public/javadoc/allclasses-index.html index f3ea6ad7..ca3e5f93 100644 --- a/docs/allclasses-index.html +++ b/public/javadoc/allclasses-index.html @@ -1,7 +1,7 @@ - + All Classes and Interfaces (ModelPolisher 2.1 API) @@ -9,12 +9,17 @@ + -
    @@ -187,7 +187,7 @@

    edu.ucsd.*

    Modifier and Type
    Constant Field
    Value
    -
    public static final String
    +
    public static final String
    "(https?://)?(www\\.)?identifiers\\.org/(?<prefix>.*?)/(?<id>.*)"
  • @@ -200,7 +200,7 @@

    edu.ucsd.*

    Modifier and Type
    Constant Field
    Value
    -
    public static final String
    +
    public static final String
    "SUBSYSTEM_LINK"
    diff --git a/docs/edu/ucsd/sbrg/ModelPolisherCLILauncher.html b/public/javadoc/edu/ucsd/sbrg/ModelPolisherCLILauncher.html similarity index 87% rename from docs/edu/ucsd/sbrg/ModelPolisherCLILauncher.html rename to public/javadoc/edu/ucsd/sbrg/ModelPolisherCLILauncher.html index 2eed11c2..b2465d71 100644 --- a/docs/edu/ucsd/sbrg/ModelPolisherCLILauncher.html +++ b/public/javadoc/edu/ucsd/sbrg/ModelPolisherCLILauncher.html @@ -1,7 +1,7 @@ - + ModelPolisherCLILauncher (ModelPolisher 2.1 API) @@ -9,12 +9,17 @@ + -
    @@ -216,7 +202,7 @@

    values

  • valueOf

    -
    public static ModelPolisherOptions.OutputType valueOf(String name)
    +
    public static ModelPolisherOptions.OutputType valueOf(String name)
    Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are @@ -227,15 +213,15 @@

    valueOf

    Returns:
    the enum constant with the specified name
    Throws:
    -
    IllegalArgumentException - if this enum class has no constant with the specified name
    -
    NullPointerException - if the argument is null
    +
    IllegalArgumentException - if this enum class has no constant with the specified name
    +
    NullPointerException - if the argument is null
  • getFileExtension

    -
    public String getFileExtension()
    +
    public String getFileExtension()
  • diff --git a/docs/edu/ucsd/sbrg/ModelPolisherOptions.html b/public/javadoc/edu/ucsd/sbrg/ModelPolisherOptions.html similarity index 78% rename from docs/edu/ucsd/sbrg/ModelPolisherOptions.html rename to public/javadoc/edu/ucsd/sbrg/ModelPolisherOptions.html index 73d1fb57..2f0382ff 100644 --- a/docs/edu/ucsd/sbrg/ModelPolisherOptions.html +++ b/public/javadoc/edu/ucsd/sbrg/ModelPolisherOptions.html @@ -1,7 +1,7 @@ - + ModelPolisherOptions (ModelPolisher 2.1 API) @@ -9,6 +9,7 @@ + @@ -23,7 +24,7 @@