Code Monkey home page Code Monkey logo

gsrsfrontend's Introduction

GsrsClient

Technology stack

Getting Started Overview

The full steps for a complete build are as follows, each will be given in more detail:

  1. Step 1 [Required] Obtain the required software dependencies (node, npm, and angular CLI, as mentioned above)
  2. Step 2 [Optional] Clear any previous build files, locks, and local dependencies (this step is not typically necessary, but it ensures constency if there were previous local builds)
  3. Step 3 [Optional] Prepare dojo dependencies and place in zip file lib/dojo-custom-jsdraw.zip (this dojo build is already prepared by default so this step is optional)
  4. Step 4 [Required] Prepare fundamental dependencies by doing npm install with package.dev.json file.
  5. Step 5 [Required] Prepare extended one-time build dependencies using specific build commands
  6. Step 6 [Required] Build, run or test the codebase as normal

If you are using a bash terminal, steps 2-5 can be accomplished by simply running:

bash build.sh

Step 1: Software Requirements

Make sure to have these installed in order to run the application:

  • Node
  • npm - usually included in the node installation
  • Angular CLI - on any command line run npm install -g @angular/cli@latest
  • The angular cli "ng" executable will be located in this folder:
    • C:\Users\<USER>\AppData\Roaming\npm\ (Windows 7)
    • ~/.npm-global/bin/ (linux)
    • Note: For best results, this path should be added to your windows/bash path as the command will be used a lot.
    • The angular CLI tool currently needs to have build-angular version <=0.803.25
    • To force this installation after an audit fix run npm i @angular-devkit/[email protected]

Step 2 [Optional]: Clear any Previous Build Files

This step isn't always necessary, but can be useful when attempting to force a de novo build. The following files should be removed from the root directory:

package-lock.json
node_modules
package.json

Step 3 [Optional]: Prepare Custom Dojo Dependency

This step isn't typically necessary. The purpose of this step is to prepare a slimmed down version of dojo for the jsdraw structure editor component, but the default build already has a form of this prepackaged. To perform a more custom dojo build, read the lib/README.md file and follow its instructions.

Step 4: Install Fundamental Dependencies

This step acquires the "base" dependencies needed to do further builds. The full real package.json file would have a cyclic dependency issue if we attempted to install using it directly, so we first build only the bare minimum pieces needed to build the other dependencies. This is accomplished by using a trimmed down version of the package.json file named package.dev.json. The following commands will make this happen:

bash:

cp package.dev.json package.json
npm install

windows CMD:

copy package.dev.json package.json
npm install

Step 5: Perform a One-Time Build of Dependencies

You'll have to run the following commands the first time you work on the application to make sure a few libraries are built and ready to be used by the application:

npm run build-file-select
npm run build-jsdraw-wrapper
npm run build-ketcher-wrapper

This MUST be done while the package.dev.json file is being used as package.json, as in step 4. Once this is done, you then replace the package.json file with package.real.json to complete the preperation. This can be accomplished with the following commands:

bash:

cp package.real.json package.json
npm install

windows CMD:

copy package.real.json package.json
npm install

Doing the install at this time may reveal some elements that suggest an audit fix. While this can be done, newer versions of the angular build tool are not compatible with the current build process, so the specific <=0.803.25 version must be forced. To both do a basic audit fix and force this version, you can run the following commands (either windows CMD or bash):

npm audit fix // this step not needed after angular upgrade

Step 6: Run Application for Specific Environment

  • Go the the package.json file and look at the scripts property to see what availabe commands exist
  • The commands to run during development begin with "start"
  • Identify the environment you want to run, open your favorite command line tool and run the script starting with "npm run"
  • So to run the public local environment, you would run npm run start:gsrs:local
  • After a few seconds of compiling the application, you're ready to view your application
  • Open your browser and navigate to http://localhost:4200

Troubleshooting

GSRSFrontend uses node-sass, which has varying compatibilities based on the version of node.js being used. See https://www.npmjs.com/package/node-sass to check which version is compatable with your node version. The value of node-sass being used can be changed in the root 'package.json' file, where the default value is set as "node-sass": "4.13.1",

Development tools

Code scaffolding

Run ng generate component component-name to generate a new component. You can also use ng generate directive|pipe|service|class|guard|interface|enum|module.

Running unit tests

Run ng test to execute the unit tests via Karma.

Running end-to-end tests

Run ng e2e to execute the end-to-end tests via Protractor.

Further help

To get more help on the Angular CLI use ng help or go check out the Angular CLI README.

gsrsfrontend's People

Contributors

alx652 avatar blueswordfish avatar dkatzel-ncats avatar epuzanov avatar jorgeso avatar kesnwokolo avatar narchana avatar nikoanderson avatar tylerperyea avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gsrsfrontend's Issues

Need more thorough escape strategy for special characters

facetsFromParams() {
if (this.facetString !== '') {
const categoryArray = this.facetString.split(',');
for (let i = 0; i < (categoryArray.length); i++) {
const categorySplit = categoryArray[i].split('*');
const category = categorySplit[0];
const fieldsArr = categorySplit[1].split('+');
const params: { [facetValueLabel: string]: boolean } = {};
let hasSelections = false;
let isAllMatch = false;
let hasExcludeOption = false;
let includeOptionsLength = 0;
for (let j = 0; j < fieldsArr.length; j++) {
const field = fieldsArr[j].split('.');
field[0] = decodeURIComponent(field[0]);
if (field[0] === 'is_all_match') {
isAllMatch = true;
} else {
if (field[1] === 'true') {
params[field[0]] = true;
hasSelections = true;
includeOptionsLength++;
} else if (field[1] === 'false') {
params[field[0]] = false;
hasSelections = true;
hasExcludeOption = true;
}
}
}
if (hasSelections === true) {
this.facetBuilder[category] = { params: params, hasSelections: true, isAllMatch: isAllMatch };
if (!hasExcludeOption && includeOptionsLength > 1) {
this.facetBuilder[category].showAllMatchOption = true;
}
const paramsString = JSON.stringify(params);
const newHash = this.utilsService.hashCode(paramsString,
this.facetBuilder[category].isAllMatch.toString(),
this.showDeprecated.toString());
this.facetBuilder[category].currentStateHash = newHash;
}
}
this.privateFacetParams = this.facetBuilder;
this.previousFacets.push(JSON.parse(JSON.stringify(this.privateFacetParams)));
}
}

This section of the code ends up using "*", ",", "+", and "." in special ways. However, it's not uncommon for facet values to have any/each of these characters. There needs to be a strategy to encode them.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.