diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d3a52542e..45a45bf11 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing to MetacatUI -:tada: First off, thanks for contributing!:tada: +:tada: First off, thanks for contributing! :tada: - [Types of contributions](#types-of-contributions) - [Pull Requests](#pull-requests) @@ -18,8 +18,9 @@ bug reports, documentation, graphics, and many others. You might consider contr - Report a bug or request a new feature in our [issue tracker](https://github.com/NCEAS/metacatui/issues) - Fix a bug and contribute the code with a Pull Request - Write or edit some documentation -- Develop a screencast tutorial -- Answer questions on our mailing list or Slack team +- Sharing helpful tips or FAQ-type answers to users or future contributors +- Create screenshots or tutorials of features of MetacatUI +- Answer questions on our mailing list or [Slack team](https://slack.dataone.org/) - ... MetacatUI is an open source project, and we welcome full @@ -38,8 +39,9 @@ In short: - on your computer, clone your forked copy of the MetacatUI repository - checkout a development branch and commit your changes - push your branch to your forked repository, and submit a pull-request -- go through the review process, making changes until your pull-request can be merged -- describe your changes in the issue, and close your issue. +- our team will be notified of your Pull Request and will review your changes +- our team may request changes before we will approve the Pull Request, or we will make them for you +- once the code is reviewed, our team will merge in your changes and you're done! ## Development Workflow @@ -58,18 +60,17 @@ create one `dev-x.y` branch for integrated development and testing of the set of targeting a particular release. Much of the development happens directly on these *dev* branches, but when needed a separate feature branch can be created to isolate development on a specific set of capabilities, especially if it may be disruptive to other developers -working on the main dev-* branch. +working on the main `dev-*` branch. -**feature**. Feature branches should be named with a prefix of the `dev` branch -that they are targeting, +**feature**. Feature branches should be named with a prefix of `feature` and should include a short descriptive label reflecting their purpose. For example, -`dev-2.9-indexing` might be a new feature being developed independently but intended to be merged into the `dev-2.9` branch. If a feature is being developed for an uncertain future -release, the branch should be prefixed with `feature-` and contain a descriptive label. -For example, a `feature-globus_auth` might target some unknown future release. +`feature-new-search` may be a branch name for a feature related to a new search tool. +You may also want to include the release version that you are targeting, such `feature-2.11.2-new-search`, or the branch you are targeting to merge into, such as `feature-dev-2.11-new-search`. +You may also want to include the issue number that describes the feature, such as `feature-#1456-new-search`. All development branches should be frequently merged with changes from `master` to ensure that the development branch stays up to date with other features that have -been tested and are awaiting release. Thus, each `dev-*` branch represents an opportunity +been tested and are awaiting release. Thus, each `feature-*` branch represents an opportunity for integration testing of the set of features intended to work together for a particular release. @@ -81,22 +82,15 @@ particular release. ## Release process -The release process starts with integration testing in a `dev*` branch. Once all -changes that are desired in a release are merged into the `dev` branch, we run -the full set of tests on a clean checkout of the `dev` branch. - -Second, create a pull request to merge those changes from the `metacatui/dev-*` branch -to the `metacatui/master` branch. This pull request should be done from the `dev*` -branch within the MetacatUI repository in order to make it simple for others to -review the changes, and to maintain a record of the development branch commits. -This pull request will be reviewed by another developer, and, after issues and -feedback have been resolved, the pull request can be merged into master. This -cycle can be repeated multiple times until all features have been tested and -merged into master. At this point, if all features for the planned release -have been merged to master, then the master branch can be merged to the -`releases` branch, and tagged with the new release tag for that release. At +1. Our release process starts with integration testing in a `dev-*` branch. Once all +changes that are desired in a release are merged into the `dev-` branch, we run +the full set of tests on a clean checkout of the `dev-` branch. +2. After testing, the `dev-` branch is merged to master. +3. Then the master branch can be merged to the `releases` branch, and tagged with +the new version number (e.g. `2.11.2`). At this point, the tip of the `releases` branch will reflect the new release and the master branch is ready for work on the next release. +4. Releases can be downloaded from the [Github releases page for the MetacatUI repository](https://github.com/NCEAS/metacatui/releases). ## Testing @@ -106,7 +100,7 @@ Any new code developed should include a robust set of unit tests for each public method, as well as integration tests from new feature sets. Tests should fully exercise the feature to ensure that it responds correctly to both good data inputs as well as various classes of corrupt or bad data. All tests should pass before -a `dev` branch is merged to master, and all tests should pass before the `master` +a `dev-` branch is merged to master, and all tests should pass before the `master` branch is merged to `releases` and tagged for a release. ## Code style diff --git a/README.md b/README.md index cef620cad..6b21ce5fe 100644 --- a/README.md +++ b/README.md @@ -1,182 +1,36 @@ ## MetacatUI: A client-side web interface for DataONE data repositories -- **Author**: Matthew B. Jones, Chris Jones, Ben Leinfelder, Lauren Walker, Bryce Mecum, Peter Slaughter, Rushiraj Nenuji, Robyn Thiessen-Bock ([NCEAS](http://www.nceas.ucsb.edu)) +- **Author**: Matthew B. Jones, Chris Jones, Ben Leinfelder, Lauren Walker, Bryce Mecum, Peter Slaughter, Rushiraj Nenuji, Robyn Thiessen-Bock ([NCEAS](https://www.nceas.ucsb.edu)) - **License**: [Apache 2](http://opensource.org/licenses/Apache-2.0) - [Package source code on Github](https://github.com/NCEAS/metacatui) -- [**Submit Bugs and feature requests**](https://github.com/NCEAS/metacatui/issues) -- [Task Board](https://waffle.io/NCEAS/metacatui) -- Discussion list: metacat-dev@ecoinformatics.org +- [**Submit Bugs and feature requests**](https://github.com/NCEAS/metacatui/issues/new/choose) +- Contact us: metacat-dev@ecoinformatics.org MetacatUI is a client-side web interface for querying Metacat servers and other servers that implement the DataONE REST API. Currently, it is used as the basis for the [KNB Data Repository](http://knb.ecoinformatics.org), the [NSF Arctic Data Center](https://arcticdata.io/catalog/), the [DataONE federation](https://search.dataone.org), and other repositories. -MetacatUI is an open source, community project. We welcome contributions in many forms, including code, graphics, documentation, bug reports, testing, etc. Use the [discussion list](https://github.com/NCEAS/metacatui/issues) to discuss these contributions with project contributors. +MetacatUI is an open source, community project. We [welcome contributions](https://github.com/NCEAS/metacatui/blob/master/CONTRIBUTING.md) in many forms, including code, graphics, documentation, bug reports, testing, etc. Use the [discussion list](https://github.com/NCEAS/metacatui/issues) to discuss these contributions with us. ## Screenshots -The main search screen, as configured for the KNB Repository: +The main search view ![KNB Search](https://raw.githubusercontent.com/NCEAS/metacatui/master/docs/screenshots/metacatui-knb-1200w.png) -A metadata view, as configured for the Arctic Data Center: +The dataset landing page ![Arctic Data Center Metadata View](https://raw.githubusercontent.com/NCEAS/metacatui/master/docs/screenshots/metacatui-arctic-1200w.png) -## Installation - -### Using MetacatUI with your own Metacat repository - See the [Metacat documentation](https://github.com/NCEAS/metacat) for full installation instructions. In particular, the [`themes` section](https://github.com/NCEAS/metacat/blob/master/docs/user/metacat/source/themes.rst) of the Metacat documentation gives installation instructions for using MetacatUI with your Metacat repository. - -### Using MetacatUI locally with a remote Metacat repository -To run MetacatUI, you will need to first install a web server such as [Apache](https://httpd.apache.org/). The following instructions are for Mac OS X. Apache comes pre-installed on Mac OS X. - -#### Step 1. Set up Apache -- Choose a location from which to serve *all* your Apache website files. A good location is `/Users/{username}/Sites` -- Make a subdirectory in `~/Sites` specifically for MetacatUI. The default directory name for MetacatUI is `metacatui`. - - ``` - mkdir ~/Sites/metacatui - ``` - -- Configure Apache to serve files from your `Sites` directory by opening `/etc/apache2/httpd.conf` and changing the `DocumentRoot` pathname. Example: - - ``` - DocumentRoot "/Users/walker/Sites" - - ``` - -#### Step 2. Configure a VirtualHost in Apache for MetacatUI -- First, create a backup of the default httpd-vhosts.conf file: - - ``` - sudo cp /etc/apache2/extra/httpd-vhosts.conf /etc/apache2/extra/httpd-vhosts.conf.bak - ``` - -- Clear out the example VirtualHost configuration if it is there, and add a VirtualHost for the `~/Sites/metacatui` directory (make sure `walker` is replaced with your username): - - ``` - - DocumentRoot "/Users/walker/Sites" - ServerName metacatui.localhost - ErrorLog "/private/var/log/apache2/metacatui-error_log" - CustomLog "/private/var/log/apache2/metacatui-access_log" common - - # Allow encoded slashes in URLs so encoded identifiers can be sent in MetacatUI URLs - AllowEncodedSlashes On - - - FallbackResource /metacatui/index.html - - - ``` - -The FallbackResource configuration is how MetacatUI is able to use real pathnames like `/data/page/2` for a single-page application. - -The FallbackResource directive requires your Apache version to be `2.2.16` and above. If you're using the earlier versions of Apache, you'll require `mod_rewrite` in your configuration. Example: - - ``` - - ... - ... - - - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] - - - ``` - -- Create a host name for `metacatui.locahost`. First, open `/etc/hosts`: - - ``` - sudo vi /etc/hosts - ``` - -- Add `metacatui.localhost` to the bottom of the file. **Be careful not to change any other part of this file!**: +----------------- - ``` - # metacatui local site - 127.0.0.1 metacatui.localhost - ``` - -- Save your `/etc/hosts` changes and start (or restart) Apache: - - ``` - sudo apachectl start - ``` - -#### Step 3. Configure MetacatUI -- Download the [latest MetacatUI release .zip file](https://github.com/NCEAS/metacatui/releases) and unzip it -- Open `src/index.html` in a text editor and change the following values: - - Set the `data-theme` to your chosen theme name, e.g. `default`, `knb`, `arctic`. - - Set `data-metacat-context` to match the Metacat directory name of the remote Metacat you will be using. For example, Metacat is installed at https://dev.nceas.ucsb.edu/knb so the `data-metacat-context` would be set to `knb`. Most Metacat installations are at `metacat` since that is the default. - - Optional: Replace `YOUR-GOOGLE-MAPS-API-KEY` with your [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key) to enable the Google Map features of MetacatUI. If no API key is given, MetacatUI will still work, it just will not include the map features. -- Open `src/js/models/AppModel.js`, or if using a theme other than the default theme, `src/js/themes/{theme name}/models/AppModel.js` and change the following values: - - Set `baseUrl` to the URL where the remote Metacat is (e.g. `https://dev.nceas.ucsb.edu`) - - Set `d1CNBaseUrl` to the URL of the DataONE Coordinating Node that the Metacat Member Node is a part of. (e.g. the Member Node `urn:node:mnTestKNB` is in the `urn:node:cnStage` Coordinating Node, so this attribute would be set to `https://cn-stage.test.dataone.org/`) - -- *Note: If you installed MetacatUI somewhere other than the location in step 2 above:* you will need to change the `loader.js` pathname in `index.html` and the `MetacatUI.root` pathname in `loader.js` to the custom location where MetacatUI is located. For example, if you installed MetacatUI at root instead of in a `metacatui` subdirectory, your `loader.js` pathname in `index.html` would be `/loader.js` and `MetacatUI.root` would be `/`. - -#### Step 4. Move MetacatUI files to Apache -- Move the MetacatUI application code to the directory we chose in Step 2. - - ``` - cp -rf metacatui-2.0.0/src/* ~/Sites/metacatui/ - ``` - -- Open a web browser and navigate to `metacatui.localhost/metacatui` and your MetacatUI application should be ready to go! - -### Using MetacatUI locally with a remote DataONE Coordinating Node - -#### Step 1. -- Follow Step 1-2 above to configure the Apache web server on your local machine. - -#### Step 2. Configure MetacatUI -- Download the [latest MetacatUI release .zip file](https://github.com/NCEAS/metacatui/releases) and unzip it -- Open `src/index.html` in a text editor and change the following values: - - Set the `data-theme` to `dataone`. - - Remove the value of `data-metacat-context` since DataONE CN URLs do not have a metacat directory - - Optional: Replace `YOUR-GOOGLE-MAPS-API-KEY` with your [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key) to enable the Google Map features of MetacatUI. If no API key is given, MetacatUI will still work, it just will not include the map features. -- Open `src/js/themes/dataone/models/AppModel.js` and change the following values: - - Set `baseUrl` and `d1CNBaseUrl` to the URL where the remote DataONE CN is (e.g. `https://cn-stage.test.dataone.org`) -- Open `src/loader.js` and set the value for the following property: - - Set `MetacatUI.root` based on the location off of its top directory. Example: - - If the source code is located at `~/Sites/metacatui` (as detailed in Step 1), set the `MetacatUI.root = "/metacatui"`. - -#### Step 3. Move MetacatUI files to Apache -- Move the MetacatUI application code to the directory we chose in Step 1. - - ``` - cp -rf metacatui-2.0.0/src/* ~/Sites/metacatui/ - ``` - -- Open a web browser and navigate to `metacatui.localhost/metacatui` and your MetacatUI application should be ready to go! - -## Development - -### Running - -While developing on MetacatUI, it's necessary to run a web server of some sort in order for the application to work completely. -You can set up a web server such as Apache as described above in the Installation section but MetacatUI also comes with a simple [Express.js](https://expressjs.com) application that uses [node.js](https://nodejs.org). - -Pre-requisites: +## Installation -1. [node.js](https://nodejs.org) and `npm` -2. [Express.js](https://expressjs.com): Install with `npm install express` +See the [installation instructions](https://nceas.github.io/metacatui/install) on the MetacatUI website. -Steps: +----------------- -1. Set up `index.html` and `loader.js` as described above in the Installation section. -2. Run the folowing commands in a terminal: +## Documentation -```sh -# from this repository's top level directory -npm install express -node server.js -``` +Documentation can be found on the [MetacatUI website](https://nceas.github.io/metacatui). -Now MetacatUI should be serving at http://localhost:3000 and you should be able to visit it in your web browser. +----------------- ## License ``` diff --git a/docs/README.md b/docs/README.md index 2d774d139..946602f0d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,18 +1,22 @@ # MetacatUI Github Pages website This folder of the MetacatUI repository houses the files for a simple website about MetacatUI. This website contains: - Basic information about MetacatUI +- Installation instructions - Developer documentation for the MetacatUI application -## Building documentation -To build the MetacatUI JSDoc documentation HTML files, run the following commands: +You can view the last published version of the Github site here: https://nceas.github.io/metacatui/ -### Step 1. Install jsdoc -```bash -npm install jsdoc -``` +## Building Developer documentation +MetacatUI uses [JSDoc](https://github.com/jsdoc/jsdoc) comments to provide inline documentation of classes, methods, and variables. A JSDoc documentation generator will collect all those comments and generate HTML webpages for easier reading and navigation. -### Step 2. Build docs -```bash -cd /path/to/git/datadepot -jsdoc -r -d docs/docs/ -c docs/jsdoc-templates/metacatui/conf.js src/js/ -``` +The MetacatUI git repository already contains these generated HTML pages in the `docs/docs` directory. However, if you have made changes to the MetacatUI code and documentation and want to update the HTML doc pages, you will need to run the JSDoc generator. + +To build a fresh version of the MetacatUI developer docs, simply run the `docs/build.sh` script. This script must be run from the root directory of MetacatUI (`datadepot`) or from the first `docs` directory (`datadepot/docs`) + +To view the JSDoc documentation, you can navigate to the file in your browser. E.g. file:///Users/walker/git/datadepot/docs/docs/index.html + +Once your changes to the JSDocs are merged into the `master` branch, they will go live on the Github pages site at https://nceas.github.io/metacatui/docs/index.html + +## Adding to this site +Feel free to add webpages to the MetacatUI website by adding markdown files to this `docs` directory. Use subdirectories +as much as possible to keep things organized. diff --git a/docs/build.sh b/docs/build.sh new file mode 100644 index 000000000..aaa673c77 --- /dev/null +++ b/docs/build.sh @@ -0,0 +1,54 @@ +isJsdocInstalled=$(command -v jsdoc) + +if [ -z $isJsdocInstalled ] + then + echo "The Node.js package 'jsdoc' isn't installed. Attempting to install with 'npm install jsdoc'..." + npm install jsdoc +fi + +isJsdocInstalled=$(command -v jsdoc) + +if [ -z $isJsdocInstalled ] + then + echo "-------------------------------" + echo "METACATUI DOCS BUILD ERROR: Installation of jsdoc failed. Please install jsdoc and try to run this script again: https://www.npmjs.com/package/jsdoc" + echo "-------------------------------" + exit +fi + +# Build the documentation +currentFullDir=$(pwd) +currentDirOnly=${PWD##*/} +expectedDir="datadepot" +docsDir="docs" + +# If we are in the expected directory (the root directory of MetacatUI) +if [ "$currentDirOnly" = "$expectedDir" ] + then + echo "Building MetacatUI docs..." + #Build the jsdocs + jsdoc -r -d docs/docs/ -c docs/jsdoc-templates/metacatui/conf.js src/js/ + elif [ "$currentDirOnly" = "$docsDir" ] + then + cd ../ + newDir=${PWD##*/} + if [ "$newDir" = "$expectedDir" ] + then + echo "Building MetacatUI docs..." + #Build the jsdocs + jsdoc -r -d docs/docs/ -c docs/jsdoc-templates/metacatui/conf.js src/js/ + cd $currentFullDir + else + echo "-------------------------------" + echo "METACATUI DOCS BUILD ERROR: Please run this command from the root directory of the MetacatUI app (datadepot) or from the datadepot/docs directory." + echo "-------------------------------" + exit + fi + else + echo "-------------------------------" + echo "METACATUI DOCS BUILD ERROR: Please run this command from the root directory of the MetacatUI app (datadepot) or from the datadepot/docs directory." + echo "-------------------------------" + exit +fi + +echo "SUCCESS! View the documentation home page in your web browser: docs/docs/index.html" diff --git a/docs/configuration/accesspolicy.md b/docs/configuration/accesspolicy.md new file mode 100644 index 000000000..c3c64f39a --- /dev/null +++ b/docs/configuration/accesspolicy.md @@ -0,0 +1,26 @@ + +### Setting a default access policy for uploads +In the `AppModel.js`, set the default access policy via the `defaultAccessPolicy` attribute. The default access policy is an array of literal objects +with the following attributes: +`subject`, `read`, `write`, and `changePermission`. + +The values of these attributes will be serialized to the system metadata of each object uploaded via the MetacatUI editor. +Example access policy that makes all objects publicly readable: +```Javascript +[{ + subject: "public", + read: true, + write: false, + changePermission: false +}] +``` + +This access policy will be serialized into the system metadata as: +```xml + + + public + read + + +``` diff --git a/docs/configuration/index.md b/docs/configuration/index.md new file mode 100644 index 000000000..cd2d64713 --- /dev/null +++ b/docs/configuration/index.md @@ -0,0 +1,177 @@ +# MetacatUI Themes + +MetacatUI comes with a few themes already installed: `default`, `knb`, `arctic`, and `dataone`. +The `default` theme can be used out-of-box. It is recommended since it has an unbranded style and has is configured for general use. The other themes are included as examples, but are very repository-specific. + +## Creating a custom theme +The look and feel of your MetacatUI can be customized by creating a custom theme. + +The basic components of a custom theme are: +1. A navigation bar at the top of the page (`navbar.html` template) +2. A footer at the bottom of the page (`footer.html` template) +3. Custom CSS so you can use your own colors, fonts, etc. +4. An `AppModel` that contains configuration values for your MetacatUI theme and installation + +To create a custom theme, do the following: + +### Step 1. Copy the default theme as a starting point +Copy and paste the `js/themes/default` directory to a new directory with the name of +your theme: + + ``` + cp -rf src/js/themes/default src/js/themes/{my-theme-name} + ``` + +Where `{my-theme-name}` is replaced with your chosen theme name. + +### Step 2. Create a `templates` directory: + + ``` + mkdir src/js/themes/{my-theme-name}/templates + ``` + +### Step 3. Customize the default navbar and footer templates + + ``` + cp src/js/templates/navbar.html src/js/themes/{my-theme-name}/templates/navbar.html + cp src/js/templates/footer.html src/js/themes/{my-theme-name}/templates/footer.html + ``` + +Open up the navbar.html and footer.html files in a text editor and change the HTML +so that it shows the links, logo, and other content you'd like. + +Simple Javascript can be used in these templates. It may also be useful to use the `MetacatUI.root` variable, +which is the root path of your MetacatUI installation, taken directly from `src/loader.js`. + +For example, to add your organization's logo, put your logo file in `src/js/themes/{my-theme-name}/img/` and add +HTML for the logo to a template: + ``` + + NCEAS + + ``` + +**Note:** The `navbar` template contains links that you will want to keep in your custom `navbar` template, +such as links to "My profile" and "My datasets" when a user is logged in, the "Sign In" button, etc. +Proceed carefully with this template. You may just want to update the logo image and leave the rest intact, to start with. + +### Step 4. Customize CSS + +In `src/js/themes/{my-theme-name}/css/metacatui.css` and `src/js/themes/{my-theme-name}/css/metacatui.responsive.css`, +you can add or edit any CSS to make your theme branded the way you'd like. + +### Step 5. Configure your theme's functionality + +Create an `AppModel` for your theme: + + ``` + mkdir src/js/themes/{my-theme-name}/models + cp src/js/models/AppModel.js src/js/themes/{my-theme-name}/models/ + ``` + +The `AppModel` contains MetacatUI settings that control many MetacatUI features. You may want to configure some of these according to your needs. See the [`AppModel` documentation](../docs/AppModel.html#defaults) for details. + +### Step 6. Create a theme map to tie it all together + +The last piece that glues all your custom theme parts together is your theme `config.js` file. Open the `config.js` file +in a text editor and in the `themeMap` json variable, add a new line for every template you have customized for your new theme. +What this does is map the default location of these app components to the customized location (in your theme directory). + +An example for the `footer.html`, `navbar.html`, and `AppModel.js` files is below. Your CSS does not need to be included here. + + ``` + MetacatUI.themeMap = + { + '*': { + // example overrides are provided here + 'templates/navbar.html' : MetacatUI.root + '/js/themes/' + MetacatUI.theme + '/templates/navbar.html', + 'templates/footer.html' : MetacatUI.root + '/js/themes/' + MetacatUI.theme + '/templates/footer.html', + 'models/AppModel' : MetacatUI.root + '/js/themes/' + MetacatUI.theme + '/models/AppModel.js' + } + }; + ``` + +## Advanced customization by extending models and views +All the models, collections, views, routers, and templates required to run +MetacatUI are in the `js` directory. Any of these files can be extended by your custom +theme to provide additional functionality on top of the default MetacatUI functionality. + +> **Warning** +While extending models and views is supported, we suggest that you proceed carefully, +because: +- Your customizations may break after updating MetacatUI to a new version. You may need to make manual changes to get them working again. +- If you completely override a function inside of a model or view, you might break something. + +That being said, please feel free to extend MetacatUI as much as you'd like! If you +make an extension that you think would be useful to other MetacatUI users, we suggest +you make a Pull Request to MetacatUI so your code can be merged into the MetacatUI source code. +This is mutually beneficial, since your code will be maintained by the MetacatUI dev team, +meaning you have less maintenance to do! + - Submit a [pull request](https://github.com/NCEAS/metacatui/compare) + - More details on [contributing](https://github.com/NCEAS/metacatui/blob/master/CONTRIBUTING.md). + +### How to extend a model or view + +#### Step 1. Make a file for the extended component + +Create a directory and file in your theme directory. It's helpful to keep the same +file organization as the source code by creating a `model`, `view`, or other subdirectory inside your theme directory. + +For example, say we want to extend the `TextView`: + + ``` + mkdir src/js/themes/{my-theme-name}/views + touch src/js/themes/{my-theme-name}/views/TextView.js + ``` + +#### Step 2. Add the extended component to your themeMap + +Continuing the TextView example: +First, we want to override the name of the `views/TextView` component. In your `src/js/themes/{my-theme-name}/config.js` +file, edit the `themeMap` variable. +Add a line for the base `TextView` and rename it something like `views/BaseTextView`: + + ``` + "views/BaseTextView" : MetacatUI.root + "/js/views/TextView.js", + ``` +**What does this do?** This maps a new component, `views/BaseTextView`, in the application to the `/js/views/TextView.js` file. If you were to stop here, you would see no change in MetacatUI, since the `views/BaseTextView` component isn't used by any view in the app. + +Next, add a line that maps your extended `TextView` to the `views/TextView` name: + + ``` + "views/TextView" : MetacatUI.root + "/js/themes/" + MetacatUI.theme + "/views/TextView.js", + ``` + +**What does this do?** This maps the existing component,`views/TextView`, to the custom `TextView.js` file +that we created in Step 1. (If you were to stop here, your TextView would break and throw errors because your +theme `TextView.js` file is empty.) + +#### Step 3. Create your extended component + +Continuing the TextView example, we would edit the view so that it `requires` the `views/BaseTextView` component +(the base TextView that we are extending), along with any other components we want to use, such as jQuery, Backbone, etc. + +Then we create and return a Backbone view that `extend`s the `BaseTextView`. + +Then we add the custom functionality to the view. In this example, we just added a function that +logs "Hello world!" to the console. + + ``` + define(["jquery", "underscore", "backbone", + "views/BaseTextView"], + function($, _, Backbone, BaseTextView) { + "use strict"; + + var TextView = BaseTextView.extend({ + myNewFunction: function(){ + console.log("Hello world!") + } + }); + return TextView; + }); + ``` + +#### Step 4. Done! + +You should be able to run your custom theme and see that both the base component and the extended component are +loaded into the app. diff --git a/docs/design/editor/editor-design-eml-package.rst b/docs/design/editor/editor-design-eml-package.rst deleted file mode 100644 index f1eb0b572..000000000 --- a/docs/design/editor/editor-design-eml-package.rst +++ /dev/null @@ -1,205 +0,0 @@ -.. - @startuml images/editor-design-eml-package.png - - !include plantuml-styles.txt - - ' override the linetype - skinparam linetype ortho - - - package metacatui { - class EML <> { - + isEditable : Boolean - + alternateIdentifier : String [*] - + shortName : String - + title : String - + creator : EMLParty [*] - + metadataProvider : EMLParty [*] - + associatedParty : EMLParty [*] - + pubDate : String - + language : String - + series : String - + abstract : String [*] - + keywordSet : EMLKeyword [*] - + additionalInfo : String [*] - + intellectualRights : String [*] - + onlineDist : EMLOnlineDist [*] - + offlineDist : EMLOfflineDist [*] - + geographicCoverages : GeographicCoverage [*] - + temporalCoverages : TemporalCoverage [*] - + taxonomicClassifications : Taxon [*] - + purpose : String [*] - + contact : EMLParty [*] - + publisher : EMLParty [*] - + pubPlace : String - + methods : EMLMethods [*] - + project : EMLProject [*] - + validate() : Boolean - + parse() : EML - + toXML() : String - + addEntity() : DataONEObject - + removeEntity() : String - } - - note top of EML - For now, we model the EML - dataset module only. We'll refactor - to support the software, citation, and - protocol modules as needed. - end note - - class EMLViewer <> { - } - - class EMLKeyword <> { - + keyword : String - + type : String - + keywordThesaurus : String - + validate() : Boolean - + parse() : EMLKeyword - + toXML() : String - } - - class EMLOnlineDist <> { - + url : String - + urlFunction : String (information or download) - + onlineDescription : String - + parse() : EMLOnlineDist - + toXML() : String - } - - class EMLOfflineDist <> { - + mediumName : String - + mediumVolume : String - + mediumFormat : String - + mediumNote : String - + parse() : EMLOfflineDist - + toXML() : String - } - - class GeographicCoverage { - - data : GeoJSONObject - + validate() : Boolean - + toGeoJSON() : String - + fromGeoJSON() : GeoJSONObject - + parse() : GeographicCoverage - + toXML() : String - } - - class TemporalCoverage <> { - + beginDate : String - + beginTime : String - + endDate : String - + endTime : String - + validate() : Boolean - + parse() : TemporalCoverage - + toXML() : String - } - - note bottom - We will first only support - Gregorian dates. We'll change - the property types from String - to a subclass when we support - alternative time scales. - end note - - class Taxon <> { - + parentId : String - + taxonomicRank : String - + taxonomicValue : String - + commonNames : String [*] - + validate() : Boolean - + parse() : Taxon - + toXML() : String - } - - class EMLParty <> { - + givenName : String - + surName : String - + organizationName : String - + role : String - + deliveryPoint : String [*] - + city : String - + administrativeArea : String - + postalCode : String - + country : String - + phone : String [*] - + fax : String [*] - + electronicMailAddress : String [*] - + onlineUrl : String [*] - + userId : String [*] - + validate() : Boolean - + parse() : EMLParty - + toXML() : String - } - - class EMLMethods <> { - + methodSteps : { title : String, paragraph : String [*] } [*] - + studyExtent : { title : String, paragraph : String [*] } [*] - + samplingDescription : { title : String, paragraph : String [*] } [*] - + parse() : EMLMethods - + toXML() : String - } - - class EMLProject <> { - + title : String - + funding : String - + personnel : EMLParty [*] - + parse() : EMLProject - + toXML() : String - } - - class EMLDataTable { - } - - class EMLSpatialRaster { - } - - class EMLSpatialVector { - } - - class EMLStoredProcedure { - } - - class EMLView { - } - - class EMLOtherEntity { - id : String - alternateIdentifier : String - entityName : String - entityDescription : String [*] - 'physical : EMLPhysical - - } - - note bottom - We minimally support the otherEntity class at first, - and will eventually support it fully, along with - the EML DataTable, SpatialRaster, SpatialVector, - StoredProcedure, and View classes. - end note - - } - - EML *-- EMLParty : "hasModule" - EML *-- EMLMethods : hasModule - EML *-- EMLProject : hasModule - EML *-- GeographicCoverage : "hasModule" - EML *-- TemporalCoverage : "hasModule" - EML *-- Taxon : "hasModule" - EML *-- EMLOnlineDist : hasModule - EML *-- EMLOfflineDist : hasModule - EML *-- EMLKeyword : hasModule - EML *-- EMLDataTable : hasModule - EML *-- EMLSpatialRaster : hasModule - EML *-- EMLSpatialVector : hasModule - EML *-- EMLStoredProcedure : hasModule - EML *-- EMLView : hasModule - EML *-- EMLOtherEntity : hasModule - EML <.right. EMLViewer : listensTo - - @enduml - -.. image:: images/editor-design-eml-package.png diff --git a/docs/design/editor/editor-design-metacatui-package.rst b/docs/design/editor/editor-design-metacatui-package.rst deleted file mode 100644 index 853b09ad6..000000000 --- a/docs/design/editor/editor-design-metacatui-package.rst +++ /dev/null @@ -1,237 +0,0 @@ -.. - @startuml images/editor-design-metacatui-package.png - !include plantuml-styles.txt - - ' override the linetype - skinparam linetype ortho - - package metacatui { - together { - class MediaType { - + name : String - + properties : String [*] - } - - note bottom of MediaType - We may need to delimit property - K/V pairs with a known delimiter - end note - - class Replica <> { - + replicaMemberNode : String - + replicationStatus : String - + replicaVerified : String - + validate() : Boolean - + parse() : Replica - + toXML() : String - } - - class ReplicationPolicy <> { - + preferredMemberNodes : String [*] - + blockedMemberNodes : String [*] - + replicationAllowed : Boolean - + numberReplicas : Integer - + validate() : Boolean - + parse() : ReplicationPolicy - + toXML() : String - } - - class AccessRule <> { - + subject : String [*] - + permission : String [*] - + allow : Boolean - + validate() : Boolean - + parse() : AccessRule - + toXML() : String - } - - } - - class QualityGuideResults <> { - } - - note bottom - We'll wait to model the quality guide - results until we have a better understanding - of the MDQ engine output - end note - - class ScienceMetadata { - abstract : String [*] - attribute : String [*] - attributeDescription : String [*] - attributeLabel : String [*] - attributeName : String [*] - attributeUnit : String [*] - author : String - authorGivenName : String - authoritativeMN : String - authorLastName : String [*] - authorSurName : String - beginDate : String - changePermission : String [*] - contactOrganization : String [*] - datasource : String - dataUrl : String - dateModified : String - datePublished : String - dateUploaded : String - decade : String - documents : String [*] - edition : String - endDate : String - fileID : String - formatType : String - gcmdKeyword : String [*] - investigator : String [*] - isDocumentedBy : String [*] - isPublic : String - keyConcept : String [*] - keywords : String [*] - mediaType : String - mediaTypeProperty : String [*] - origin : String [*] - originator : String [*] - placeKey : String [*] - presentationCat : String - project : String - pubDate : String - purpose : String - readPermission : String [*] - relatedOrganizations : String [*] - replicaMN : String [*] - resourceMap : String [*] - sensor : String [*] - sensorText : String [*] - source : String [*] - scientificName : String [*] - species : String [*] - genus : String [*] - family : String [*] - class : String [*] - phylum : String [*] - order : String [*] - kingdom : String [*] - westBoundCoord : String - eastBoundCoord : String - northBoundCoord : String - southBoundCoord : String - site : String [*] - namedLocation : String [*] - noBoundingBox : String - geoform : String - isSpatial : String - geohash_1 : String [*] - geohash_2 : String [*] - geohash_3 : String [*] - geohash_4 : String [*] - geohash_5 : String [*] - geohash_6 : String [*] - geohash_7 : String [*] - geohash_8 : String [*] - geohash_9 : String [*] - sem_annotated_by : String [*] - sem_annotates : String [*] - sem_annotation : String [*] - sem_comment : String [*] - } - - class DataONEObject <> { - + serialVersion : String - + id : String - + formatId : String - + formatType: {'data'|'metadata'|'resource'} - + size : String - + checksum: String - + checksumAlgorithm : String - + submitter: String - + rightsHolder : String - + accessPolicy: AccessRule [*] - + replicationPolicy : ReplicationPolicy - + obsoletes : String - + obsoletedBy : String - + archived : Boolean - + dateUploaded : String - + dateSysMetadataModified : String - + originMemberNode : String - + authoritativeMemberNode : String - + replica : Replica [*] - + seriesId : String - + mediaType : MediaType - + fileName : String - + nodeLevel : String - + uploadStatus : String - + uploadFile : File - + prov_generated : String [*] - + prov_generatedByExecution : String [*] - + prov_generatedByProgram : String [*] - + prov_generatedByUser : String [*] - + prov_hasDerivations : String [*] - + prov_hasSources : String [*] - + prov_instanceOfClass : String [*] - + prov_used : String [*] - + prov_usedByExecution : String [*] - + prov_usedByProgram : String [*] - + prov_usedByUser : String [*] - + prov_wasDerivedFrom : String [*] - + prov_wasExecutedByExecution : String [*] - + prov_wasExecutedByUser : String [*] - + prov_wasInformedBy : String [*] - + getSystemMetadata() : String - + validate() : Boolean - + parse() : DataONEObject - + toXML() : String - } - - note right - The HTML5 File API doesn't - allow file access via the - full path, but only from a - File instance. This may affect - persisted, incomplete uploads - stored in localStorage. - end note - - class DataPackage <> { - + models : DataONEObject [*] - + model : DataONEObject - + childPackages : DataPackage [*] - - transferQueue : DataONEObject [*] - + editable : Boolean - + initialize() : DataPackage - + sync() - + save() - + destroy() - + update() - + parse() : DataPackage - - toRDF() : String - } - - class DataPackageView { - - handleUpload() - } - note left - A DataPackageView represents the - table of items in the data package - end note - - class DataItemView { - } - note left - A DataItemView represents a single row - view in the DataPackageView table - end note - } - - DataPackage o-- DataONEObject : collectionOf - DataPackage <.right. DataPackageView : listensTo - DataONEObject <.right. DataItemView : listensTo - DataONEObject <|-- ScienceMetadata : "subclassOf" - DataONEObject <-- QualityGuideResults : describes - DataONEObject *-- AccessRule : "contains" - DataONEObject *-- ReplicationPolicy : "contains" - DataONEObject *-- Replica : " contains" - DataONEObject *-- MediaType : "contains" - - - @enduml \ No newline at end of file diff --git a/docs/design/editor/editor-design.rst b/docs/design/editor/editor-design.rst deleted file mode 100644 index 7a1e14c67..000000000 --- a/docs/design/editor/editor-design.rst +++ /dev/null @@ -1,118 +0,0 @@ -MetacatUI Editor Refactor -========================= - -This document provides an overview architecture for incorporating a metadata editor into the MetacatUI web application. The goal is to support a number of use cases where a scientist needs to manage data and metadata in a Member Node repository. - -Use Cases ---------- -The following use cases are intended to represent basic data and metadata management functionality. - -+--------------------------------+------------------------------------------------------------------+ -|Use Case | Description | -+================================+==================================================================+ -| `Upload Data`_ | Choose and upload files to the repository | -+--------------------------------+------------------------------------------------------------------+ -| `Rename a File`_ | Rename a data file | -+--------------------------------+------------------------------------------------------------------+ -| `Add Metadata`_ | Add a dataset folder to contain data files | -+--------------------------------+------------------------------------------------------------------+ -| `Remove a File`_ | Remove a data file in the repository | -+--------------------------------+------------------------------------------------------------------+ -| `Update Metadata`_ | Provide metadata details for a selected dataset folder | -+--------------------------------+------------------------------------------------------------------+ -| `View Public Metadata`_ | View a dataset description from a public perspective | -+--------------------------------+------------------------------------------------------------------+ -| `Add a Nested Dataset`_ | Add a dataset folder into an existing dataset folder | -+--------------------------------+------------------------------------------------------------------+ -| `Move Dataset Levels`_ | Move a dataset to a different position in the dataset hierarchy | -+--------------------------------+------------------------------------------------------------------+ - -.. _Upload Data: ./use-cases/upload-data.rst -.. _Rename a File: ./use-cases/rename-a-file.rst -.. _Add Metadata: ./use-cases/add-metadata.rst -.. _Update Metadata: ./use-cases/update-metadata.rst -.. _Remove a File: ./use-cases/remove-a-file.rst -.. _View Public Metadata: ./use-cases/view-public-metadata.rst -.. _Add a Nested Dataset: ./use-cases/add-a-nested-dataset.rst -.. _Move Dataset Levels: ./use-cases/move-dataset-levels.rst - - - -Architecture ------------- - -While we see benefits in splitting the architecture into multiple libraries (metacaui and each supported science metadata language), pragmatically there are tight dependencies among the models. Therefore, we'll keep the classes in one library, but will divide the functionality into separate model and view classes. -The EML class is a specialization of the generic ScienceMetadata class in the MetacatUI module. We intend to support other specializations in the future (ISO 19139, FGDC CSDGM, etc.) - -Class Diagrams --------------- - -Overview -~~~~~~~~ - -.. - @startuml images/editor-design.png - - !include plantuml-styles.txt - - package metacatui { - class DataPackage { - } - - class DataONEObject { - } - - class ScienceMetadata { - } - - class DataPackageView { - } - - class EML { - } - - class EMLViewer { - } - } - - DataPackage --o DataONEObject : collectionOf - DataPackage <.left. DataPackageView : listensTo - DataONEObject <|-down- ScienceMetadata : " subclassOf" - ScienceMetadata <|-down- EML : " subclassOf" - EML <.left. EMLViewer : listensTo - @enduml - -.. image:: images/editor-design.png - -Detailed Class Diagrams -~~~~~~~~~~~~~~~~~~~~~~~ - -.. image:: images/editor-design-metacatui-package.png - -.. image:: images/editor-design-eml-package.png - -Implementation Decisions ------------------------- -- A DataONEObject can represent the three types of objects in a DataONE Member Node of Coordinating Node (DATA, METADATA, RESOURCEMAP). A data object will be represented by a DataONEObject with just the SystemMetadata properties populated. Any science metadata can be represented by a ScienceMetadata subclass of DataONEObject, or an even more specialized subclass of ScienceMetadata (like EML). While a DataPackage, which models a resource map, isn't a subclass of DataONEObject per se, we'll use a DataONEObject instance to represent it when calling MNStorage API methods for resource maps. - -- The DataPackage's standard Backbone.Collection.models property stores the array of DataONEObjects that are directly aggregated by immediate resource map. For nested packages, the DataPackage.childPackages property stores an array of immediate child packages. Each of these DataPackage Backbone.Collections store their immediate children. - -- Each DataONEObject will get assigned a SID and a PID. When publish() is called, we assign a DOI to both the SID and the PID, separately. Citations with SIDs will return the latest data package, citations with PIDs will always return the same DataPackage. - -- If we use SIDs as identifiers in the resource maps, when a sub package is changed, the parent packages up the chain will not need to be updated. If we use PIDs, all parent resource maps will need to be updated. - -- The DataPackage object will extend Backbone.Collection, and we’ll keep track of both the parent package and the child packages using the Backbone-generated id for the object. - -- The EML.isEditable property will control whether or not the editor is enabled in the EMLView. - -- We’ll model the EML modules as minimally as needed, using complex types as needed, like EMLParty. - -- For now, for we will postpone modeling eml-text, eml-entity modules, and won’t support the maintenance tree. - -- Instead of modeling EML with its four submodules (dataset, software, citation, protocol, for now we’re keeping the model simple and only supporting EMLDataset. - -- We won’t support the references tag in `/eml/dataset`. - -- Object transfers will be queued on a per package basis, using the transferQueue property. Each DataONEObject item in the queue will have an uploadStatus (queued, transferring, completed, modified). Science metadata that is locally modified, but not 'saved' yet will be in the modified status. Once the save event occurs, it changes to queued and is added to the queue. - -- In order to reduce race conditions in the application when editing a document, we will disable the manual 'Save' dialog during certain operations, like uploading or archiving a file, etc., that will be changing the science metadata document in the background. Once the operation is complete, we re enable it. diff --git a/docs/design/editor/images/Edit-Metadata-Overview.png b/docs/design/editor/images/Edit-Metadata-Overview.png deleted file mode 100644 index 66ebb8f02..000000000 Binary files a/docs/design/editor/images/Edit-Metadata-Overview.png and /dev/null differ diff --git a/docs/design/editor/images/editor-design-eml-package.png b/docs/design/editor/images/editor-design-eml-package.png deleted file mode 100644 index e0b5f9bb8..000000000 Binary files a/docs/design/editor/images/editor-design-eml-package.png and /dev/null differ diff --git a/docs/design/editor/images/editor-design-metacatui-package.png b/docs/design/editor/images/editor-design-metacatui-package.png deleted file mode 100644 index 56c047fdd..000000000 Binary files a/docs/design/editor/images/editor-design-metacatui-package.png and /dev/null differ diff --git a/docs/design/editor/images/editor-design-view-metadata.png b/docs/design/editor/images/editor-design-view-metadata.png deleted file mode 100644 index fe93da7d8..000000000 Binary files a/docs/design/editor/images/editor-design-view-metadata.png and /dev/null differ diff --git a/docs/design/editor/images/editor-design.png b/docs/design/editor/images/editor-design.png deleted file mode 100644 index 22937e047..000000000 Binary files a/docs/design/editor/images/editor-design.png and /dev/null differ diff --git a/docs/design/editor/use-cases/add-a-nested-dataset.rst b/docs/design/editor/use-cases/add-a-nested-dataset.rst deleted file mode 100644 index 57e59bfaa..000000000 --- a/docs/design/editor/use-cases/add-a-nested-dataset.rst +++ /dev/null @@ -1,86 +0,0 @@ -Add a Nested Dataset -==================== - -Scenario --------- - - As a scientist, I want to add a nested dataset to an existing dataset folder so I can easily organize related data. - -Mockup Image ------------- - -.. image:: images/add-nested-dataset-mockup.png - -Technical Sequence Diagram ---------------------------- -.. @startuml images/add-nested-dataset-sequence-diagram.png - - !include ../plantuml-styles.txt - skinparam SequenceGroupBorderColor #AAAAAA - skinparam SequenceGroupBorderThickness #AAAAAA - - actor "Scientist" - participant EMLView as EMLView <> - participant DataPackageView as DataPackageView <> - participant DataItemView as DataItemView <> - participant DataPackage as DataPackage <> - participant EML as EML <> - participant Router as Router <> - - EMLView -> DataPackage : on("new-folder", handleNewFolder) - DataPackageView -> DataItemView : listenTo("add-folder", addFolder) - - Scientist -> DataItemView : clicks on "Add a folder" - - DataPackageView -> DataPackageView : addFolder() - activate DataPackageView - DataPackageView -> DataPackage : new() - - activate DataPackage - DataPackage -> EML : new() - activate EML - EML --> DataPackage : newEML - deactivate EML - DataPackage -> DataPackage : add(newEML) - DataPackage --> DataPackageView : newPackage - deactivate DataPackage - - DataPackageView -> DataItemView : new(newPackage) - deactivate DataPackageView - - activate DataItemView - DataItemView -> DataItemView : render() - DataItemView -> DataItemView : on("blur #titleText", handleChange()) - DataItemView --> Scientist: shows new folder row - note right - We highlight and focus the - title for the scientist to change - end note - deactivate DataItemView - - activate Scientist - Scientist -> DataItemView : Enters title - deactivate Scientist - - activate DataItemView - DataItemView -> DataItemView : handleChange() - DataItemView -> EML : set("title", title) - activate EML - DataItemView -> EML : getParent() - EML --> DataItemView : dataPackage - deactivate EML - DataItemView -> DataPackage : trigger("new-folder") - deactivate DataItemView - - DataPackage -> EMLView : handleNewFolder(dataPackage) - activate EMLView - EMLView -> Router : navigate("#view/{pid}", dataPackage) - deactivate EMLView - - @enduml - -.. image:: images/add-nested-dataset-sequence-diagram.png - - - - diff --git a/docs/design/editor/use-cases/add-metadata.rst b/docs/design/editor/use-cases/add-metadata.rst deleted file mode 100644 index 4a4b05ec2..000000000 --- a/docs/design/editor/use-cases/add-metadata.rst +++ /dev/null @@ -1,123 +0,0 @@ -Add EML -============ - -Scenario --------- - - As a scientist, I want to add metadata descriptions about data I have collected or used so I can share the contextual information with my colleagues. - -Summary -------- -A scientist should be able to add metadata descriptions for their dataset. The goal is to first add a top level dataset folder, with the name of the folder being the title of the dataset. When the scientist clicks on "Submit Data" anywhere in the app, a dialog should prompt them to provide a dataset title. The science metadata should be updated with the title, creator, and contact information. The package describing the metadata should be updated, and the metadata and package should be created in the repository. All future edits are updates. - -Mockup Image ------------- - -.. image:: images/Add-a-Folder.png - -Technical Sequence Diagram --------------------------- - -.. - @startuml images/add-a-folder-sequence-diagram.png - - !include ../plantuml-styles.txt - skinparam SequenceGroupBorderColor #AAAAAA - skinparam SequenceGroupBorderThickness #AAAAAA - - actor "Scientist" - participant EMLViewer as View <> - participant DataPackageView as PackageView <> - participant DataItemView as DataItemView <> - participant EML as EML <> - participant DataPackage as DataPackage <> - participant LocalStorage as LocalStore <> - participant MN as MN <> - - View -> View : on("click #submit_data", handleSubmit()) - Scientist -> View : Clicks "Submit Data" menu item - - activate View - View -> View : handleSubmit() - View -> EML : new({"title": "Untitled Dataset: ...", ...}) - deactivate View - - activate EML - EML --> View : EML - deactivate EML - - activate View - View -> DataPackage : new() - deactivate View - - activate DataPackage - DataPackage -> DataPackage : on("add", handleAdd()) - DataPackage --> View : DataPackage - deactivate DataPackage - - - - activate View - View -> View : render() - View -> PackageView : new({model: DataPackage}) - deactivate View - - activate PackageView - PackageView -> DataPackage : listenTo("add", handleAdd()) - PackageView --> View : DataPackageView - deactivate PackageView - - activate View - View -> DataPackage : add(EML) - deactivate View - - activate DataPackage - DataPackage -> DataPackage : handleAdd() - DataPackage -> PackageView : handleAdd() - deactivate DataPackage - - activate PackageView - PackageView -> DataItemView : new({model: EML}) - deactivate PackageView - - activate DataItemView - DataItemView --> PackageView : DataItemView - deactivate DataItemView - - activate PackageView - PackageView -> DataItemView : render() - deactivate PackageView - - activate DataItemView - DataItemView -> DataItemView : on("blur #titleText", handleChange()) - DataItemView -> Scientist: DataItemView - note right - We highlight and focus the - title for the scientist to change - end note - deactivate DataItemView - - activate Scientist - Scientist -> DataItemView : Enters title - deactivate Scientist - - activate DataItemView - DataItemView -> DataItemView : handleChange() - DataItemView -> EML : set("title", title) - deactivate DataItemView - - - activate EML - EML -> DataItemView : EML - note right - The EML model has changed, so we - render the Cancel/Save buttons to - later persist the package and EML - end note - deactivate EML - - @enduml - -.. image:: images/add-a-folder-sequence-diagram.png - - diff --git a/docs/design/editor/use-cases/images/Add-a-Folder.png b/docs/design/editor/use-cases/images/Add-a-Folder.png deleted file mode 100644 index ee74ffcf2..000000000 Binary files a/docs/design/editor/use-cases/images/Add-a-Folder.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Add-a-Nested-Folder-Modal-Dialog.png b/docs/design/editor/use-cases/images/Add-a-Nested-Folder-Modal-Dialog.png deleted file mode 100644 index f2fef382e..000000000 Binary files a/docs/design/editor/use-cases/images/Add-a-Nested-Folder-Modal-Dialog.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-Queued-Files.png b/docs/design/editor/use-cases/images/Edit-Metadata-Queued-Files.png deleted file mode 100644 index efdf4fed0..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-Queued-Files.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-Remove-a-File.png b/docs/design/editor/use-cases/images/Edit-Metadata-Remove-a-File.png deleted file mode 100644 index d502c8213..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-Remove-a-File.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-Rename-a-File.png b/docs/design/editor/use-cases/images/Edit-Metadata-Rename-a-File.png deleted file mode 100644 index e66878375..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-Rename-a-File.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-View-Locations.png b/docs/design/editor/use-cases/images/Edit-Metadata-View-Locations.png deleted file mode 100644 index 7a930b426..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-View-Locations.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-View-Methods.png b/docs/design/editor/use-cases/images/Edit-Metadata-View-Methods.png deleted file mode 100644 index 385f07856..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-View-Methods.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-View-Overview.png b/docs/design/editor/use-cases/images/Edit-Metadata-View-Overview.png deleted file mode 100644 index 0ceb917cf..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-View-Overview.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-View-Project.png b/docs/design/editor/use-cases/images/Edit-Metadata-View-Project.png deleted file mode 100644 index 00fa11a3d..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-View-Project.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-View-Summary.png b/docs/design/editor/use-cases/images/Edit-Metadata-View-Summary.png deleted file mode 100644 index b96a93d12..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-View-Summary.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/Edit-Metadata-View-Taxa.png b/docs/design/editor/use-cases/images/Edit-Metadata-View-Taxa.png deleted file mode 100644 index 6890184c8..000000000 Binary files a/docs/design/editor/use-cases/images/Edit-Metadata-View-Taxa.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/add-a-folder-sequence-diagram.png b/docs/design/editor/use-cases/images/add-a-folder-sequence-diagram.png deleted file mode 100644 index a2c8fbbbe..000000000 Binary files a/docs/design/editor/use-cases/images/add-a-folder-sequence-diagram.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/add-nested-dataset-mockup.png b/docs/design/editor/use-cases/images/add-nested-dataset-mockup.png deleted file mode 100644 index c329026a7..000000000 Binary files a/docs/design/editor/use-cases/images/add-nested-dataset-mockup.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/add-nested-dataset-sequence-diagram.png b/docs/design/editor/use-cases/images/add-nested-dataset-sequence-diagram.png deleted file mode 100644 index b12011ae8..000000000 Binary files a/docs/design/editor/use-cases/images/add-nested-dataset-sequence-diagram.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/edit-metadata-sequence-diagram.png b/docs/design/editor/use-cases/images/edit-metadata-sequence-diagram.png deleted file mode 100644 index 0c578e914..000000000 Binary files a/docs/design/editor/use-cases/images/edit-metadata-sequence-diagram.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/remove-a-file-sequence-diagram.png b/docs/design/editor/use-cases/images/remove-a-file-sequence-diagram.png deleted file mode 100644 index ce14e4c35..000000000 Binary files a/docs/design/editor/use-cases/images/remove-a-file-sequence-diagram.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/rename-a-file-sequence-diagram.png b/docs/design/editor/use-cases/images/rename-a-file-sequence-diagram.png deleted file mode 100644 index d7112baa0..000000000 Binary files a/docs/design/editor/use-cases/images/rename-a-file-sequence-diagram.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/upload-data-sequence-diagram.png b/docs/design/editor/use-cases/images/upload-data-sequence-diagram.png deleted file mode 100644 index 0fdc8bb17..000000000 Binary files a/docs/design/editor/use-cases/images/upload-data-sequence-diagram.png and /dev/null differ diff --git a/docs/design/editor/use-cases/images/view-public-metadata-sequence-diagram.png b/docs/design/editor/use-cases/images/view-public-metadata-sequence-diagram.png deleted file mode 100644 index 3791dc9bc..000000000 Binary files a/docs/design/editor/use-cases/images/view-public-metadata-sequence-diagram.png and /dev/null differ diff --git a/docs/design/editor/use-cases/move-dataset-levels.rst b/docs/design/editor/use-cases/move-dataset-levels.rst deleted file mode 100644 index 78c8bac13..000000000 --- a/docs/design/editor/use-cases/move-dataset-levels.rst +++ /dev/null @@ -1,10 +0,0 @@ -Move Dataset Levels -=================== - -Scenario --------- - - As a scientist, I want to move an existing dataset into or out of a containing dataset folder so I can easily reorganize my data. - - - diff --git a/docs/design/editor/use-cases/remove-a-file.rst b/docs/design/editor/use-cases/remove-a-file.rst deleted file mode 100644 index ae618d25a..000000000 --- a/docs/design/editor/use-cases/remove-a-file.rst +++ /dev/null @@ -1,171 +0,0 @@ -Archive a File -============== - -Scenario --------- - - As a scientist, I want to remove a file so it is no longer associated with newer versions of my dataset and it will not be discoverable, but will remain citable if published. - -Summary -------- -A scientist should be able to remove a file, which is similar to deleting a file, but preserves read access in the event the file has been published and directly cited. The goal is to enable archiving of data files, as well as data packages that contain the data files. The display should immediately remove the items that are archived, and they should be asychronously archived in the repository. If the file has been published, it will be archived with public read access. If it is not published, it is archived with all read access removed (including the original rights holder). If only a data file is archived, the science metadata and containing package should be updated to reflect this. - -Mockup Image ------------- - -.. image:: images/Edit-Metadata-Remove-a-File.png - -Technical Sequence Diagram --------------------------- - -.. - @startuml images/remove-a-file-sequence-diagram.png - - !include ../plantuml-styles.txt - skinparam SequenceGroupBorderColor #AAAAAA - skinparam SequenceGroupBorderThickness #AAAAAA - - actor "Scientist" - participant DataPackageView as PackageView <> - participant ConfirmArchiveView as ConfirmArchiveView <> - participant DataPackage as DataPackage <> - participant EML as EML <> - participant DataObject as "dataObject:DataObject" <> - participant LocalStorage as LocalStore <> - participant MN as MN <> - - PackageView -> DataPackage : listenTo("remove", handleRemove()) - DataPackage -> DataPackage : on("remove", handleRemove()) - - PackageView -> PackageView : listenTo("click menu.item", handleArchive()) - Scientist -> PackageView : Chooses "Archive ..." menu item - - activate PackageView - PackageView -> PackageView : handleArchive() - PackageView -> DataPackage : set("editable", false) - note left - Editing is disabled - end note - PackageView -> DataPackage : listenTo("change:editable", handleEditable()) - PackageView --> ConfirmArchiveView : render() - deactivate PackageView - - activate ConfirmArchiveView - ConfirmArchiveView -> ConfirmArchiveView : listenTo("click #ok", confirmArchive()) - ConfirmArchiveView -> ConfirmArchiveView : listenTo("click #cancel", confirmArchive()) - ConfirmArchiveView --> Scientist: Ok? Cancel? - note right - Dialog states: - - This file has been published and will - be archived instead of removed. Are - you sure you want to archive it? - - or it states: - - Are you sure you want to remove this file? - end note - deactivate ConfirmArchiveView - - Scientist -> ConfirmArchiveView : Clicks 'Ok' - activate ConfirmArchiveView - ConfirmArchiveView -> ConfirmArchiveView : confirmArchive() - ConfirmArchiveView -> DataPackage : remove(id) - deactivate ConfirmArchiveView - - activate DataPackage - PackageView -> PackageView : handleRemove() - DataPackage -> DataPackage : handleRemove(id) - DataPackage -> EML : removeEntity(id) - deactivate DataPackage - - activate EML - EML --> DataPackage : success - deactivate EML - - activate DataPackage - DataPackage -> DataObject : destroy() - deactivate DataPackage - - activate DataObject - DataObject -> MN : archive() - deactivate DataObject - - activate MN - MN --> DataObject : identifier - deactivate MN - - alt if published - activate DataObject - DataObject -> MN : updateSystemMetadata(sysmeta) - note left - In sysmeta, ensure public - read access - end note - deactivate DataObject - - activate MN - MN --> DataObject : identifier - deactivate MN - - activate DataObject - DataObject --> DataPackage : success - deactivate DataObject - - else not published - - DataObject -> MN : updateSystemMetadata(sysmeta) - note left - In sysmeta, remove the AccessPolicy, and - set the rightsHolder to the MN subject - end note - - activate MN - MN --> DataObject : identifier - deactivate MN - - activate DataObject - DataObject --> DataPackage : success - deactivate DataObject - activate DataPackage - - end - - - DataPackage -> EML : save() - deactivate DataPackage - - activate EML - EML -> MN : update(pid, newPid, sysmeta, object) - deactivate EML - - activate MN - MN --> EML : identifier - deactivate MN - - activate EML - EML -> DataPackage : success - deactivate EML - - activate DataPackage - DataPackage -> MN : update(pid, newPid, sysmeta, object) - deactivate DataPackage - - activate MN - MN --> DataPackage : identifier - deactivate MN - - activate DataPackage - DataPackage --> PackageView : handleEditable() - note left - Editing is enabled - end note - deactivate DataPackage - - @enduml - -.. image:: images/remove-a-file-sequence-diagram.png - - - - diff --git a/docs/design/editor/use-cases/rename-a-file.rst b/docs/design/editor/use-cases/rename-a-file.rst deleted file mode 100644 index b16ff6e2e..000000000 --- a/docs/design/editor/use-cases/rename-a-file.rst +++ /dev/null @@ -1,137 +0,0 @@ -Rename a File -============= - -Scenario --------- - - As a scientist, I want to rename a file to a more appropriate name so I can easily keep my files organized. - -Summary -------- -A scientist should be able to rename a file, including data files and metadata files (folder names). The display should immediately show the new name, and they should be asychronously changed in the repository. The science metadata and containing package should be updated to reflect the change. - -Mockup Image ------------- - -.. image:: images/Edit-Metadata-Rename-a-File.png - -Technical Sequence Diagram --------------------------- - -.. - @startuml images/rename-a-file-sequence-diagram.png - - !include ../plantuml-styles.txt - skinparam SequenceGroupBorderColor #AAAAAA - skinparam SequenceGroupBorderThickness #AAAAAA - - actor "Scientist" - participant DataPackageView as PackageView <> - participant DataPackage as DataPackage <> - participant EML as EML <> - participant DataObject as "dataObject:DataObject" <> - participant LocalStorage as LocalStore <> - participant MN as MN <> - - PackageView -> DataPackage : listenTo("change", showCancelSave()) - note right - On any change, show the - Cancel/Save buttons - end note - PackageView -> PackageView : listenTo("change #filenameElementId", handleChange()) - - DataPackage -> DataPackage : on("change:filename", handleChange()) - - PackageView -> PackageView : on("click menu.item", handleRename()) - - Scientist -> PackageView : Chooses "Rename ..." menu item - - activate PackageView - PackageView -> PackageView : handleRename() - note right - handleRename() moves the focus to the - "#filenameElementId" element and calls - select() on the existing text - end note - PackageView -> DataObject : set("filename", filename) - activate DataObject - DataObject --> PackageView : dataObject - deactivate DataObject - deactivate PackageView - - activate DataPackage - DataPackage -> DataPackage : handleChange() - DataPackage -> DataPackage : set("dirty", true) - DataPackage -> EML : updateEntity() - deactivate DataPackage - - activate EML - EML --> DataPackage : metadata - deactivate EML - - activate DataPackage - DataPackage -> PackageView: showCancelSave() - deactivate DataPackage - - activate PackageView - PackageView -> DataPackage : listenTo("change:dirty", hideCancelSave()) - deactivate PackageView - Scientist -> PackageView : Chooses "Save" - - PackageView -> DataPackage : save() - - activate DataPackage - DataPackage -> DataObject : saveSystemMetadata() - deactivate DataPackage - - activate DataObject - DataObject -> MN : updateSystemMetadata() - deactivate DataObject - - activate MN - MN --> DataObject : identifier - deactivate MN - - activate DataObject - DataObject -> DataPackage : success - deactivate DataObject - - activate DataPackage - DataPackage -> EML : save() - deactivate DataPackage - - activate EML - EML -> MN : update(pid, newPid, sysmeta, object) - deactivate EML - - activate MN - MN --> EML : identifier - deactivate MN - - activate EML - EML -> DataPackage : success - deactivate EML - - activate DataPackage - DataPackage -> MN : update(pid, newPid, sysmeta, object) - deactivate DataPackage - - activate MN - MN --> DataPackage : identifier - deactivate MN - - activate DataPackage - DataPackage -> DataPackage : set("dirty", false) - DataPackage -> PackageView : hideCancelSave() - deactivate DataPackage - @enduml - -.. image:: images/rename-a-file-sequence-diagram.png - - - - - - - - diff --git a/docs/design/editor/use-cases/update-metadata.rst b/docs/design/editor/use-cases/update-metadata.rst deleted file mode 100644 index 87f1841ca..000000000 --- a/docs/design/editor/use-cases/update-metadata.rst +++ /dev/null @@ -1,77 +0,0 @@ -Update Metadata -=============== - -Scenario --------- - - As a scientist, I want to update the metadata descriptions of an existing dataset so I can provide more context about the dates, locations, procedures, and other aspects of my data. - -Mockup Image --------- -.. image:: ../images/Edit-Metadata-Overview.png - -Technical Sequence Diagram --------------------------- -.. @startuml images/edit-metadata-sequence-diagram.png - - !include ../plantuml-styles.txt - skinparam SequenceGroupBorderColor #AAAAAA - skinparam SequenceGroupBorderThickness #AAAAAA - - actor "Scientist" - participant MetadataView as MetadataView <> - participant MetadataTextView as MetadataTextView <> - participant editButton as editButton <> - participant inputText as inputText <> - participant EML as EML <> - participant saveButton as saveButton <> - participant DataONEObject as DataONEObject <> - - Scientist -> MetadataView : lands on dataset page - - activate MetadataView - MetadataView -> saveButton : listenTo("click") - MetadataView -> MetadataTextView : new() - activate MetadataTextView - MetadataTextView -> editButton : listenTo("click") - MetadataTextView -> MetadataView : MetadataTextView - deactivate MetadataTextView - MetadataView -> Scientist : Metadata Web Page - deactivate MetadataView - - - Scientist -> editButton : clicks edit button - activate editButton - editButton -> MetadataTextView : trigger - deactivate editButton - activate MetadataTextView - MetadataTextView -> inputText : show() - MetadataTextView -> inputText : listenTo("focusout") - MetadataTextView -> Scientist : Shows input element - deactivate MetadataTextView - - Scientist -> inputText : Edits content of input elements - activate inputText - Scientist -> inputText : Focusout - inputText -> MetadataTextView : trigger - deactivate inputText - - activate MetadataTextView - MetadataTextView -> EML : set(attribute) - deactivate MetadataTextView - - Scientist -> saveButton : clicks Save - activate saveButton - saveButton -> EML : trigger - deactivate saveButton - - activate EML - EML -> EML : toXML() - EML -> DataONEObject : save() - deactivate EML - - - @enduml - - -.. image:: images/edit-metadata-sequence-diagram.png diff --git a/docs/design/editor/use-cases/upload-data.rst b/docs/design/editor/use-cases/upload-data.rst deleted file mode 100644 index e76487c91..000000000 --- a/docs/design/editor/use-cases/upload-data.rst +++ /dev/null @@ -1,207 +0,0 @@ -Upload Data -=========== - -Scenario --------- - - As a scientist, I want to upload multiple files to the data repository so I can share them publicly and with colleagues. - -Summary -------- -A scientist should be able to upload multiple files to the server by choosing them from their file system. The goal is to provide batch upload of large numbers of files (100s to ~1000). The application should queue each file and process the uploads sequentially, possibly with multiple connections for parallel uploads. The display should allow scrolling through a table of files with their upload status. For uploads with large counts, the table should be responsive and not bog down the display. The metadata should be updated to reflect basic information about the file (name, size, online link, etc.). The package describing the data and metadata should also be updated. While uploads are occurring, the scientist should be able to edit other metadata fields. - -Mockup Image ------------- - -.. image:: images/Edit-Metadata-Queued-Files.png - -Technical Sequence Diagram --------------------------- - -.. - @startuml images/upload-data-sequence-diagram.png - - !include ../plantuml-styles.txt - skinparam SequenceGroupBorderColor #AAAAAA - skinparam SequenceGroupBorderThickness #AAAAAA - - actor "Scientist" - participant DataPackageView as PackageView <> - participant DataPackage as DataPackage <> - participant EML as EML <> - participant DataObject as DataObject <> - participant dataObject as "dataObject:DataObject" <> - participant LocalStorage as LocalStore <> - participant MN as MN <> - - note right of LocalStore - Any changes to a DataONEObject - are persisted to the LocalStore - using Backbone.UniqueModel - end note - PackageView -> DataPackage : listenTo("add", handleAdd()) - DataPackage -> DataPackage : on("add", handleAdd()) - DataPackage -> DataPackage : on("complete", handleComplete()) - note right - When the queue processing is complete, - save the package and EML. - end note - - PackageView -> PackageView : on("click menu.item", handleUpload()) - Scientist -> PackageView : chooses "Add files ..." menu item - - activate PackageView - PackageView --> Scientist : file upload dialog - deactivate PackageView - - Scientist --> PackageView : selects upload FileList - activate PackageView - - PackageView -> PackageView : handleUpload(event, FileList) - PackageView -> DataPackage : set("editable", false) - note left - Editing is disabled - end note - PackageView -> DataPackage : listenTo("change:editable", handleEditable()) - - note left - DataPackageView gets the - parent package and parent - metadata based on the - event.target - end note - - loop for File in FileList - ||| - PackageView -> DataObject : dataObject = new() - deactivate PackageView - - activate DataObject - DataObject --> PackageView : dataObject - deactivate DataObject - - activate PackageView - PackageView -> dataObject : set({nodeLevel: parentLevel + 1, uploadStatus: 'Queued', uploadFile: File}) - deactivate PackageView - - activate dataObject - dataObject --> PackageView: dataObject - deactivate dataObject - - activate PackageView - PackageView -> DataPackage : queueObject(dataObject) - deactivate PackageView - - activate DataPackage - DataPackage -> DataPackage : add(dataObject) - DataPackage -> DataPackage : dataObject = transferQueue.shift() - DataPackage -> DataPackage : handleAdd(dataObject) - DataPackage -> EML : addEntity(dataObject) - deactivate DataPackage - - activate EML - EML --> DataPackage : success - deactivate EML - - activate DataPackage - PackageView -> PackageView : handleAdd() - - note left - When an object is queued, the DataPackageView and - DataPackage listen to "request", "sync", and "error" - events emitted by the DataObject during save() (not depicted) - end note - - DataPackage -> dataObject : save() - deactivate DataPackage - - activate dataObject - dataObject -> MN : create(pid, sysmeta, object) - deactivate dataObject - - activate MN - MN --> dataObject : identifer - deactivate MN - - activate dataObject - dataObject -> MN : getSystemMetadata() - deactivate dataObject - - activate MN - MN --> dataObject : sysmeta - deactivate MN - - activate dataObject - dataObject -> dataObject : updateSystemMetadata() - dataObject -> dataObject : set("uploadStatus", "Complete") - - note left - We don't want to emit the - "sync" event until the - DataObject properties are - completely updated - end note - dataObject -> dataObject : trigger("sync") - deactivate dataObject - end - - activate DataPackage - DataPackage -> DataPackage : handleSync() - deactivate DataPackage - PackageView -> PackageView : handleSync() - note left - The row DataItemView changes - the upload status - end note - - alt if transferQueue.length == 0 - DataPackage -> DataPackage : trigger("complete") - note right - In handleSync(), trigger a 'complete' event when the - queue is empty so the package and EML are saved. - end note - end - DataPackage -> DataPackage : handleComplete() - DataPackage -> EML : save() - - activate EML - EML -> MN : update(pid, newPid, sysmeta, object) - deactivate EML - - activate MN - MN --> EML : identifier - deactivate MN - - activate EML - EML -> MN : getSystemMetadata(pid) - deactivate EML - - activate MN - MN --> EML : sysmeta - deactivate MN - - activate EML - EML -> EML : updateSystemMetadata() - EML -> EML : set("uploadStatus", "Complete") - EML -> EML : trigger("sync") - deactivate EML - - activate DataPackage - DataPackage -> DataPackage : handleSync() - DataPackage -> MN : update(pid, newPid, sysmeta, object) - deactivate DataPackage - - activate MN - MN --> DataPackage : identifier - deactivate MN - activate DataPackage - - DataPackage --> PackageView : handleEditable() - note left - Editing is enabled - end note - deactivate DataPackage - - @enduml - -.. image:: images/upload-data-sequence-diagram.png diff --git a/docs/design/editor/use-cases/use-cases-summary.md b/docs/design/editor/use-cases/use-cases-summary.md deleted file mode 100644 index 2026e12e9..000000000 --- a/docs/design/editor/use-cases/use-cases-summary.md +++ /dev/null @@ -1,19 +0,0 @@ -# Editor Use Cases - -The following is a list of use cases to be addressed by the design and implementation of a new web-based metadata editor. Many of the use cases are only listed in this table and have yet to be fleshed out. Others are linked to their full use case description. - -| Use Case Name | Category | Ticket | -|---------------|----------|--------| -| [View public metadata](view-public-metadata.rst) | MUST | -| [Add metadata](add-metadata.rst) | MUST | -| [Update metadata](update-metadata.rst) | MUST | -| [Upload data files](upload-data.rst) | MUST | -| [Remove a file](remove-a-file.rst) | MUST | -| [Rename a file](rename-a-file.rst) | MUST | -| [Move a data file across levels](move-dataset-levels.rst) | MUST | -| [Add a nested dataset](add-a-nested-dataset.rst) | MUST | -| Link ORCIDs in creator and other party roles | MUST | [209](https://github.nceas.ucsb.edu/KNB/arctic-data/issues/209) | -| Save partially complete submissions before submitting | MUST | [187](https://github.nceas.ucsb.edu/KNB/arctic-data/issues/187) | -| Support paleo temporal coverage | MUST | [175](https://github.nceas.ucsb.edu/KNB/arctic-data/issues/175) | -| Improve handling of keyword thesauri | MUST | [205](https://github.nceas.ucsb.edu/KNB/arctic-data/issues/205) | -| Support minting DOIs | MUST | | diff --git a/docs/design/editor/use-cases/view-public-metadata.rst b/docs/design/editor/use-cases/view-public-metadata.rst deleted file mode 100644 index 247bc35ce..000000000 --- a/docs/design/editor/use-cases/view-public-metadata.rst +++ /dev/null @@ -1,59 +0,0 @@ -View Public Metadata -==================== - -Scenario --------- - - As a member of the public, I want to view metadata descriptions about a dataset so I can easily understand the context of where, when, and how the data were collected or used. - -Mockup Image ------------- - -.. image:: ../images/editor-design-view-metadata.png - -Technical Sequence Diagram --------------------------- - -.. @startuml images/view-public-metadata-sequence-diagram.png - - !include ../plantuml-styles.txt - skinparam SequenceGroupBorderColor #AAAAAA - skinparam SequenceGroupBorderThickness #AAAAAA - - actor "Scientist" - participant MetadataView as MetadataView <> - participant DataONEObject as DataONEObject <> - participant EML as EML <> - participant EMLView as EMLView <> - participant DataPackage as DataPackage <> - participant DataPackageView as DataPackageView <> - - Scientist -> MetadataView : lands on page - activate MetadataView - MetadataView -> DataONEObject : fetch(id) - activate DataONEObject - DataONEObject --> MetadataView : dataOneObject - MetadataView -> DataONEObject : get("formatId") - DataONEObject --> MetadataView : "eml" - deactivate DataONEObject - MetadataView -> EML : new() - activate EML - EML --> MetadataView : emlObject - deactivate EML - MetadataView -> EMLView : render(emlObject) - deactivate MetadataView - - activate EMLView - EMLView -> DataPackage : new([emlObject]) - activate DataPackage - DataPackage --> EMLView : package - deactivate DataPackage - EMLView -> DataPackageView : render(DataPackage) - activate DataPackageView - DataPackageView --> EMLView : DOM Element - deactivate DataPackageView - deactivate EMLView - - @enduml - -.. image:: images/view-public-metadata-sequence-diagram.png diff --git a/docs/design/plantuml-styles.txt b/docs/design/plantuml-styles.txt deleted file mode 100644 index ce4ab3813..000000000 --- a/docs/design/plantuml-styles.txt +++ /dev/null @@ -1,36 +0,0 @@ - ' change the default styles - skinparam shadowing false - skinparam roundcorner 10 - skinparam linetype ortho - - ' style sequences - skinparam sequence { - ArrowColor #1F4260 - LifeLineBorderColor #1F4260 - LifeLineBackgroundColor #428BCA - ParticipantBorderColor #AAAAAA - ParticipantBackgroundColor #F5F5F5 - ActorBackgroundColor #DDDDDD - ActorBorderColor #333333 - } - - ' style notes - skinparam noteFontColor #C49858 - skinparam note { - BackgroundColor #FCF8E4 - BorderColor #FCEED6 - } - - ' style classes - skinparam class { - BackgroundColor #F5F5F5 - BorderColor #333333 - ArrowColor #333333 - } - - ' style packages - skinparam packageFontColor #9DA0A4 - skinparam package { - BorderColor #CCCCCC - } - diff --git a/docs/design/project/images/project-home-view-design.png b/docs/design/project/images/project-home-view-design.png deleted file mode 100644 index 5e3c5b8f6..000000000 Binary files a/docs/design/project/images/project-home-view-design.png and /dev/null differ diff --git a/docs/design/project/images/project-home-view-mockup.png b/docs/design/project/images/project-home-view-mockup.png deleted file mode 100644 index 1de53182c..000000000 Binary files a/docs/design/project/images/project-home-view-mockup.png and /dev/null differ diff --git a/docs/design/project/images/project-home-view-wireframe-mockup.png b/docs/design/project/images/project-home-view-wireframe-mockup.png deleted file mode 100644 index 661b56094..000000000 Binary files a/docs/design/project/images/project-home-view-wireframe-mockup.png and /dev/null differ diff --git a/docs/design/project/images/project-home-view-wireframe.png b/docs/design/project/images/project-home-view-wireframe.png deleted file mode 100644 index faeb384db..000000000 Binary files a/docs/design/project/images/project-home-view-wireframe.png and /dev/null differ diff --git a/docs/design/project/images/project-members-view-example.png b/docs/design/project/images/project-members-view-example.png deleted file mode 100644 index 1c93f4f68..000000000 Binary files a/docs/design/project/images/project-members-view-example.png and /dev/null differ diff --git a/docs/design/project/images/project-metrics-view-example.png b/docs/design/project/images/project-metrics-view-example.png deleted file mode 100644 index 14e4e9222..000000000 Binary files a/docs/design/project/images/project-metrics-view-example.png and /dev/null differ diff --git a/docs/design/project/images/project-model-design.png b/docs/design/project/images/project-model-design.png deleted file mode 100644 index d8655e12f..000000000 Binary files a/docs/design/project/images/project-model-design.png and /dev/null differ diff --git a/docs/design/project/images/project-model-view-design.png b/docs/design/project/images/project-model-view-design.png deleted file mode 100644 index b5cbb70b1..000000000 Binary files a/docs/design/project/images/project-model-view-design.png and /dev/null differ diff --git a/docs/design/project/images/project-section--view-design.png b/docs/design/project/images/project-section--view-design.png deleted file mode 100644 index 86b56a659..000000000 Binary files a/docs/design/project/images/project-section--view-design.png and /dev/null differ diff --git a/docs/design/project/images/project-section-types.png b/docs/design/project/images/project-section-types.png deleted file mode 100644 index ed7212e90..000000000 Binary files a/docs/design/project/images/project-section-types.png and /dev/null differ diff --git a/docs/design/project/images/project-section-view-design.png b/docs/design/project/images/project-section-view-design.png deleted file mode 100644 index 852620b8e..000000000 Binary files a/docs/design/project/images/project-section-view-design.png and /dev/null differ diff --git a/docs/design/project/images/project-view-design-1.png b/docs/design/project/images/project-view-design-1.png deleted file mode 100644 index 2e9bc9fa9..000000000 Binary files a/docs/design/project/images/project-view-design-1.png and /dev/null differ diff --git a/docs/design/project/images/project-view-design-2.png b/docs/design/project/images/project-view-design-2.png deleted file mode 100644 index dd610d02b..000000000 Binary files a/docs/design/project/images/project-view-design-2.png and /dev/null differ diff --git a/docs/design/project/images/project-view-design-3.png b/docs/design/project/images/project-view-design-3.png deleted file mode 100644 index 4c46cc356..000000000 Binary files a/docs/design/project/images/project-view-design-3.png and /dev/null differ diff --git a/docs/design/project/images/project-view-design-4.png b/docs/design/project/images/project-view-design-4.png deleted file mode 100644 index 756a44a09..000000000 Binary files a/docs/design/project/images/project-view-design-4.png and /dev/null differ diff --git a/docs/design/project/images/project-view-design.png b/docs/design/project/images/project-view-design.png deleted file mode 100644 index e6f8ed3e5..000000000 Binary files a/docs/design/project/images/project-view-design.png and /dev/null differ diff --git a/docs/design/project/images/project-view-wireframe.png b/docs/design/project/images/project-view-wireframe.png deleted file mode 100644 index 44e43873c..000000000 Binary files a/docs/design/project/images/project-view-wireframe.png and /dev/null differ diff --git a/docs/design/project/images/project-view.png b/docs/design/project/images/project-view.png deleted file mode 100644 index e96cf1ca4..000000000 Binary files a/docs/design/project/images/project-view.png and /dev/null differ diff --git a/docs/design/project/images/project-visualizations-view-example.png b/docs/design/project/images/project-visualizations-view-example.png deleted file mode 100644 index b394247d2..000000000 Binary files a/docs/design/project/images/project-visualizations-view-example.png and /dev/null differ diff --git a/docs/design/project/project-page-design.rst b/docs/design/project/project-page-design.rst deleted file mode 100644 index 693c470ef..000000000 --- a/docs/design/project/project-page-design.rst +++ /dev/null @@ -1,135 +0,0 @@ -.. sectnum:: - -Project Pages Feature -===================== - -This document provides an overview architecture for incorporating the project pages feature into the MetacatUI web application. The goal is to support the display of project-specific metadata that is configurable by a project owner. The four envisioned views currently include a project home, project metrics, project people, and project visualizations. - -Architecture ------------- - -Project View -~~~~~~~~~~~~ - -Each scientific project is rendered as a customizable ``ProjectView`` object, and is shown when the application router routes to ``/projects/:id/(:section)`` where the required ``id`` is an identifier reference to the project definition instance file stored in the repository (for example a ``seriesId`` like ``urn:uuid:xxxx-xxxx-xxxx-xxxx``). These project definition files will be indexed and searchable in the future, but for the MVP release, we will associate each document's ``seriesId`` with a URL-friendly proxy name (like ``SASAP``). The following wireframe shows how the ``ProjectView`` is rendered inside of the application ``#Content`` area. Note that the ``NavbarView`` and the ``FooterView`` are rendered by the ``AppView`` parent container. - -.. image:: images/project-view-wireframe.png - :width: 50% - -The router instantiates a ``ProjectView`` object, which has an associated ``ProjectModel`` object as its Backbone model. The ``ProjectModel`` is a subclass of a ``CollectionModel``. - -.. - @startuml images/project-model-view-design.png - - !include ../plantuml-styles.txt - - package metacatui { - class ProjectModel { - } - class CollectionModel { - } - class ProjectView { - } - } - - CollectionModel <|-down- ProjectModel: "subclassOf" - ProjectView -left-o ProjectModel: listensTo - - @enduml - -.. image:: images/project-model-view-design.png - -The ``ProjectView`` contains three subviews: a ``ProjectHeaderView`` for the main branding, a ``TOCView`` for the table of contents, and a ``ProjectSectionView`` for the main project content. - -.. - @startuml images/project-view-design.png - - !include ../plantuml-styles.txt - - package metacatui { - class ProjectView { - } - class ProjectHeaderView { - } - class TOCView { - - } - class ProjectSectionView { - } - } - - ProjectView --o TOCView : " subview " - ProjectView --o ProjectSectionView : "subview" - ProjectView --o ProjectHeaderView : "subview" - @enduml - -.. image:: images/project-view-design.png - -The ``ProjectSectionView`` is an abstract generic view with a simple ``MarkdownView`` subview that will be rendered if the ``ProjectSectionView`` is not overridden by a subclass. The ``ProjectSectionView`` is extended with specific specialty views, including a ``ProjectHomeView``, ``ProjectMetricsView``, ``ProjectMembersView``, and ``ProjectVisualizationsView``. These four views visually translate to the four tabs of a ``ProjectView``. - -.. - @startuml images/project-section-view-design.png - - !include ../plantuml-styles.txt - - package metacatui { - class ProjectSectionView { - } - class ProjectHomeView { - } - class ProjectMetricsView { - } - class ProjectMembersView { - } - class ProjectVisualizationsView { - } - class MarkdownView { - } - } - - ProjectSectionView -left-o MarkdownView : "subview" - ProjectSectionView <|-down- ProjectHomeView : subclassOf - ProjectSectionView <|-down- ProjectMetricsView : subclassOf - ProjectSectionView <|-down- ProjectMembersView : subclassOf - ProjectSectionView <|-down- ProjectVisualizationsView : subclassOf - @enduml - -.. image:: images/project-section-view-design.png - -Project Home View -~~~~~~~~~~~~~~~~~ -As stated above, a ``ProjectHomeView`` is a specialized ``ProjectSectionView``. The wireframe on the left shows the subview layouts, based on the example on the right. - -.. image:: images/project-home-view-wireframe-mockup.png - :width: 100% - -The ``ProjectHomeView`` contains a number of subviews, including a ``ProjectFiltersView``, a ``SearchResultsView``, a ``MapView``, a ``MarkdownView``, and a ``ProjectLogosView``. - -.. - @startuml images/project-home-view-design.png - - !include ../plantuml-styles.txt - - package metacatui { - class ProjectHomeView { - } - class ProjectFiltersView { - } - class SearchResultsView { - } - class MapView { - } - class MarkdownView { - } - class ProjectLogosView { - } - } - - ProjectHomeView --o ProjectFiltersView : contains - ProjectHomeView --o SearchResultsView : contains - ProjectHomeView --o MapView : contains - ProjectHomeView --o MarkdownView : contains - ProjectHomeView --o ProjectLogosView : contains - @enduml - -.. image:: images/project-home-view-design.png diff --git a/docs/docs/AccessPolicy.html b/docs/docs/AccessPolicy.html index f5d6b5fcf..fb2eeb75a 100644 --- a/docs/docs/AccessPolicy.html +++ b/docs/docs/AccessPolicy.html @@ -1286,7 +1286,7 @@

Home

Classes

  • diff --git a/docs/docs/AccessPolicyView.html b/docs/docs/AccessPolicyView.html index 663b88fc1..b38c6edca 100644 --- a/docs/docs/AccessPolicyView.html +++ b/docs/docs/AccessPolicyView.html @@ -2008,7 +2008,7 @@

    Home

    Classes

    • diff --git a/docs/docs/AccessRule.html b/docs/docs/AccessRule.html index 9127213d6..1f572c054 100644 --- a/docs/docs/AccessRule.html +++ b/docs/docs/AccessRule.html @@ -630,7 +630,7 @@

      Home

      Classes

      • diff --git a/docs/docs/AppModel.html b/docs/docs/AppModel.html index a5bd800a8..983101f69 100644 --- a/docs/docs/AppModel.html +++ b/docs/docs/AppModel.html @@ -249,7 +249,7 @@

        Home

        Classes

        • diff --git a/docs/docs/BooleanFilter.html b/docs/docs/BooleanFilter.html index ee0ac55f2..d2e8faa92 100644 --- a/docs/docs/BooleanFilter.html +++ b/docs/docs/BooleanFilter.html @@ -2701,7 +2701,7 @@

          Home

          Classes

          • diff --git a/docs/docs/ChoiceFilter.html b/docs/docs/ChoiceFilter.html index e39464b35..cc0368beb 100644 --- a/docs/docs/ChoiceFilter.html +++ b/docs/docs/ChoiceFilter.html @@ -2445,7 +2445,7 @@

            Home

            Classes

            • diff --git a/docs/docs/Citations.html b/docs/docs/Citations.html index aeea3871e..3d6b58aa7 100644 --- a/docs/docs/Citations.html +++ b/docs/docs/Citations.html @@ -175,7 +175,7 @@

              Home

              Classes

              • diff --git a/docs/docs/CollectionModel.html b/docs/docs/CollectionModel.html index caa3e894c..a8b8eff78 100644 --- a/docs/docs/CollectionModel.html +++ b/docs/docs/CollectionModel.html @@ -352,7 +352,7 @@
                Parameters:
                Source:
                @@ -686,7 +686,7 @@
                Parameters:
                Source:
                @@ -980,7 +980,7 @@
                Parameters:
                Source:
                @@ -1089,7 +1089,7 @@

                crea
                Source:
                @@ -1306,7 +1306,7 @@

                createXMLSource:
                @@ -1645,7 +1645,7 @@

                fetchSource:
                @@ -1734,7 +1734,7 @@

                fe
                Source:
                @@ -1822,7 +1822,7 @@

                Source:
                @@ -2500,7 +2500,7 @@
                Parameters:
                Source:
                @@ -2659,7 +2659,7 @@
                Parameters:
                Source:
                @@ -2864,7 +2864,7 @@
                Parameters:
                Source:
                @@ -2977,7 +2977,7 @@

                reserv
                Source:
                @@ -3114,7 +3114,7 @@

                Parameters:
                Source:
                @@ -3313,7 +3313,7 @@

                urlSource:
                @@ -3497,7 +3497,7 @@
                Parameters:
                Source:
                @@ -3659,7 +3659,7 @@
                Parameters:
                Source:
                @@ -3733,7 +3733,7 @@

                Home

                Classes

                • diff --git a/docs/docs/ColorPaletteView.html b/docs/docs/ColorPaletteView.html index e91515bc4..e4077982a 100644 --- a/docs/docs/ColorPaletteView.html +++ b/docs/docs/ColorPaletteView.html @@ -622,7 +622,7 @@

                  Home

                  Classes

                  • diff --git a/docs/docs/DataCatalogViewWithFilters.html b/docs/docs/DataCatalogViewWithFilters.html index 2c00eb169..340d3d26f 100644 --- a/docs/docs/DataCatalogViewWithFilters.html +++ b/docs/docs/DataCatalogViewWithFilters.html @@ -3077,7 +3077,7 @@

                    Home

                    Classes

                    • diff --git a/docs/docs/DataCatalogView_drawTiles-TextOverlay.html b/docs/docs/DataCatalogView_drawTiles-TextOverlay.html index cb8ff7154..47255e196 100644 --- a/docs/docs/DataCatalogView_drawTiles-TextOverlay.html +++ b/docs/docs/DataCatalogView_drawTiles-TextOverlay.html @@ -159,7 +159,7 @@

                      Home

                      Classes

                      • diff --git a/docs/docs/DataItemView.html b/docs/docs/DataItemView.html index 91e5aa428..0b09258c7 100644 --- a/docs/docs/DataItemView.html +++ b/docs/docs/DataItemView.html @@ -391,7 +391,7 @@

                        Home

                        Classes

                        • diff --git a/docs/docs/DataPackage.html b/docs/docs/DataPackage.html index bf6d5ef1a..469da08b1 100644 --- a/docs/docs/DataPackage.html +++ b/docs/docs/DataPackage.html @@ -1469,7 +1469,7 @@

                          fetchFr
                          Source:
                          @@ -1558,7 +1558,7 @@

                          getCnURISource:
                          @@ -1719,7 +1719,7 @@
                          Parameters:
                          Source:
                          @@ -1923,7 +1923,105 @@
                          Parameters:
                          Source:
                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                          removeOrphanedBlankNodes()

                          + + + + + + +
                          + Remove orphaned blank nodes from the model's current graph + +This was put in to support replacing package members who are +referenced by provenance statements, specifically members typed as +Programs. rdflib.js will throw an error when serializing if any +statements in the graph have objects that are blank nodes when no +other statements in the graph have subjects for the same blank node. +i.e., blank nodes references that aren't defined. + +Should be called during a call to serialize() and mutates +this.dataPackageGraph directly as a side-effect. +
                          + + + + + + + + + + + + + +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          Source:
                          +
                          @@ -2254,7 +2352,7 @@

                          up
                          Source:
                          @@ -2306,7 +2404,7 @@

                          Home

                          Classes

                          + + + + + + + + + + + + + + + +
                          Returns:
                          + + +
                          + the rendered support page +
                          + + + +
                          +
                          + Type +
                          +
                          + +object + + +
                          +
                          + + + + + + + + + + + + + +

                          renderSupport() → {object}

                          + + + + + + +
                          + Render the support page +
                          + + + + + + + + + + + + + +
                          + + + + + + + + + + + + + + + + + + + + @@ -1782,6 +1892,116 @@

                          renderSu +

                          Returns:
                          + + +
                          + the rendered support page +
                          + + + +
                          +
                          + Type +
                          +
                          + +object + + +
                          +
                          + + + + + + + + + + + + + +

                          renderSupport() → {object}

                          + + + + + + +
                          + Render the support page +
                          + + + + + + + + + + + + + +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          Source:
                          +
                          + + + + + + + +
                          + + + + + + + + + + + + + + +
                          Returns:
                          @@ -2389,7 +2609,7 @@

                          Home

                          Classes

                          • diff --git a/docs/docs/index.html b/docs/docs/index.html index 0ea76f468..e4a1e9d9e 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -57,7 +57,7 @@

                            Home

                            Classes

                            • diff --git a/docs/docs/models_AccessRule.js.html b/docs/docs/models_AccessRule.js.html index 9c1ba7c10..3fd8a9cb2 100644 --- a/docs/docs/models_AccessRule.js.html +++ b/docs/docs/models_AccessRule.js.html @@ -297,7 +297,7 @@

                              Home

                              Classes

                              • diff --git a/docs/docs/models_AppModel.js.html b/docs/docs/models_AppModel.js.html index 97736f5bc..dd886b10f 100644 --- a/docs/docs/models_AppModel.js.html +++ b/docs/docs/models_AppModel.js.html @@ -49,6 +49,7 @@

                                Source: models/AppModel.js

                                defaults: { headerType: 'default', title: MetacatUI.themeTitle || "Metacat Data Catalog", + repositoryName: MetacatUI.themeTitle || "Metacat Data Catalog", emailContact: "knb-help@nceas.ucsb.edu", @@ -445,6 +446,70 @@

                                Source: models/AppModel.js

                                associatedParties: false }, + /** + * The list of labels that should be blacklisted while + * @type {string[]} + */ + portalLabelBlacklist: [ + 'urn:node:CN', 'CN', 'cn', + 'urn:node:CNUNM1', 'CNUNM1', 'cn-unm-1', + 'urn:node:CNUCSB1', 'CNUCSB1', 'cn-ucsb-1', + 'urn:node:CNORC1', 'CNORC1', 'cn-orc-1', + 'urn:node:KNB', 'KNB', 'KNB Data Repository', + 'urn:node:ESA', 'ESA', 'ESA Data Registry', + 'urn:node:SANPARKS', 'SANPARKS', 'SANParks Data Repository', + 'urn:node:ORNLDAAC', 'ORNLDAAC', 'ORNL DAAC', + 'urn:node:LTER', 'LTER', 'U.S. LTER Network', + 'urn:node:CDL', 'CDL', 'UC3 Merritt', + 'urn:node:PISCO', 'PISCO', 'PISCO MN', + 'urn:node:ONEShare', 'ONEShare', 'ONEShare DataONE Member Node', + 'urn:node:mnORC1', 'mnORC1', 'DataONE ORC Dedicated Replica Server', + 'urn:node:mnUNM1', 'mnUNM1', 'DataONE UNM Dedicated Replica Server', + 'urn:node:mnUCSB1', 'mnUCSB1', 'DataONE UCSB Dedicated Replica Server', + 'urn:node:TFRI', 'TFRI', 'TFRI Data Catalog', + 'urn:node:USANPN', 'USANPN', 'USA National Phenology Network', + 'urn:node:SEAD', 'SEAD', 'SEAD Virtual Archive', + 'urn:node:GOA', 'GOA', 'Gulf of Alaska Data Portal', + 'urn:node:KUBI', 'KUBI', 'University of Kansas - Biodiversity Institute', + 'urn:node:LTER_EUROPE', 'LTER_EUROPE', 'LTER Europe Member Node', + 'urn:node:DRYAD', 'DRYAD', 'Dryad Digital Repository', + 'urn:node:CLOEBIRD', 'CLOEBIRD', 'Cornell Lab of Ornithology - eBird', + 'urn:node:EDACGSTORE', 'EDACGSTORE', 'EDAC Gstore Repository', + 'urn:node:IOE', 'IOE', 'Montana IoE Data Repository', + 'urn:node:US_MPC', 'US_MPC', 'Minnesota Population Center', + 'urn:node:EDORA', 'EDORA', 'Environmental Data for the Oak Ridge Area (EDORA)', + 'urn:node:RGD', 'RGD', 'Regional and Global biogeochemical dynamics Data (RGD)', + 'urn:node:GLEON', 'GLEON', 'GLEON Data Repository', + 'urn:node:IARC', 'IARC', 'IARC Data Archive', + 'urn:node:NMEPSCOR', 'NMEPSCOR', 'NM EPSCoR Tier 4 Node', + 'urn:node:TERN', 'TERN', 'TERN Australia', + 'urn:node:NKN', 'NKN', 'Northwest Knowledge Network', + 'urn:node:USGS_SDC', 'USGS_SDC', 'USGS Science Data Catalog', + 'urn:node:NRDC', 'NRDC', 'NRDC DataONE member node', + 'urn:node:NCEI', 'NCEI', 'NOAA NCEI Environmental Data Archive', + 'urn:node:PPBIO', 'PPBIO', 'PPBio', + 'urn:node:NEON', 'NEON', 'NEON Member Node', + 'urn:node:TDAR', 'TDAR', 'The Digital Archaeological Record', + 'urn:node:ARCTIC', 'ARCTIC', 'Arctic Data Center', + 'urn:node:BCODMO', 'BCODMO', 'Biological and Chemical Oceanography Data Management Office (BCO-DMO) ', + 'urn:node:GRIIDC', 'GRIIDC', 'Gulf of Mexico Research Initiative Information and Data Cooperative (GRIIDC)', + 'urn:node:R2R', 'R2R', 'Rolling Deck to Repository (R2R)', + 'urn:node:EDI', 'EDI', 'Environmental Data Initiative', + 'urn:node:UIC', 'UIC', 'A Member Node for University of Illinois at Chicago.', + 'urn:node:RW', 'RW', 'Research Workspace', + 'urn:node:FEMC', 'FEMC', 'Forest Ecosystem Monitoring Cooperative Member Node', + 'urn:node:OTS_NDC', 'OTS_NDC', 'Organization for Tropical Studies - Neotropical Data Center', + 'urn:node:PANGAEA', 'PANGAEA', 'PANGAEA', + 'urn:node:ESS_DIVE', 'ESS_DIVE', 'ESS-DIVE: Deep Insight for Earth Science Data', + 'urn:node:CAS_CERN', 'CAS_CERN', 'Chinese Ecosystem Research Network (CERN)', + 'urn:node:FIGSHARE_CARY', 'FIGSHARE_CARY', 'Cary Institute of Ecosystem Studies (powered by Figshare)', + 'urn:node:IEDA_EARTHCHEM', 'IEDA_EARTHCHEM', 'IEDA EARTHCHEM', + 'urn:node:IEDA_USAP', 'IEDA_USAP', 'IEDA USAP', + 'urn:node:IEDA_MGDL', 'IEDA_MGDL', 'IEDA MGDL', + 'urn:node:METAGRIL', 'METAGRIL', 'metaGRIL', + 'urn:node:ARM', 'ARM', 'ARM - Atmospheric Radiation Measurement Research Facility' + ], + /** If true, then archived content is available in the search index. * Set to false if this MetacatUI is using a Metacat version before 2.10.0 * @type {boolean} @@ -647,6 +712,7 @@

                                Source: models/AppModel.js

                                this.set("signInUrlLdap", this.get('portalUrl') + "ldap?target="); } + if(this.get('orcidBaseUrl')) this.set('orcidSearchUrl', this.get('orcidBaseUrl') + '/v1.1/search/orcid-bio?q='); @@ -709,7 +775,7 @@

                                Home

                                Classes

                                • diff --git a/docs/docs/models_CollectionModel.js.html b/docs/docs/models_CollectionModel.js.html index d4fb94400..0e1c86227 100644 --- a/docs/docs/models_CollectionModel.js.html +++ b/docs/docs/models_CollectionModel.js.html @@ -106,6 +106,12 @@

                                  Source: models/CollectionModel.js

                                  //Create a Filters collection to store the definition filters this.set("definitionFilters", new Filters()); + // Update the blacklist with the node/repository labels + var nodeBlackList = MetacatUI.appModel.get("portalLabelBlacklist"); + if (nodeBlackList !== undefined && Array.isArray(nodeBlackList)) { + this.set("labelBlacklist", this.get("labelBlacklist").concat(nodeBlackList)); + } + //When this Collection has been saved, re-save the collection definition this.on("successSaving", function(){ this.get("definitionFilters").reset(this.getAllDefinitionFilters()); @@ -653,7 +659,7 @@

                                  Home

                                  Classes

                                  • diff --git a/docs/docs/models_DataONEObject.js.html b/docs/docs/models_DataONEObject.js.html index bec0a1a7a..dfd558219 100644 --- a/docs/docs/models_DataONEObject.js.html +++ b/docs/docs/models_DataONEObject.js.html @@ -1957,7 +1957,7 @@

                                    Home

                                    Classes

                                    • diff --git a/docs/docs/models_LookupModel.js.html b/docs/docs/models_LookupModel.js.html index 7b6881b5e..bce180831 100644 --- a/docs/docs/models_LookupModel.js.html +++ b/docs/docs/models_LookupModel.js.html @@ -610,7 +610,7 @@

                                      Home

                                      Classes

                                      • diff --git a/docs/docs/models_Map.js.html b/docs/docs/models_Map.js.html index 10760772a..19ad4ce11 100644 --- a/docs/docs/models_Map.js.html +++ b/docs/docs/models_Map.js.html @@ -239,7 +239,7 @@

                                        Home

                                        Classes

                                        • diff --git a/docs/docs/models_PackageModel.js.html b/docs/docs/models_PackageModel.js.html index cf6f74f5f..ec62af05a 100644 --- a/docs/docs/models_PackageModel.js.html +++ b/docs/docs/models_PackageModel.js.html @@ -753,7 +753,7 @@

                                          Source: models/PackageModel.js

                                          var query = "fl=title,id,obsoletedBy,resourceMap" + "&wt=json" + "&group=true&group.field=formatType&group.limit=-1" + - "&q=((formatType:METADATA+" + rMapQuery + ") OR " + idQuery + ")"; + "&q=((formatType:METADATA AND " + rMapQuery + ") OR " + idQuery + ")"; var model = this; var requestSettings = { @@ -1525,7 +1525,7 @@

                                          Home

                                          Classes

                                          • diff --git a/docs/docs/models_Search.js.html b/docs/docs/models_Search.js.html index 2f7d5e5a0..a127e005f 100644 --- a/docs/docs/models_Search.js.html +++ b/docs/docs/models_Search.js.html @@ -1136,7 +1136,7 @@

                                            Home

                                            Classes

                                            • diff --git a/docs/docs/models_SolrResult.js.html b/docs/docs/models_SolrResult.js.html index c9ea0aea0..7ed2a47f4 100644 --- a/docs/docs/models_SolrResult.js.html +++ b/docs/docs/models_SolrResult.js.html @@ -839,7 +839,7 @@

                                              Home

                                              Classes

                                              • diff --git a/docs/docs/models_Stats.js.html b/docs/docs/models_Stats.js.html index 6887162ee..75160193a 100644 --- a/docs/docs/models_Stats.js.html +++ b/docs/docs/models_Stats.js.html @@ -1165,7 +1165,7 @@

                                                Home

                                                Classes

                                                • diff --git a/docs/docs/models_UserModel.js.html b/docs/docs/models_UserModel.js.html index 71a8f862c..cf044bc69 100644 --- a/docs/docs/models_UserModel.js.html +++ b/docs/docs/models_UserModel.js.html @@ -1057,7 +1057,7 @@

                                                  Home

                                                  Classes

                                                  • diff --git a/docs/docs/models_filters_BooleanFilter.js.html b/docs/docs/models_filters_BooleanFilter.js.html index 018255e4a..390d77759 100644 --- a/docs/docs/models_filters_BooleanFilter.js.html +++ b/docs/docs/models_filters_BooleanFilter.js.html @@ -148,7 +148,7 @@

                                                    Home

                                                    Classes

                                                    • diff --git a/docs/docs/models_filters_ChoiceFilter.js.html b/docs/docs/models_filters_ChoiceFilter.js.html index f6f8b2718..dc964671d 100644 --- a/docs/docs/models_filters_ChoiceFilter.js.html +++ b/docs/docs/models_filters_ChoiceFilter.js.html @@ -196,7 +196,7 @@

                                                      Home

                                                      Classes

                                                      • diff --git a/docs/docs/models_filters_DateFilter.js.html b/docs/docs/models_filters_DateFilter.js.html index 6ea6308b0..36eec463f 100644 --- a/docs/docs/models_filters_DateFilter.js.html +++ b/docs/docs/models_filters_DateFilter.js.html @@ -458,7 +458,7 @@

                                                        Home

                                                        Classes

                                                        • diff --git a/docs/docs/models_filters_Filter.js.html b/docs/docs/models_filters_Filter.js.html index 5bf46ff78..7776e310e 100644 --- a/docs/docs/models_filters_Filter.js.html +++ b/docs/docs/models_filters_Filter.js.html @@ -375,7 +375,7 @@

                                                          Source: models/filters/Filter.js

                                                          //If the value is a search phrase (more than one word), and not a date range string, wrap in quotes if( value.indexOf(" ") > -1 && !isDateRange ){ - valuesQueryString = "\"" + value + "\""; + valuesQueryString += "\"" + value + "\""; } else if( this.get("matchSubstring") && !isDateRange ){ @@ -749,7 +749,7 @@

                                                          Home

                                                          Classes

                                                          • diff --git a/docs/docs/models_filters_FilterGroup.js.html b/docs/docs/models_filters_FilterGroup.js.html index a78d063e2..bef4e3343 100644 --- a/docs/docs/models_filters_FilterGroup.js.html +++ b/docs/docs/models_filters_FilterGroup.js.html @@ -232,7 +232,7 @@

                                                            Home

                                                            Classes

                                                            • diff --git a/docs/docs/models_filters_NumericFilter.js.html b/docs/docs/models_filters_NumericFilter.js.html index 266951446..9db0a1b32 100644 --- a/docs/docs/models_filters_NumericFilter.js.html +++ b/docs/docs/models_filters_NumericFilter.js.html @@ -427,7 +427,7 @@

                                                              Home

                                                              Classes

                                                              • diff --git a/docs/docs/models_filters_SpatialFilter.js.html b/docs/docs/models_filters_SpatialFilter.js.html index f24939a80..23cf0182d 100644 --- a/docs/docs/models_filters_SpatialFilter.js.html +++ b/docs/docs/models_filters_SpatialFilter.js.html @@ -187,7 +187,7 @@

                                                                Home

                                                                Classes

                                                                • diff --git a/docs/docs/models_filters_ToggleFilter.js.html b/docs/docs/models_filters_ToggleFilter.js.html index 3ebcb8751..2251a995e 100644 --- a/docs/docs/models_filters_ToggleFilter.js.html +++ b/docs/docs/models_filters_ToggleFilter.js.html @@ -178,7 +178,7 @@

                                                                  Home

                                                                  Classes

                                                                  • diff --git a/docs/docs/models_metadata_eml211_EML211.js.html b/docs/docs/models_metadata_eml211_EML211.js.html index 986d3d37b..dfff202ff 100644 --- a/docs/docs/models_metadata_eml211_EML211.js.html +++ b/docs/docs/models_metadata_eml211_EML211.js.html @@ -2109,7 +2109,7 @@

                                                                    Home

                                                                    Classes

                                                                    • diff --git a/docs/docs/models_metadata_eml211_EMLEntity.js.html b/docs/docs/models_metadata_eml211_EMLEntity.js.html index 097124042..8e2e60d68 100644 --- a/docs/docs/models_metadata_eml211_EMLEntity.js.html +++ b/docs/docs/models_metadata_eml211_EMLEntity.js.html @@ -567,7 +567,7 @@

                                                                      Home

                                                                      Classes

                                                                      • diff --git a/docs/docs/models_metadata_eml211_EMLGeoCoverage.js.html b/docs/docs/models_metadata_eml211_EMLGeoCoverage.js.html index 02324db45..eb68b96a9 100644 --- a/docs/docs/models_metadata_eml211_EMLGeoCoverage.js.html +++ b/docs/docs/models_metadata_eml211_EMLGeoCoverage.js.html @@ -482,7 +482,7 @@

                                                                        Home

                                                                        Classes

                                                                        • diff --git a/docs/docs/models_metadata_eml211_EMLNonNumericDomain.js.html b/docs/docs/models_metadata_eml211_EMLNonNumericDomain.js.html index 5c44f582c..a2322cafd 100644 --- a/docs/docs/models_metadata_eml211_EMLNonNumericDomain.js.html +++ b/docs/docs/models_metadata_eml211_EMLNonNumericDomain.js.html @@ -917,7 +917,7 @@

                                                                          Home

                                                                          Classes

                                                                          • diff --git a/docs/docs/models_metadata_eml211_EMLNumericDomain.js.html b/docs/docs/models_metadata_eml211_EMLNumericDomain.js.html index 28f87d2a7..4d71b08a1 100644 --- a/docs/docs/models_metadata_eml211_EMLNumericDomain.js.html +++ b/docs/docs/models_metadata_eml211_EMLNumericDomain.js.html @@ -474,7 +474,7 @@

                                                                            Home

                                                                            Classes

                                                                            • diff --git a/docs/docs/models_metadata_eml211_EMLTemporalCoverage.js.html b/docs/docs/models_metadata_eml211_EMLTemporalCoverage.js.html index b46fda1bb..bc6baced1 100644 --- a/docs/docs/models_metadata_eml211_EMLTemporalCoverage.js.html +++ b/docs/docs/models_metadata_eml211_EMLTemporalCoverage.js.html @@ -543,7 +543,7 @@

                                                                              Home

                                                                              Classes

                                                                              • diff --git a/docs/docs/models_metadata_eml220_EMLText.js.html b/docs/docs/models_metadata_eml220_EMLText.js.html index ffd4aed4e..85cadfa5c 100644 --- a/docs/docs/models_metadata_eml220_EMLText.js.html +++ b/docs/docs/models_metadata_eml220_EMLText.js.html @@ -150,7 +150,7 @@

                                                                                Home

                                                                                Classes

                                                                                • diff --git a/docs/docs/models_portals_PortalImage.js.html b/docs/docs/models_portals_PortalImage.js.html index a911ff868..be847b432 100644 --- a/docs/docs/models_portals_PortalImage.js.html +++ b/docs/docs/models_portals_PortalImage.js.html @@ -229,7 +229,7 @@

                                                                                  Home

                                                                                  Classes

                                                                                  • diff --git a/docs/docs/models_portals_PortalModel.js.html b/docs/docs/models_portals_PortalModel.js.html index cceed45aa..f5ecf6197 100644 --- a/docs/docs/models_portals_PortalModel.js.html +++ b/docs/docs/models_portals_PortalModel.js.html @@ -1302,6 +1302,7 @@

                                                                                    Source: models/portals/PortalModel.js

                                                                                    /** * Queries the Solr discovery index for other Portal objects with this same label. + * Also, checks for the existing black list for repository labels * If at least one other Portal has the same label, then it is not available. * @param {string} label - The label to query for */ @@ -1320,6 +1321,17 @@

                                                                                    Source: models/portals/PortalModel.js

                                                                                    var model = this; + // Convert the black list to lower case for case insensitive match + var lowerCaseBlackList = this.get("labelBlacklist").map(function(value) { + return value.toLowerCase(); + }); + + // Check the existing blacklist before making a Solr call + if (lowerCaseBlackList.indexOf(label.toLowerCase()) > -1) { + model.trigger("labelTaken"); + return + } + // Query solr to see if other portals already use this label var requestSettings = { url: MetacatUI.appModel.get("queryServiceUrl") + @@ -1618,7 +1630,7 @@

                                                                                    Home

                                                                                    Classes

                                                                                    • diff --git a/docs/docs/models_portals_PortalSectionModel.js.html b/docs/docs/models_portals_PortalSectionModel.js.html index e045124bc..c98386c5f 100644 --- a/docs/docs/models_portals_PortalSectionModel.js.html +++ b/docs/docs/models_portals_PortalSectionModel.js.html @@ -348,7 +348,7 @@

                                                                                      Home

                                                                                      Classes

                                                                                      • diff --git a/docs/docs/routers_router.js.html b/docs/docs/routers_router.js.html index 9bffa9fb9..651dfba8e 100644 --- a/docs/docs/routers_router.js.html +++ b/docs/docs/routers_router.js.html @@ -753,7 +753,7 @@

                                                                                        Home

                                                                                        Classes

                                                                                        • diff --git a/docs/docs/themes_arctic_models_AppModel.js.html b/docs/docs/themes_arctic_models_AppModel.js.html index 25c854e46..4e52ebcb1 100644 --- a/docs/docs/themes_arctic_models_AppModel.js.html +++ b/docs/docs/themes_arctic_models_AppModel.js.html @@ -39,6 +39,7 @@

                                                                                          Source: themes/arctic/models/AppModel.js

                                                                                          defaults: { headerType: 'default', title: MetacatUI.themeTitle || "Metacat Data Catalog", + repositoryName: "Arctic Data Center", emailContact: "support@arcticdata.io", @@ -120,7 +121,7 @@

                                                                                          Source: themes/arctic/models/AppModel.js

                                                                                          thesaurus: "NASA Global Change Master Directory (GCMD)" }], - baseUrl: "https://arcticdata.io",//window.location.origin || (window.location.protocol + "//" + window.location.host), + baseUrl: window.location.origin || (window.location.protocol + "//" + window.location.host), // the most likely item to change is the Metacat deployment context context: '/metacat', @@ -396,6 +397,70 @@

                                                                                          Source: themes/arctic/models/AppModel.js

                                                                                          */ limitPortalsToSubjects: [], + /** + * The list of labels that should be blacklisted while + * @type {string[]} + */ + portalLabelBlacklist: [ + 'urn:node:CN', 'CN', 'cn', + 'urn:node:CNUNM1', 'CNUNM1', 'cn-unm-1', + 'urn:node:CNUCSB1', 'CNUCSB1', 'cn-ucsb-1', + 'urn:node:CNORC1', 'CNORC1', 'cn-orc-1', + 'urn:node:KNB', 'KNB', 'KNB Data Repository', + 'urn:node:ESA', 'ESA', 'ESA Data Registry', + 'urn:node:SANPARKS', 'SANPARKS', 'SANParks Data Repository', + 'urn:node:ORNLDAAC', 'ORNLDAAC', 'ORNL DAAC', + 'urn:node:LTER', 'LTER', 'U.S. LTER Network', + 'urn:node:CDL', 'CDL', 'UC3 Merritt', + 'urn:node:PISCO', 'PISCO', 'PISCO MN', + 'urn:node:ONEShare', 'ONEShare', 'ONEShare DataONE Member Node', + 'urn:node:mnORC1', 'mnORC1', 'DataONE ORC Dedicated Replica Server', + 'urn:node:mnUNM1', 'mnUNM1', 'DataONE UNM Dedicated Replica Server', + 'urn:node:mnUCSB1', 'mnUCSB1', 'DataONE UCSB Dedicated Replica Server', + 'urn:node:TFRI', 'TFRI', 'TFRI Data Catalog', + 'urn:node:USANPN', 'USANPN', 'USA National Phenology Network', + 'urn:node:SEAD', 'SEAD', 'SEAD Virtual Archive', + 'urn:node:GOA', 'GOA', 'Gulf of Alaska Data Portal', + 'urn:node:KUBI', 'KUBI', 'University of Kansas - Biodiversity Institute', + 'urn:node:LTER_EUROPE', 'LTER_EUROPE', 'LTER Europe Member Node', + 'urn:node:DRYAD', 'DRYAD', 'Dryad Digital Repository', + 'urn:node:CLOEBIRD', 'CLOEBIRD', 'Cornell Lab of Ornithology - eBird', + 'urn:node:EDACGSTORE', 'EDACGSTORE', 'EDAC Gstore Repository', + 'urn:node:IOE', 'IOE', 'Montana IoE Data Repository', + 'urn:node:US_MPC', 'US_MPC', 'Minnesota Population Center', + 'urn:node:EDORA', 'EDORA', 'Environmental Data for the Oak Ridge Area (EDORA)', + 'urn:node:RGD', 'RGD', 'Regional and Global biogeochemical dynamics Data (RGD)', + 'urn:node:GLEON', 'GLEON', 'GLEON Data Repository', + 'urn:node:IARC', 'IARC', 'IARC Data Archive', + 'urn:node:NMEPSCOR', 'NMEPSCOR', 'NM EPSCoR Tier 4 Node', + 'urn:node:TERN', 'TERN', 'TERN Australia', + 'urn:node:NKN', 'NKN', 'Northwest Knowledge Network', + 'urn:node:USGS_SDC', 'USGS_SDC', 'USGS Science Data Catalog', + 'urn:node:NRDC', 'NRDC', 'NRDC DataONE member node', + 'urn:node:NCEI', 'NCEI', 'NOAA NCEI Environmental Data Archive', + 'urn:node:PPBIO', 'PPBIO', 'PPBio', + 'urn:node:NEON', 'NEON', 'NEON Member Node', + 'urn:node:TDAR', 'TDAR', 'The Digital Archaeological Record', + 'urn:node:ARCTIC', 'ARCTIC', 'Arctic Data Center', + 'urn:node:BCODMO', 'BCODMO', 'Biological and Chemical Oceanography Data Management Office (BCO-DMO) ', + 'urn:node:GRIIDC', 'GRIIDC', 'Gulf of Mexico Research Initiative Information and Data Cooperative (GRIIDC)', + 'urn:node:R2R', 'R2R', 'Rolling Deck to Repository (R2R)', + 'urn:node:EDI', 'EDI', 'Environmental Data Initiative', + 'urn:node:UIC', 'UIC', 'A Member Node for University of Illinois at Chicago.', + 'urn:node:RW', 'RW', 'Research Workspace', + 'urn:node:FEMC', 'FEMC', 'Forest Ecosystem Monitoring Cooperative Member Node', + 'urn:node:OTS_NDC', 'OTS_NDC', 'Organization for Tropical Studies - Neotropical Data Center', + 'urn:node:PANGAEA', 'PANGAEA', 'PANGAEA', + 'urn:node:ESS_DIVE', 'ESS_DIVE', 'ESS-DIVE: Deep Insight for Earth Science Data', + 'urn:node:CAS_CERN', 'CAS_CERN', 'Chinese Ecosystem Research Network (CERN)', + 'urn:node:FIGSHARE_CARY', 'FIGSHARE_CARY', 'Cary Institute of Ecosystem Studies (powered by Figshare)', + 'urn:node:IEDA_EARTHCHEM', 'IEDA_EARTHCHEM', 'IEDA EARTHCHEM', + 'urn:node:IEDA_USAP', 'IEDA_USAP', 'IEDA USAP', + 'urn:node:IEDA_MGDL', 'IEDA_MGDL', 'IEDA MGDL', + 'urn:node:METAGRIL', 'METAGRIL', 'metaGRIL', + 'urn:node:ARM', 'ARM', 'ARM - Atmospheric Radiation Measurement Research Facility' + ], + /** * This message will display when a user tries to create a new Portal in the PortalEditor * when they are not associated with a whitelisted subject in the `limitPortalsToSubjects` list @@ -665,7 +730,7 @@

                                                                                          Home

                                                                                          Classes

                                                                                          • diff --git a/docs/docs/themes_arctic_models_Map.js.html b/docs/docs/themes_arctic_models_Map.js.html index 957eb5751..3b791be24 100644 --- a/docs/docs/themes_arctic_models_Map.js.html +++ b/docs/docs/themes_arctic_models_Map.js.html @@ -237,7 +237,7 @@

                                                                                            Home

                                                                                            Classes

                                                                                            • diff --git a/docs/docs/themes_arctic_routers_router.js.html b/docs/docs/themes_arctic_routers_router.js.html index 0bb78785d..de8c95013 100644 --- a/docs/docs/themes_arctic_routers_router.js.html +++ b/docs/docs/themes_arctic_routers_router.js.html @@ -611,7 +611,7 @@

                                                                                              Home

                                                                                              Classes

                                                                                              • diff --git a/docs/docs/themes_dangermondpreserve_routers_router.js.html b/docs/docs/themes_dangermondpreserve_routers_router.js.html new file mode 100644 index 000000000..643eb64cf --- /dev/null +++ b/docs/docs/themes_dangermondpreserve_routers_router.js.html @@ -0,0 +1,82 @@ + + + + + MetacatUI Dev Docs: Source: themes/dangermondpreserve/routers/router.js + + + + + + + + + + + +
                                                                                                + +

                                                                                                Source: themes/dangermondpreserve/routers/router.js

                                                                                                + + + + + + +
                                                                                                +
                                                                                                +
                                                                                                /*global Backbone */
                                                                                                +'use strict';
                                                                                                +
                                                                                                +define(['jquery', 'underscore', 'backbone', 'routers/BaseRouter'],
                                                                                                +function ($, _, Backbone, BaseRouter) {
                                                                                                +
                                                                                                +    // MetacatUI Router
                                                                                                +    // ----------------
                                                                                                +    var UIRouter = BaseRouter.extend({
                                                                                                +        routes: _.extend(BaseRouter.prototype.routes, {
                                                                                                +            "support(/:anchorId)(/)": "renderSupport",
                                                                                                +        }),
                                                                                                +        
                                                                                                +        /**
                                                                                                +         * Render the support page
                                                                                                +         * @return {object} the rendered support page
                                                                                                +         */
                                                                                                +        renderSupport: function(anchorId) {
                                                                                                +            this.routeHistory.push("support");
                                                                                                +            MetacatUI.appModel.set('anchorId', anchorId);
                                                                                                +            var options = {
                                                                                                +                    pageName: "support",
                                                                                                +                    anchorId: anchorId
                                                                                                +                }
                                                                                                +
                                                                                                +            this.renderText(options);
                                                                                                +        }
                                                                                                +    });
                                                                                                +    return UIRouter;
                                                                                                +});
                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                + + + + +
                                                                                                + + + +
                                                                                                + +
                                                                                                + Documentation generated by JSDoc 3.6.3 on Thu May 14 2020 14:56:28 GMT-0500 (Central Daylight Time) +
                                                                                                + + + + + diff --git a/docs/docs/themes_dataone_models_AppModel.js.html b/docs/docs/themes_dataone_models_AppModel.js.html index 4a8256191..3c9190f53 100644 --- a/docs/docs/themes_dataone_models_AppModel.js.html +++ b/docs/docs/themes_dataone_models_AppModel.js.html @@ -38,7 +38,8 @@

                                                                                                Source: themes/dataone/models/AppModel.js

                                                                                                // This model contains all of the attributes for the Application defaults: { headerType: 'default', - title: MetacatUI.themeTitle || "Metacat Data Catalog", + title: "DataONE Data Catalog", + repositoryName: "DataONE Data Catalog", emailContact: "support@dataone.org", @@ -319,6 +320,70 @@

                                                                                                Source: themes/dataone/models/AppModel.js

                                                                                                */ limitPortalsToSubjects: [], + /** + * The list of labels that should be blacklisted while + * @type {string[]} + */ + portalLabelBlacklist: [ + 'urn:node:CN', 'CN', 'cn', + 'urn:node:CNUNM1', 'CNUNM1', 'cn-unm-1', + 'urn:node:CNUCSB1', 'CNUCSB1', 'cn-ucsb-1', + 'urn:node:CNORC1', 'CNORC1', 'cn-orc-1', + 'urn:node:KNB', 'KNB', 'KNB Data Repository', + 'urn:node:ESA', 'ESA', 'ESA Data Registry', + 'urn:node:SANPARKS', 'SANPARKS', 'SANParks Data Repository', + 'urn:node:ORNLDAAC', 'ORNLDAAC', 'ORNL DAAC', + 'urn:node:LTER', 'LTER', 'U.S. LTER Network', + 'urn:node:CDL', 'CDL', 'UC3 Merritt', + 'urn:node:PISCO', 'PISCO', 'PISCO MN', + 'urn:node:ONEShare', 'ONEShare', 'ONEShare DataONE Member Node', + 'urn:node:mnORC1', 'mnORC1', 'DataONE ORC Dedicated Replica Server', + 'urn:node:mnUNM1', 'mnUNM1', 'DataONE UNM Dedicated Replica Server', + 'urn:node:mnUCSB1', 'mnUCSB1', 'DataONE UCSB Dedicated Replica Server', + 'urn:node:TFRI', 'TFRI', 'TFRI Data Catalog', + 'urn:node:USANPN', 'USANPN', 'USA National Phenology Network', + 'urn:node:SEAD', 'SEAD', 'SEAD Virtual Archive', + 'urn:node:GOA', 'GOA', 'Gulf of Alaska Data Portal', + 'urn:node:KUBI', 'KUBI', 'University of Kansas - Biodiversity Institute', + 'urn:node:LTER_EUROPE', 'LTER_EUROPE', 'LTER Europe Member Node', + 'urn:node:DRYAD', 'DRYAD', 'Dryad Digital Repository', + 'urn:node:CLOEBIRD', 'CLOEBIRD', 'Cornell Lab of Ornithology - eBird', + 'urn:node:EDACGSTORE', 'EDACGSTORE', 'EDAC Gstore Repository', + 'urn:node:IOE', 'IOE', 'Montana IoE Data Repository', + 'urn:node:US_MPC', 'US_MPC', 'Minnesota Population Center', + 'urn:node:EDORA', 'EDORA', 'Environmental Data for the Oak Ridge Area (EDORA)', + 'urn:node:RGD', 'RGD', 'Regional and Global biogeochemical dynamics Data (RGD)', + 'urn:node:GLEON', 'GLEON', 'GLEON Data Repository', + 'urn:node:IARC', 'IARC', 'IARC Data Archive', + 'urn:node:NMEPSCOR', 'NMEPSCOR', 'NM EPSCoR Tier 4 Node', + 'urn:node:TERN', 'TERN', 'TERN Australia', + 'urn:node:NKN', 'NKN', 'Northwest Knowledge Network', + 'urn:node:USGS_SDC', 'USGS_SDC', 'USGS Science Data Catalog', + 'urn:node:NRDC', 'NRDC', 'NRDC DataONE member node', + 'urn:node:NCEI', 'NCEI', 'NOAA NCEI Environmental Data Archive', + 'urn:node:PPBIO', 'PPBIO', 'PPBio', + 'urn:node:NEON', 'NEON', 'NEON Member Node', + 'urn:node:TDAR', 'TDAR', 'The Digital Archaeological Record', + 'urn:node:ARCTIC', 'ARCTIC', 'Arctic Data Center', + 'urn:node:BCODMO', 'BCODMO', 'Biological and Chemical Oceanography Data Management Office (BCO-DMO) ', + 'urn:node:GRIIDC', 'GRIIDC', 'Gulf of Mexico Research Initiative Information and Data Cooperative (GRIIDC)', + 'urn:node:R2R', 'R2R', 'Rolling Deck to Repository (R2R)', + 'urn:node:EDI', 'EDI', 'Environmental Data Initiative', + 'urn:node:UIC', 'UIC', 'A Member Node for University of Illinois at Chicago.', + 'urn:node:RW', 'RW', 'Research Workspace', + 'urn:node:FEMC', 'FEMC', 'Forest Ecosystem Monitoring Cooperative Member Node', + 'urn:node:OTS_NDC', 'OTS_NDC', 'Organization for Tropical Studies - Neotropical Data Center', + 'urn:node:PANGAEA', 'PANGAEA', 'PANGAEA', + 'urn:node:ESS_DIVE', 'ESS_DIVE', 'ESS-DIVE: Deep Insight for Earth Science Data', + 'urn:node:CAS_CERN', 'CAS_CERN', 'Chinese Ecosystem Research Network (CERN)', + 'urn:node:FIGSHARE_CARY', 'FIGSHARE_CARY', 'Cary Institute of Ecosystem Studies (powered by Figshare)', + 'urn:node:IEDA_EARTHCHEM', 'IEDA_EARTHCHEM', 'IEDA EARTHCHEM', + 'urn:node:IEDA_USAP', 'IEDA_USAP', 'IEDA USAP', + 'urn:node:IEDA_MGDL', 'IEDA_MGDL', 'IEDA MGDL', + 'urn:node:METAGRIL', 'METAGRIL', 'metaGRIL', + 'urn:node:ARM', 'ARM', 'ARM - Atmospheric Radiation Measurement Research Facility' + ], + /** * A list of unsupported User-Agent regular expressions for browsers that will not work well with MetacatUI. * A warning message will display on the page for anyone using one of these browsers. @@ -449,7 +514,7 @@

                                                                                                Home

                                                                                                Classes

                                                                                                • diff --git a/docs/docs/themes_dataone_routers_router.js.html b/docs/docs/themes_dataone_routers_router.js.html index f7ab908a4..61338d701 100644 --- a/docs/docs/themes_dataone_routers_router.js.html +++ b/docs/docs/themes_dataone_routers_router.js.html @@ -499,7 +499,7 @@

                                                                                                  Home

                                                                                                  Classes

                                                                                                  • diff --git a/docs/docs/themes_hosted-repository_routers_router.js.html b/docs/docs/themes_hosted-repository_routers_router.js.html new file mode 100644 index 000000000..7190c1881 --- /dev/null +++ b/docs/docs/themes_hosted-repository_routers_router.js.html @@ -0,0 +1,82 @@ + + + + + MetacatUI Dev Docs: Source: themes/hosted-repository/routers/router.js + + + + + + + + + + + +
                                                                                                    + +

                                                                                                    Source: themes/hosted-repository/routers/router.js

                                                                                                    + + + + + + +
                                                                                                    +
                                                                                                    +
                                                                                                    /*global Backbone */
                                                                                                    +'use strict';
                                                                                                    +
                                                                                                    +define(['jquery', 'underscore', 'backbone', 'routers/BaseRouter'],
                                                                                                    +function ($, _, Backbone, BaseRouter) {
                                                                                                    +
                                                                                                    +    // MetacatUI Router
                                                                                                    +    // ----------------
                                                                                                    +    var UIRouter = BaseRouter.extend({
                                                                                                    +        routes: _.extend(BaseRouter.prototype.routes, {
                                                                                                    +            "support(/:anchorId)(/)": "renderSupport",
                                                                                                    +        }),
                                                                                                    +        
                                                                                                    +        /**
                                                                                                    +         * Render the support page
                                                                                                    +         * @return {object} the rendered support page
                                                                                                    +         */
                                                                                                    +        renderSupport: function(anchorId) {
                                                                                                    +            this.routeHistory.push("support");
                                                                                                    +            MetacatUI.appModel.set('anchorId', anchorId);
                                                                                                    +            var options = {
                                                                                                    +                    pageName: "support",
                                                                                                    +                    anchorId: anchorId
                                                                                                    +                }
                                                                                                    +
                                                                                                    +            this.renderText(options);
                                                                                                    +        }
                                                                                                    +    });
                                                                                                    +    return UIRouter;
                                                                                                    +});
                                                                                                    +
                                                                                                    +
                                                                                                    +
                                                                                                    + + + + +
                                                                                                    + + + +
                                                                                                    + +
                                                                                                    + Documentation generated by JSDoc 3.6.3 on Thu May 14 2020 14:56:28 GMT-0500 (Central Daylight Time) +
                                                                                                    + + + + + diff --git a/docs/docs/themes_knb_models_AppModel.js.html b/docs/docs/themes_knb_models_AppModel.js.html index bbe94847a..a6e160e72 100644 --- a/docs/docs/themes_knb_models_AppModel.js.html +++ b/docs/docs/themes_knb_models_AppModel.js.html @@ -38,7 +38,8 @@

                                                                                                    Source: themes/knb/models/AppModel.js

                                                                                                    // This model contains all of the attributes for the Application defaults: { headerType: 'default', - title: MetacatUI.themeTitle || "Metacat Data Catalog", + title: "KNB", + repositoryName: "KNB", emailContact: "knb-help@nceas.ucsb.edu", @@ -116,8 +117,8 @@

                                                                                                    Source: themes/knb/models/AppModel.js

                                                                                                    label: "GCMD", thesaurus: "NASA Global Change Master Directory (GCMD)" }], - - baseUrl: "https://knb.ecoinformatics.org",//window.location.origin || (window.location.protocol + "//" + window.location.host), + + baseUrl: window.location.origin || (window.location.protocol + "//" + window.location.host), // the most likely item to change is the Metacat deployment context context: '/metacat', @@ -453,6 +454,70 @@

                                                                                                    Source: themes/knb/models/AppModel.js

                                                                                                    associatedParties: false }, + /** + * The list of labels that should be blacklisted while + * @type {string[]} + */ + portalLabelBlacklist: [ + 'urn:node:CN', 'CN', 'cn', + 'urn:node:CNUNM1', 'CNUNM1', 'cn-unm-1', + 'urn:node:CNUCSB1', 'CNUCSB1', 'cn-ucsb-1', + 'urn:node:CNORC1', 'CNORC1', 'cn-orc-1', + 'urn:node:KNB', 'KNB', 'KNB Data Repository', + 'urn:node:ESA', 'ESA', 'ESA Data Registry', + 'urn:node:SANPARKS', 'SANPARKS', 'SANParks Data Repository', + 'urn:node:ORNLDAAC', 'ORNLDAAC', 'ORNL DAAC', + 'urn:node:LTER', 'LTER', 'U.S. LTER Network', + 'urn:node:CDL', 'CDL', 'UC3 Merritt', + 'urn:node:PISCO', 'PISCO', 'PISCO MN', + 'urn:node:ONEShare', 'ONEShare', 'ONEShare DataONE Member Node', + 'urn:node:mnORC1', 'mnORC1', 'DataONE ORC Dedicated Replica Server', + 'urn:node:mnUNM1', 'mnUNM1', 'DataONE UNM Dedicated Replica Server', + 'urn:node:mnUCSB1', 'mnUCSB1', 'DataONE UCSB Dedicated Replica Server', + 'urn:node:TFRI', 'TFRI', 'TFRI Data Catalog', + 'urn:node:USANPN', 'USANPN', 'USA National Phenology Network', + 'urn:node:SEAD', 'SEAD', 'SEAD Virtual Archive', + 'urn:node:GOA', 'GOA', 'Gulf of Alaska Data Portal', + 'urn:node:KUBI', 'KUBI', 'University of Kansas - Biodiversity Institute', + 'urn:node:LTER_EUROPE', 'LTER_EUROPE', 'LTER Europe Member Node', + 'urn:node:DRYAD', 'DRYAD', 'Dryad Digital Repository', + 'urn:node:CLOEBIRD', 'CLOEBIRD', 'Cornell Lab of Ornithology - eBird', + 'urn:node:EDACGSTORE', 'EDACGSTORE', 'EDAC Gstore Repository', + 'urn:node:IOE', 'IOE', 'Montana IoE Data Repository', + 'urn:node:US_MPC', 'US_MPC', 'Minnesota Population Center', + 'urn:node:EDORA', 'EDORA', 'Environmental Data for the Oak Ridge Area (EDORA)', + 'urn:node:RGD', 'RGD', 'Regional and Global biogeochemical dynamics Data (RGD)', + 'urn:node:GLEON', 'GLEON', 'GLEON Data Repository', + 'urn:node:IARC', 'IARC', 'IARC Data Archive', + 'urn:node:NMEPSCOR', 'NMEPSCOR', 'NM EPSCoR Tier 4 Node', + 'urn:node:TERN', 'TERN', 'TERN Australia', + 'urn:node:NKN', 'NKN', 'Northwest Knowledge Network', + 'urn:node:USGS_SDC', 'USGS_SDC', 'USGS Science Data Catalog', + 'urn:node:NRDC', 'NRDC', 'NRDC DataONE member node', + 'urn:node:NCEI', 'NCEI', 'NOAA NCEI Environmental Data Archive', + 'urn:node:PPBIO', 'PPBIO', 'PPBio', + 'urn:node:NEON', 'NEON', 'NEON Member Node', + 'urn:node:TDAR', 'TDAR', 'The Digital Archaeological Record', + 'urn:node:ARCTIC', 'ARCTIC', 'Arctic Data Center', + 'urn:node:BCODMO', 'BCODMO', 'Biological and Chemical Oceanography Data Management Office (BCO-DMO) ', + 'urn:node:GRIIDC', 'GRIIDC', 'Gulf of Mexico Research Initiative Information and Data Cooperative (GRIIDC)', + 'urn:node:R2R', 'R2R', 'Rolling Deck to Repository (R2R)', + 'urn:node:EDI', 'EDI', 'Environmental Data Initiative', + 'urn:node:UIC', 'UIC', 'A Member Node for University of Illinois at Chicago.', + 'urn:node:RW', 'RW', 'Research Workspace', + 'urn:node:FEMC', 'FEMC', 'Forest Ecosystem Monitoring Cooperative Member Node', + 'urn:node:OTS_NDC', 'OTS_NDC', 'Organization for Tropical Studies - Neotropical Data Center', + 'urn:node:PANGAEA', 'PANGAEA', 'PANGAEA', + 'urn:node:ESS_DIVE', 'ESS_DIVE', 'ESS-DIVE: Deep Insight for Earth Science Data', + 'urn:node:CAS_CERN', 'CAS_CERN', 'Chinese Ecosystem Research Network (CERN)', + 'urn:node:FIGSHARE_CARY', 'FIGSHARE_CARY', 'Cary Institute of Ecosystem Studies (powered by Figshare)', + 'urn:node:IEDA_EARTHCHEM', 'IEDA_EARTHCHEM', 'IEDA EARTHCHEM', + 'urn:node:IEDA_USAP', 'IEDA_USAP', 'IEDA USAP', + 'urn:node:IEDA_MGDL', 'IEDA_MGDL', 'IEDA MGDL', + 'urn:node:METAGRIL', 'METAGRIL', 'metaGRIL', + 'urn:node:ARM', 'ARM', 'ARM - Atmospheric Radiation Measurement Research Facility' + ], + /** * The default FilterGroups to use in the data catalog search (DataCatalogViewWithFilters) * This is an array of literal objects that will be converted into FilterGroup models @@ -670,7 +735,7 @@

                                                                                                    Home

                                                                                                    Classes

                                                                                                    • diff --git a/docs/docs/themes_knb_routers_router.js.html b/docs/docs/themes_knb_routers_router.js.html index c02f4b5a8..e3bc75a00 100644 --- a/docs/docs/themes_knb_routers_router.js.html +++ b/docs/docs/themes_knb_routers_router.js.html @@ -130,7 +130,7 @@

                                                                                                      Home

                                                                                                      Classes

                                                                                                      • diff --git a/docs/docs/themes_opc_routers_router.js.html b/docs/docs/themes_opc_routers_router.js.html index 510c50c6f..d1005e6f1 100644 --- a/docs/docs/themes_opc_routers_router.js.html +++ b/docs/docs/themes_opc_routers_router.js.html @@ -73,7 +73,7 @@

                                                                                                        Home

                                                                                                        Classes

                                                                                                        • diff --git a/docs/docs/themes_opc_views_metadata_EML211View.js.html b/docs/docs/themes_opc_views_metadata_EML211View.js.html index d956b0e27..944378269 100644 --- a/docs/docs/themes_opc_views_metadata_EML211View.js.html +++ b/docs/docs/themes_opc_views_metadata_EML211View.js.html @@ -281,7 +281,7 @@

                                                                                                          Home

                                                                                                          Classes

                                                                                                          • diff --git a/docs/docs/views_AccessPolicyView.js.html b/docs/docs/views_AccessPolicyView.js.html index d4ba90135..c21f9be4f 100644 --- a/docs/docs/views_AccessPolicyView.js.html +++ b/docs/docs/views_AccessPolicyView.js.html @@ -681,7 +681,7 @@

                                                                                                            Home

                                                                                                            Classes

                                                                                                            • diff --git a/docs/docs/views_AccessRuleView.js.html b/docs/docs/views_AccessRuleView.js.html index 1b134bd6c..7490b2f70 100644 --- a/docs/docs/views_AccessRuleView.js.html +++ b/docs/docs/views_AccessRuleView.js.html @@ -521,7 +521,7 @@

                                                                                                              Home

                                                                                                              Classes

                                                                                                              • diff --git a/docs/docs/views_AnnotationView.js.html b/docs/docs/views_AnnotationView.js.html index dcd991868..37b41f667 100644 --- a/docs/docs/views_AnnotationView.js.html +++ b/docs/docs/views_AnnotationView.js.html @@ -341,7 +341,7 @@

                                                                                                                Home

                                                                                                                Classes

                                                                                                                • diff --git a/docs/docs/views_AppView.js.html b/docs/docs/views_AppView.js.html index b0d3faf48..a72d0da73 100644 --- a/docs/docs/views_AppView.js.html +++ b/docs/docs/views_AppView.js.html @@ -619,7 +619,7 @@

                                                                                                                  Home

                                                                                                                  Classes

                                                                                                                  • diff --git a/docs/docs/views_ColorPaletteView.js.html b/docs/docs/views_ColorPaletteView.js.html index 56670d5b4..fc48e8b79 100644 --- a/docs/docs/views_ColorPaletteView.js.html +++ b/docs/docs/views_ColorPaletteView.js.html @@ -97,7 +97,7 @@

                                                                                                                    Home

                                                                                                                    Classes

                                                                                                                    • diff --git a/docs/docs/views_DataCatalogView.js.html b/docs/docs/views_DataCatalogView.js.html index ca1b4094c..ba3e3fd27 100644 --- a/docs/docs/views_DataCatalogView.js.html +++ b/docs/docs/views_DataCatalogView.js.html @@ -3271,7 +3271,7 @@

                                                                                                                      Home

                                                                                                                      Classes

                                                                                                                      • diff --git a/docs/docs/views_DataCatalogViewWithFilters.js.html b/docs/docs/views_DataCatalogViewWithFilters.js.html index ceb774c77..9dc26fc7d 100644 --- a/docs/docs/views_DataCatalogViewWithFilters.js.html +++ b/docs/docs/views_DataCatalogViewWithFilters.js.html @@ -724,7 +724,7 @@

                                                                                                                        Home

                                                                                                                        Classes

                                                                                                                        • diff --git a/docs/docs/views_DataItemView.js.html b/docs/docs/views_DataItemView.js.html index e7ce155b1..9aa903431 100644 --- a/docs/docs/views_DataItemView.js.html +++ b/docs/docs/views_DataItemView.js.html @@ -905,7 +905,7 @@

                                                                                                                          Home

                                                                                                                          Classes

                                                                                                                          • diff --git a/docs/docs/views_DraftsView.js.html b/docs/docs/views_DraftsView.js.html index ae068e713..358ed08c1 100644 --- a/docs/docs/views_DraftsView.js.html +++ b/docs/docs/views_DraftsView.js.html @@ -243,7 +243,7 @@

                                                                                                                            Home

                                                                                                                            Classes

                                                                                                                            • diff --git a/docs/docs/views_EditCollectionView.js.html b/docs/docs/views_EditCollectionView.js.html index 2bca35df6..65532d89a 100644 --- a/docs/docs/views_EditCollectionView.js.html +++ b/docs/docs/views_EditCollectionView.js.html @@ -275,7 +275,7 @@

                                                                                                                              Home

                                                                                                                              Classes

                                                                                                                              • diff --git a/docs/docs/views_EditorView.js.html b/docs/docs/views_EditorView.js.html index 85fec0bbb..bf5ba5e7c 100644 --- a/docs/docs/views_EditorView.js.html +++ b/docs/docs/views_EditorView.js.html @@ -90,7 +90,10 @@

                                                                                                                                Source: views/EditorView.js

                                                                                                                                */ events: { "click #save-editor" : "save", - "click .access-policy-control" : "showAccessPolicyModal" + "click .access-policy-control" : "showAccessPolicyModal", + "keypress input" : "showControls", + "keypress textarea" : "showControls", + "keypress [contenteditable]" : "showControls" }, /** @@ -588,7 +591,7 @@

                                                                                                                                Home

                                                                                                                                Classes

                                                                                                                                • diff --git a/docs/docs/views_ImageUploaderView.js.html b/docs/docs/views_ImageUploaderView.js.html index e286df630..c830af783 100644 --- a/docs/docs/views_ImageUploaderView.js.html +++ b/docs/docs/views_ImageUploaderView.js.html @@ -605,7 +605,7 @@

                                                                                                                                  Home

                                                                                                                                  Classes

                                                                                                                                  • diff --git a/docs/docs/views_MetadataView.js.html b/docs/docs/views_MetadataView.js.html index f23142059..02357a5b5 100644 --- a/docs/docs/views_MetadataView.js.html +++ b/docs/docs/views_MetadataView.js.html @@ -2947,7 +2947,7 @@

                                                                                                                                    Home

                                                                                                                                    Classes

                                                                                                                                    • diff --git a/docs/docs/views_NavbarView.js.html b/docs/docs/views_NavbarView.js.html index e4abacc39..3c84e4e45 100644 --- a/docs/docs/views_NavbarView.js.html +++ b/docs/docs/views_NavbarView.js.html @@ -172,7 +172,7 @@

                                                                                                                                      Source: views/NavbarView.js

                                                                                                                                      }, showNav: function(){ - this.$("nav").slideToggle(); + this.$("#main-nav").slideToggle(); this.$("#nav-trigger .icon").toggle(); }, @@ -224,7 +224,7 @@

                                                                                                                                      Home

                                                                                                                                      Classes

                                                                                                                                      • diff --git a/docs/docs/views_StatsView.js.html b/docs/docs/views_StatsView.js.html index 19f50a972..c9d35752e 100644 --- a/docs/docs/views_StatsView.js.html +++ b/docs/docs/views_StatsView.js.html @@ -931,7 +931,7 @@

                                                                                                                                        Home

                                                                                                                                        Classes

                                                                                                                                        • diff --git a/docs/docs/views_TOCView.js.html b/docs/docs/views_TOCView.js.html index eba4b6e85..c71fb1e60 100644 --- a/docs/docs/views_TOCView.js.html +++ b/docs/docs/views_TOCView.js.html @@ -459,7 +459,7 @@

                                                                                                                                          Home

                                                                                                                                          Classes

                                                                                                                                          • diff --git a/docs/docs/views_UserView.js.html b/docs/docs/views_UserView.js.html index 7f82f0cb1..4e22c57b2 100644 --- a/docs/docs/views_UserView.js.html +++ b/docs/docs/views_UserView.js.html @@ -1378,7 +1378,7 @@

                                                                                                                                            Home

                                                                                                                                            Classes

                                                                                                                                            • diff --git a/docs/docs/views_filters_FilterGroupsView.js.html b/docs/docs/views_filters_FilterGroupsView.js.html index 918e1142b..7908eab11 100644 --- a/docs/docs/views_filters_FilterGroupsView.js.html +++ b/docs/docs/views_filters_FilterGroupsView.js.html @@ -862,7 +862,7 @@

                                                                                                                                              Home

                                                                                                                                              Classes

                                                                                                                                              • diff --git a/docs/docs/views_metadata_EML211EditorView.js.html b/docs/docs/views_metadata_EML211EditorView.js.html index 89fd0ef43..426b61f57 100644 --- a/docs/docs/views_metadata_EML211EditorView.js.html +++ b/docs/docs/views_metadata_EML211EditorView.js.html @@ -1139,7 +1139,7 @@

                                                                                                                                                Home

                                                                                                                                                Classes

                                                                                                                                                • diff --git a/docs/docs/views_metadata_EML211View.js.html b/docs/docs/views_metadata_EML211View.js.html index b13cddf48..99dbbb831 100644 --- a/docs/docs/views_metadata_EML211View.js.html +++ b/docs/docs/views_metadata_EML211View.js.html @@ -2411,7 +2411,7 @@

                                                                                                                                                  Home

                                                                                                                                                  Classes

                                                                                                                                                  • diff --git a/docs/docs/views_metadata_EMLEntityView.js.html b/docs/docs/views_metadata_EMLEntityView.js.html index a96191790..109ebb4a9 100644 --- a/docs/docs/views_metadata_EMLEntityView.js.html +++ b/docs/docs/views_metadata_EMLEntityView.js.html @@ -613,7 +613,7 @@

                                                                                                                                                    Home

                                                                                                                                                    Classes

                                                                                                                                                    • diff --git a/docs/docs/views_metadata_EMLGeoCoverageView.js.html b/docs/docs/views_metadata_EMLGeoCoverageView.js.html index b711fbb15..9eceec010 100644 --- a/docs/docs/views_metadata_EMLGeoCoverageView.js.html +++ b/docs/docs/views_metadata_EMLGeoCoverageView.js.html @@ -294,7 +294,7 @@

                                                                                                                                                      Home

                                                                                                                                                      Classes

                                                                                                                                                      • diff --git a/docs/docs/views_metadata_EMLPartyView.js.html b/docs/docs/views_metadata_EMLPartyView.js.html index effd447d2..6c5ee5887 100644 --- a/docs/docs/views_metadata_EMLPartyView.js.html +++ b/docs/docs/views_metadata_EMLPartyView.js.html @@ -488,7 +488,7 @@

                                                                                                                                                        Home

                                                                                                                                                        Classes

                                                                                                                                                        • diff --git a/docs/docs/views_portals_PortalDataView.js.html b/docs/docs/views_portals_PortalDataView.js.html index 305f82fc4..7ca6a1ab8 100644 --- a/docs/docs/views_portals_PortalDataView.js.html +++ b/docs/docs/views_portals_PortalDataView.js.html @@ -140,7 +140,7 @@

                                                                                                                                                          Home

                                                                                                                                                          Classes

                                                                                                                                                          • diff --git a/docs/docs/views_portals_PortalListView.js.html b/docs/docs/views_portals_PortalListView.js.html index 4eba207a0..9b974e1c6 100644 --- a/docs/docs/views_portals_PortalListView.js.html +++ b/docs/docs/views_portals_PortalListView.js.html @@ -338,7 +338,7 @@

                                                                                                                                                            Home

                                                                                                                                                            Classes

                                                                                                                                                            • diff --git a/docs/docs/views_portals_PortalMembersView.js.html b/docs/docs/views_portals_PortalMembersView.js.html index b8302476f..55db2aa3e 100644 --- a/docs/docs/views_portals_PortalMembersView.js.html +++ b/docs/docs/views_portals_PortalMembersView.js.html @@ -179,7 +179,7 @@

                                                                                                                                                              Home

                                                                                                                                                              Classes

                                                                                                                                                              • diff --git a/docs/docs/views_portals_PortalMetricsView.js.html b/docs/docs/views_portals_PortalMetricsView.js.html index 0ddba36f8..6a6f7b556 100644 --- a/docs/docs/views_portals_PortalMetricsView.js.html +++ b/docs/docs/views_portals_PortalMetricsView.js.html @@ -220,7 +220,7 @@

                                                                                                                                                                Home

                                                                                                                                                                Classes

                                                                                                                                                                • diff --git a/docs/docs/views_portals_PortalSectionView.js.html b/docs/docs/views_portals_PortalSectionView.js.html index b759fc031..878d08a30 100644 --- a/docs/docs/views_portals_PortalSectionView.js.html +++ b/docs/docs/views_portals_PortalSectionView.js.html @@ -293,7 +293,7 @@

                                                                                                                                                                  Home

                                                                                                                                                                  Classes

                                                                                                                                                                  • diff --git a/docs/docs/views_portals_PortalView.js.html b/docs/docs/views_portals_PortalView.js.html index df4109860..a7e2e3c48 100644 --- a/docs/docs/views_portals_PortalView.js.html +++ b/docs/docs/views_portals_PortalView.js.html @@ -761,7 +761,7 @@

                                                                                                                                                                    Home

                                                                                                                                                                    Classes

                                                                                                                                                                    • diff --git a/docs/docs/views_portals_editor_PortEditorDataView.js.html b/docs/docs/views_portals_editor_PortEditorDataView.js.html index 89a1483bf..a424ce1a0 100644 --- a/docs/docs/views_portals_editor_PortEditorDataView.js.html +++ b/docs/docs/views_portals_editor_PortEditorDataView.js.html @@ -166,7 +166,7 @@

                                                                                                                                                                      Home

                                                                                                                                                                      Classes

                                                                                                                                                                      • diff --git a/docs/docs/views_portals_editor_PortEditorImageView.js.html b/docs/docs/views_portals_editor_PortEditorImageView.js.html index 89b52db6b..0fa17047d 100644 --- a/docs/docs/views_portals_editor_PortEditorImageView.js.html +++ b/docs/docs/views_portals_editor_PortEditorImageView.js.html @@ -455,7 +455,7 @@

                                                                                                                                                                        Home

                                                                                                                                                                        Classes

                                                                                                                                                                        • diff --git a/docs/docs/views_portals_editor_PortEditorLogosView.js.html b/docs/docs/views_portals_editor_PortEditorLogosView.js.html index 768d6f965..8135c91b5 100644 --- a/docs/docs/views_portals_editor_PortEditorLogosView.js.html +++ b/docs/docs/views_portals_editor_PortEditorLogosView.js.html @@ -263,7 +263,7 @@

                                                                                                                                                                          Home

                                                                                                                                                                          Classes

                                                                                                                                                                          • diff --git a/docs/docs/views_portals_editor_PortEditorMdSectionView.js.html b/docs/docs/views_portals_editor_PortEditorMdSectionView.js.html index 17d257967..5c5a3507c 100644 --- a/docs/docs/views_portals_editor_PortEditorMdSectionView.js.html +++ b/docs/docs/views_portals_editor_PortEditorMdSectionView.js.html @@ -298,7 +298,7 @@

                                                                                                                                                                            Home

                                                                                                                                                                            Classes

                                                                                                                                                                            • diff --git a/docs/docs/views_portals_editor_PortEditorSectionView.js.html b/docs/docs/views_portals_editor_PortEditorSectionView.js.html index 8385b7e0d..b56c56d21 100644 --- a/docs/docs/views_portals_editor_PortEditorSectionView.js.html +++ b/docs/docs/views_portals_editor_PortEditorSectionView.js.html @@ -363,7 +363,7 @@

                                                                                                                                                                              Home

                                                                                                                                                                              Classes

                                                                                                                                                                              • diff --git a/docs/docs/views_portals_editor_PortEditorSectionsView.js.html b/docs/docs/views_portals_editor_PortEditorSectionsView.js.html index 4a6531100..15fb5b464 100644 --- a/docs/docs/views_portals_editor_PortEditorSectionsView.js.html +++ b/docs/docs/views_portals_editor_PortEditorSectionsView.js.html @@ -1450,7 +1450,7 @@

                                                                                                                                                                                Home

                                                                                                                                                                                Classes

                                                                                                                                                                                • diff --git a/docs/docs/views_portals_editor_PortEditorSettingsView.js.html b/docs/docs/views_portals_editor_PortEditorSettingsView.js.html index d6e326f7e..c945b6c29 100644 --- a/docs/docs/views_portals_editor_PortEditorSettingsView.js.html +++ b/docs/docs/views_portals_editor_PortEditorSettingsView.js.html @@ -278,14 +278,14 @@

                                                                                                                                                                                  Source: views/portals/editor/PortEditorSettingsView.js</i> "+ "Checking if URL is available" ); + + // Check label availability + this.model.checkLabelAvailability(value); } catch(error){ console.log("Error validating the label, error message: " + error); @@ -386,7 +386,7 @@

                                                                                                                                                                                  Home

                                                                                                                                                                                  Classes

                                                                                                                                                                                  • diff --git a/docs/docs/views_portals_editor_PortalEditorView.js.html b/docs/docs/views_portals_editor_PortalEditorView.js.html index 4ffccdd8c..c0dc96501 100644 --- a/docs/docs/views_portals_editor_PortalEditorView.js.html +++ b/docs/docs/views_portals_editor_PortalEditorView.js.html @@ -821,7 +821,7 @@

                                                                                                                                                                                    Home

                                                                                                                                                                                    Classes

                                                                                                                                                                                    • diff --git a/docs/index.md b/docs/index.md index cbfb39a91..f785acecf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,3 +1,31 @@ -A web interface for DataONE member repositories +# MetacatUI -[MetacatUI documentation for developers](/metacatui/docs) +MetacatUI is a web interface for Metacat data repositories. + +![Arctic Data Center Metadata View](https://raw.githubusercontent.com/NCEAS/metacatui/master/docs/screenshots/metacatui-arctic-1200w.png) + +## Documentation + +### Installation + +There are three separate installation instructions, depending on your use case: + +#### Installing MetacatUI for your Metacat repository +[See installation instructions](install) + +#### Installing MetacatUI locally for development with a Metacat repository +[See installation instructions](install/local.html) + +#### Installing MetacatUI locally to use with a remote DataONE Coordinating Node +If you want to use MetacatUI to query and browse the contents of a remote DataONE Coordinating Node (as opposed to a Metacat repository), follow the [installation instructions for the `dataone` theme](install/use-with-cn.html). + +### For developers +- [MetacatUI Javascript documentation for developers](/metacatui/docs/index.html) + +- [How to create a custom theme](configuration/index.html) + +#### Want to contribute to MetacatUI? + - Join us on [Slack](https://slack.dataone.org/) + - Email us at metacat-dev@ecoinformatics.org + - [Create a MetacatUI Github issue](https://github.com/NCEAS/metacatui/issues/new/choose) + - Read our [Contributing guidelines](https://github.com/NCEAS/metacatui/blob/master/CONTRIBUTING.md) diff --git a/docs/install/apache.md b/docs/install/apache.md new file mode 100644 index 000000000..998fc12f8 --- /dev/null +++ b/docs/install/apache.md @@ -0,0 +1,146 @@ +# Configuring Apache for MetacatUI + +There are two Apache configurations needed for MetacatUI to work properly. +1. Configure Apache to serve `index.html` instead of a 404 for the MetacatUI directory +2. Allow encoded slashes in MetacatUI paths + +### Configure Apache to serve `index.html` instead of a 404 for the MetacatUI directory + +**Why do I need this?** + +MetacatUI is a single-page Javascript application which uses a single `index.html` file to +initialize the MetacatUI app. The app checks the path that the user has navigated to (e.g. `/data/page/2`), and +renders the corresponding view. Then MetacatUI listens to each link click in the app and renders the next view for that link. + +This means there is no server-side application or files that are serving up HTML responses for each +MetacatUI path. + +For this all to work, you need to tell your web server to serve the `index.html` +MetacatUI page for every MetacatUI path. Otherwise, your server will return a 404 error. + +#### Apache v2.2.16 and later + +Add the `FallbackResource` Apache directive: + + ``` + ... + # Serve index.html instead of a 404 error in the MetacatUI directory + + FallbackResource /metacatui/index.html + + ... + ``` + +#### Apache v2.2.15 and earlier + +Add a `mod_rewrite` Apache directive for the MetacatUI index.html file: + + ``` + + ... + ... + + + RewriteEngine On + RewriteBase / + RewriteRule ^index\.html$ - [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule . /index.html [L] + + + ``` + +### Allow encoded slashes in MetacatUI paths + +Add the following to your Apache configuration file: + + ``` + ... + # Allow encoded slashes in URLs so encoded identifiers can be sent in MetacatUI URLs + AllowEncodedSlashes On + ... + ``` + +**Why do I need this?** +`/` characters are commonly used in identifiers for data and metadata objects in Metacat +repositories. These identifiers are used in MetacatUI paths and are usually URL-encoded. + + +## Configuring Apache locally on Mac OS X, for MetacatUI development + +Note: The following instructions are general guidelines on how to set up a local Apache server so +you can develop MetacatUI features/bugs on your local machine. These instructions are *not* +updated regularly, since we recommend you use the [NodeJS Express server instead](https://github.com/NCEAS/metacatui/blob/master/server.js). + +#### Step 1. Create a directory for your MetacatUI +- Choose a location from which to serve *all* your Apache website files. A good location is `/Users/{username}/Sites` +- Make a subdirectory in `~/Sites` specifically for MetacatUI. The default directory name for MetacatUI is `metacatui`. + + ``` + mkdir ~/Sites/metacatui + ``` + +#### Step 2. Tell Apache to use the directory from Step 1 +- Configure Apache to serve files from your `Sites` directory by opening `/etc/apache2/httpd.conf` and changing the `DocumentRoot` pathname. Example: + + ``` + DocumentRoot "/Users/walker/Sites" + + ``` + +#### Step 3. Configure a VirtualHost in Apache for MetacatUI +- First, create a backup of the default httpd-vhosts.conf file: + + ``` + sudo cp /etc/apache2/extra/httpd-vhosts.conf /etc/apache2/extra/httpd-vhosts.conf.bak + ``` + +- Clear out the example VirtualHost configuration if it is there, and add a VirtualHost for the `~/Sites/metacatui` directory (make sure `walker` is replaced with your username): + + ``` + + DocumentRoot "/Users/walker/Sites" + ServerName metacatui.localhost + ErrorLog "/private/var/log/apache2/metacatui-error_log" + CustomLog "/private/var/log/apache2/metacatui-access_log" common + + # Allow encoded slashes in URLs so encoded identifiers can be sent in MetacatUI URLs + AllowEncodedSlashes On + + + FallbackResource /metacatui/index.html + + + ``` + +- Create a host name for `metacatui.locahost`. First, open `/etc/hosts`: + + ``` + sudo vi /etc/hosts + ``` + +- Add `metacatui.localhost` to the bottom of the file. **Be careful not to change any other part of this file!**: + + ``` + # metacatui local site + 127.0.0.1 metacatui.localhost + ``` + +- Save your `/etc/hosts` changes + +#### Step 4. Move MetacatUI files to Apache +- Move the MetacatUI application code to the directory we chose in Step 2. + + ``` + cp -rf metacatui-2.0.0/src/* /Users/walker/Sites/metacatui/ + ``` + +#### Step 5. Start Apache +- Start (or restart) Apache: + + ``` + sudo apachectl start + ``` + +- Open a web browser and navigate to `metacatui.localhost/metacatui` and your MetacatUI application should be ready to go! diff --git a/docs/install/index.md b/docs/install/index.md new file mode 100644 index 000000000..9b4e59013 --- /dev/null +++ b/docs/install/index.md @@ -0,0 +1,44 @@ +# Installing MetacatUI for your Metacat repository + +## Step 1. Download MetacatUI + +[Download the latest version of MetacatUI](https://github.com/NCEAS/metacatui/releases) and unzip it. + +Note: If you have a `metacatui.war` file from Metacat, then you can unpack that war file instead, since it is the +same as downloading MetacatUI from Github. + +## Step 2. Configure Apache for MetacatUI + +Follow the steps in the [Apache configuration instructions](apache). + +Then, move the MetacatUI files in the `src` directly to your Apache metacatui directory. Example: + + ```bash + cd metacatui-2.11.2 + mv -rf src/* /var/www/ + ``` + +## Step 3. Configure MetacatUI + +- Open `src/index.html` in a text editor and change the following values: + - Set `data-metacat-context` to match the Metacat directory name of the Metacat you will be using. + For example, if your Metacat is installed at https://your-site.com/metacat, your `data-metacat-context` would be set to `metacat`. (Most Metacat installations are in a `metacat` directory sice that is the default Metacat directory name). + - Make sure the path to the `loader.js` file is correct. By default, it is set to `/metacatui/loader.js`, but if you have your MetacatUI installed at root, (e.g. https://your-site.com), the path would be `/loader.js`. + - *Optional:* Set the `data-theme` to your chosen theme name, e.g. `default`, `knb`, `arctic`. + - *Optional:* Replace `YOUR-GOOGLE-MAPS-API-KEY` with your [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key) to enable the Google Map features of MetacatUI. If no API key is given, MetacatUI will still work, it just will not include the map features. + +- Open `src/loader.js` in a text editor and change the following values: + - Make sure the `MetacatUI.root` path is the correct path to your MetacatUI installation. By default, it is set to `/metacatui`, but if you have your MetacatUI installed at root, (e.g. https://your-site.com), the path would be `/`. + +- Open `src/js/models/AppModel.js` (or if using a theme other than the default theme, `src/js/themes/{theme name}/models/AppModel.js`) and change the following values: + - Set `baseUrl` to the URL where Metacat is deployed (e.g. `https://your-site.com`). This is concatinated with `data-metacat-context` earlier to create the full Metacat URL. + - Set `d1CNBaseUrl` to the base URL of the DataONE Coordinating Node environment that the Metacat repository is a part of. (e.g. the DataONE test member Metacat repository, `urn:node:mnTestKNB`, is in the `urn:node:cnStage2` Coordinating Node, so this attribute would be set to `https://cn-stage-2.test.dataone.org/`) + - *Optional:* The `AppModel` contains MetacatUI settings that control many MetacatUI features. You may want to configure some of these differently, according to your needs. See the [`AppModel` documentation](https://nceas.github.io/metacatui/docs/AppModel.html#defaults) for details. + +## Step 4. DONE! + +Go to the URL of your MetacatUI directory in your web browser, and you're done! + +## Troubleshooting + +See the installation [troubleshooting page](https://nceas.github.io/metacatui/install/troubleshooting.md). diff --git a/docs/install/local.md b/docs/install/local.md new file mode 100644 index 000000000..da4ad7309 --- /dev/null +++ b/docs/install/local.md @@ -0,0 +1,61 @@ +# Installing MetacatUI locally for development with a Metacat repository + +## Step 1. Clone MetacatUI + +- Clone the MetacatUI git repository: + + ``` + git clone https://github.com/NCEAS/metacatui.git + ``` + +## Step 2. Set up a local web server + +While developing on MetacatUI, it's necessary to run a web server of some sort in order for the application to work completely. +It will not work properly by simply opening up the HTML webpage(s) in your browser. +This is due to browser security issues that prevent certain Javascript functions from executing +on local files, but also because MetacatUI needs certain web server configurations for navigation +to work properly (more on that later). + +Following are instructions for two local web server options - Node & Express JS (recommended) or Apache. + +### Server Option 1. NodeJS & ExpressJS (recommended) + +*Requirements:* [NodeJS](https://nodejs.org/en/download/) and ExpressJS. Install Express via `npm install express` + +MetacatUI also comes with a simple script that runs a [node.js](https://nodejs.org) application called [Express.js](https://expressjs.com), which responds to HTTP requests. + +- To start the Express server, run [`server.js`](https://github.com/NCEAS/metacatui/blob/master/server.js): + + ```bash + node server.js + ``` + +### Server Option 2. Apache + +See the [Apache configuration instructions](https://github.com/NCEAS/metacatui/blob/master/docs/install/apache.md). +The Apache instructions are *not* updated regularly, since we recommend you use the NodeJS Express server instead. + +## Step 3. Configure MetacatUI + +- Open `src/index.html` in a text editor and change the following values: + - Set `data-metacat-context` to match the Metacat directory name of the Metacat you will be using. + For example, if your Metacat is installed at https://your-site.com/metacat, your `data-metacat-context` would be set to `metacat`. (Most Metacat installations are in a `metacat` directory sice that is the default Metacat directory name). + - Make sure the path to the `loader.js` file is correct. By default, it is set to `/metacatui/loader.js`, but if you have your MetacatUI installed at root, (e.g. http://localhost:3000/), the path would be `/loader.js`. + - *Optional:* Set the `data-theme` to your chosen theme name, e.g. `default`, `knb`, `arctic`. + - *Optional:* Replace `YOUR-GOOGLE-MAPS-API-KEY` with your [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key) to enable the Google Map features of MetacatUI. If no API key is given, MetacatUI will still work, it just will not include the map features. + +- Open `src/loader.js` in a text editor and change the following values: + - Make sure the `MetacatUI.root` path is the correct path to your MetacatUI installation. By default, it is set to `/metacatui`, but if you have your MetacatUI installed at root, (e.g. http://localhost:3000/), the path would be `/`. + +- Open `src/js/models/AppModel.js` (or if using a theme other than the default theme, `src/js/themes/{theme name}/models/AppModel.js`) and change the following values: + - Set `baseUrl` to the URL where Metacat is deployed (e.g. `https://your-site.com`). This is concatinated with `data-metacat-context` earlier to create the full Metacat URL. + - Set `d1CNBaseUrl` to the base URL of the DataONE Coordinating Node environment that the Metacat repository is a part of. (e.g. the DataONE test member Metacat repository, `urn:node:mnTestKNB`, is in the `urn:node:cnStage2` Coordinating Node, so this attribute would be set to `https://cn-stage-2.test.dataone.org/`) + - *Optional:* The `AppModel` contains MetacatUI settings that control many MetacatUI features. You may want to configure some of these differently, according to your needs. See the [`AppModel` documentation](https://nceas.github.io/metacatui/docs/AppModel.html#defaults) for details. + +## Step 4. DONE! + +Go to the installed web location in your web browser (e.g. if you used the Express server above, your install location is http://localhost:3000) and you're ready to use MetacatUI! + +## Troubleshooting + +See the installation [troubleshooting page](https://nceas.github.io/metacatui/install/troubleshooting.md). diff --git a/docs/install/troubleshooting.md b/docs/install/troubleshooting.md new file mode 100644 index 000000000..4487868c3 --- /dev/null +++ b/docs/install/troubleshooting.md @@ -0,0 +1,4 @@ +# Troubleshooting MetacatUI installation + +This is still being developed. Please [make a Github issue](https://github.com/NCEAS/metacatui/issues/new/choose) if you have issues with installing or using MetacatUI. +Our development team monitors these issues daily, so we will get back to you as timely as we can. diff --git a/docs/install/use-with-cn.md b/docs/install/use-with-cn.md new file mode 100644 index 000000000..70216e6fb --- /dev/null +++ b/docs/install/use-with-cn.md @@ -0,0 +1,33 @@ +### Installing MetacatUI locally to use with a remote DataONE Coordinating Node + +#### Step 1. Clone MetacatUI +- Clone the MetacatUI git repository: + +``` +git clone https://github.com/NCEAS/metacatui.git +``` + +#### Step 2. Configure MetacatUI + +- Open `src/index.html` in a text editor and change the following values: + - Set the `data-theme` to `dataone`. + - Remove the value of `data-metacat-context` since DataONE CN URLs do not have a metacat directory + - Make sure the path to the `loader.js` file is correct. By default, it is set to `/metacatui/loader.js`, but if you have your MetacatUI installed at root, (e.g. http://localhost:3000), the path would be `/loader.js`. + - *Optional:* Replace `YOUR-GOOGLE-MAPS-API-KEY` with your [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key) to enable the Google Map features of MetacatUI. If no API key is given, MetacatUI will still work, it just will not include the map features. + +- Open `src/js/themes/dataone/models/AppModel.js` and change the following values: + - Set `baseUrl` and `d1CNBaseUrl` to the URL where the remote DataONE CN is (e.g. `https://cn-stage.test.dataone.org`) + +- Open `src/loader.js` in a text editor and change the following values: + - Make sure the `MetacatUI.root` path is the correct path to your MetacatUI installation. By default, it is set to `/metacatui`, but if you have your MetacatUI installed at root, (e.g. http://localhost:3000), the path would be `/`. + +#### Step 3. Set up a local web server +- Follow Step 3 from the [MetacatUI README](index) to configure a web server on your local machine. + +#### Step 4. DONE! + +Go to the installed web location in your web browser (e.g. if you used the Express server above, your install location is http://localhost:3000) and you're ready to use MetacatUI! + +### Troubleshooting + +See the installation [troubleshooting page](troubleshooting.md). diff --git a/src/index.html b/src/index.html index e5615a68c..78fe15c85 100644 --- a/src/index.html +++ b/src/index.html @@ -11,7 +11,7 @@ -