Ajout FishPeper
3
cncjs/.bowerrc
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"directory": "bower_components"
|
||||
}
|
||||
107
cncjs/.circleci/config.yml
Normal file
@@ -0,0 +1,107 @@
|
||||
# https://circleci.com/blog/persisting-data-in-workflows-when-to-use-caching-artifacts-and-workspaces/
|
||||
|
||||
version: 2.1
|
||||
|
||||
orbs:
|
||||
browser-tools: circleci/browser-tools@1.1.3
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
build-n-deploy:
|
||||
jobs:
|
||||
- build
|
||||
- deploy:
|
||||
requires:
|
||||
- build
|
||||
|
||||
# https://circleci.com/docs/2.0/executor-types/
|
||||
jobs:
|
||||
build:
|
||||
docker:
|
||||
- image: cimg/node:12.22-browsers
|
||||
steps:
|
||||
- browser-tools/install-browser-tools
|
||||
- run:
|
||||
name: Configuration
|
||||
command: |
|
||||
npm config set loglevel warn
|
||||
npm config set scripts-prepend-node-path auto
|
||||
- checkout
|
||||
- run:
|
||||
name: Setup environment variables
|
||||
command: |
|
||||
echo "export CI_BRANCH=${CIRCLE_BRANCH}" >> $BASH_ENV
|
||||
echo "export CI_BUILD_NUMBER=${CIRCLE_BUILD_NUM}" >> $BASH_ENV
|
||||
echo "export CI_COMMIT=${CIRCLE_SHA1}" >> $BASH_ENV
|
||||
echo "export CI_COMMIT_SHORT=${CIRCLE_SHA1:0:8}" >> $BASH_ENV
|
||||
echo "export CI_TAG=${CIRCLE_TAG}" >> $BASH_ENV
|
||||
- run:
|
||||
name: Install system packages
|
||||
command: |
|
||||
sudo apt-get update
|
||||
- run:
|
||||
name: Check version
|
||||
command: |
|
||||
git --version
|
||||
node --version
|
||||
java --version
|
||||
google-chrome --version
|
||||
npm --version
|
||||
yarn --version
|
||||
- run:
|
||||
name: Install packages
|
||||
command: |
|
||||
yarn
|
||||
- run:
|
||||
name: Build
|
||||
command: |
|
||||
yarn clean
|
||||
yarn lint
|
||||
yarn test
|
||||
if [[ -z "$CI_TAG" ]]; then
|
||||
yarn build-latest
|
||||
else
|
||||
yarn build
|
||||
fi
|
||||
- run:
|
||||
name: Archive build artifacts
|
||||
command: |
|
||||
tar -zcvf ci.tar.gz --directory dist cncjs
|
||||
- persist_to_workspace:
|
||||
# Must be an absolute path, or relative path from working_directory.
|
||||
# This is a directory on the container which is taken to be the root directory of the workspace.
|
||||
root: .
|
||||
paths:
|
||||
- ci.tar.gz
|
||||
deploy:
|
||||
docker:
|
||||
- image: cimg/node:12.22
|
||||
steps:
|
||||
- setup_remote_docker:
|
||||
version: 19.03.13
|
||||
- checkout
|
||||
- run:
|
||||
name: Setup environment variables
|
||||
command: |
|
||||
echo "export CI_BRANCH=${CIRCLE_BRANCH}" >> $BASH_ENV
|
||||
- attach_workspace:
|
||||
# Must be absolute path or relative path from working_directory
|
||||
at: workspace
|
||||
- run:
|
||||
name: Extract build artifacts
|
||||
command: |
|
||||
mkdir -p dist
|
||||
tar zxvf workspace/ci.tar.gz --directory dist
|
||||
- run:
|
||||
name: Build Docker image
|
||||
command: |
|
||||
DOCKER_BRANCH_TAG=$(echo $CI_BRANCH | sed -e 's/\//-/g')
|
||||
DOCKER_REPO=cncjs/cncjs
|
||||
|
||||
echo "DOCKER_BRANCH_TAG=$DOCKER_BRANCH_TAG"
|
||||
echo "DOCKER_REPO=$DOCKER_REPO"
|
||||
|
||||
echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin
|
||||
docker build -f Dockerfile -t $DOCKER_REPO:$DOCKER_BRANCH_TAG .
|
||||
docker images
|
||||
docker push $DOCKER_REPO:$DOCKER_BRANCH_TAG
|
||||
5
cncjs/.cncrc.default
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"watchDirectory": "",
|
||||
"accessTokenLifetime": "30d",
|
||||
"allowRemoteAccess": false
|
||||
}
|
||||
2
cncjs/.eslintignore
Normal file
@@ -0,0 +1,2 @@
|
||||
# /node_modules and /bower_components ignored by default
|
||||
dist/
|
||||
37
cncjs/.eslintrc.js
Normal file
@@ -0,0 +1,37 @@
|
||||
const path = require('path');
|
||||
|
||||
module.exports = {
|
||||
extends: 'trendmicro',
|
||||
parser: 'babel-eslint',
|
||||
env: {
|
||||
browser: true,
|
||||
node: true
|
||||
},
|
||||
settings: {
|
||||
'import/resolver': {
|
||||
webpack: {
|
||||
config: {
|
||||
resolve: {
|
||||
modules: [
|
||||
path.resolve(__dirname, 'src'),
|
||||
'node_modules'
|
||||
],
|
||||
extensions: ['.js', '.jsx']
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
'max-lines-per-function': [1, {
|
||||
max: 512,
|
||||
skipBlankLines: true,
|
||||
skipComments: true
|
||||
}],
|
||||
'react/jsx-no-bind': [1, {
|
||||
allowArrowFunctions: true
|
||||
}],
|
||||
'react/prefer-stateless-function': 0,
|
||||
'react/no-access-state-in-setstate': 0
|
||||
}
|
||||
};
|
||||
8
cncjs/.gitattributes
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Set the default behavior
|
||||
* text=auto
|
||||
|
||||
# Git will always convert line endings to LF on checkout. You should use this for files that must keep LF endings, even on Windows.
|
||||
*.css text eol=lf
|
||||
*.js text eol=lf
|
||||
*.jsx text eol=lf
|
||||
*.sh text eol=lf
|
||||
12
cncjs/.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: cncjs
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
33
cncjs/.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
#### Description
|
||||
|
||||
Describe the issue or feature request in detail. Take a screenshot or record a video will be helpful.
|
||||
|
||||
#### Versions
|
||||
|
||||
- CNCjs: 1.9.x
|
||||
- Node.js: 6.x
|
||||
- NPM: 5.x
|
||||
|
||||
#### How Do You Install CNCjs?
|
||||
|
||||
- [x] NPM
|
||||
- [ ] Download the CNCjs Desktop Application
|
||||
|
||||
#### CNC Controller
|
||||
|
||||
- [x] Grbl
|
||||
- [ ] Smoothieware
|
||||
- [ ] TinyG/g2core
|
||||
|
||||
#### Hardware
|
||||
|
||||
- [x] Raspberry Pi
|
||||
- [ ] Desktop or Laptop
|
||||
- [ ] Mobile Device
|
||||
|
||||
#### Operating System
|
||||
|
||||
- [x] Not Applicable
|
||||
- [ ] Windows
|
||||
- [ ] Mac
|
||||
- [ ] Linux
|
||||
9
cncjs/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
npm-debug.log
|
||||
package-lock.json
|
||||
/.eslintcache
|
||||
/.nyc_output
|
||||
/coverage
|
||||
/dist
|
||||
/output
|
||||
/releases
|
||||
6
cncjs/.npmignore
Normal file
@@ -0,0 +1,6 @@
|
||||
tmp
|
||||
npm-debug.log
|
||||
/.nyc_output
|
||||
/coverage
|
||||
/output
|
||||
/releases
|
||||
35
cncjs/.stylintrc
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"blocks": false,
|
||||
"brackets": "always",
|
||||
"colons": "always",
|
||||
"colors": false,
|
||||
"commaSpace": "always",
|
||||
"commentSpace": false,
|
||||
"cssLiteral": "never",
|
||||
"depthLimit": false,
|
||||
"duplicates": false,
|
||||
"efficient": "always",
|
||||
"extendPref": false,
|
||||
"globalDupe": false,
|
||||
"indentPref": false,
|
||||
"leadingZero": "never",
|
||||
"maxErrors": false,
|
||||
"maxWarnings": false,
|
||||
"mixed": false,
|
||||
"namingConvention": false,
|
||||
"namingConventionStrict": false,
|
||||
"none": "never",
|
||||
"noImportant": true,
|
||||
"parenSpace": false,
|
||||
"placeholders": "always",
|
||||
"prefixVarsWithDollar": "always",
|
||||
"quotePref": false,
|
||||
"semicolons": "always",
|
||||
"sortOrder": false,
|
||||
"stackedProperties": "never",
|
||||
"trailingWhitespace": "never",
|
||||
"universal": false,
|
||||
"valid": true,
|
||||
"zeroUnits": "never",
|
||||
"zIndexNormalize": false
|
||||
}
|
||||
1
cncjs/CHANGELOG.md
Normal file
@@ -0,0 +1 @@
|
||||
All notable changes are described on the [Releases](https://github.com/cheton/cnc/releases) page.
|
||||
231
cncjs/CONTRIBUTING.md
Normal file
@@ -0,0 +1,231 @@
|
||||
# Contributing
|
||||
|
||||
## Index
|
||||
* [Troubleshooting](CONTRIBUTING.md#troubleshooting)
|
||||
* [Code Contributions](CONTRIBUTING.md#code-contributions)
|
||||
* [Keeping a Fork Up-to-date](CONTRIBUTING.md#keeping-a-fork-up-to-date)
|
||||
* [Running Local Development Server](CONTRIBUTING.md#running-local-development-server)
|
||||
* [Running Production Build](CONTRIBUTING.md#running-production-build)
|
||||
* [Build Desktop Apps](CONTRIBUTING.md#build-desktop-apps)
|
||||
* [Localization](CONTRIBUTING.md#localization)
|
||||
* [Translation Validation](CONTRIBUTING.md#translation-validation)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
https://github.com/cncjs/cncjs/wiki/Troubleshooting
|
||||
|
||||
## Code Contributions
|
||||
|
||||
### Step 1: Fork
|
||||
|
||||
Fork the project [on GitHub](https://github.com/cncjs/cncjs) and check out your copy locally.
|
||||
|
||||

|
||||
|
||||
```bash
|
||||
$ git clone git@github.com:username/cncjs.git
|
||||
$ cd cncjs
|
||||
$ git remote add upstream git://github.com/cncjs/cncjs.git
|
||||
```
|
||||
|
||||
### Step 2: Branch
|
||||
|
||||
Create a feature branch and before starting:
|
||||
```bash
|
||||
$ git checkout -b my-feature-branch -t origin/master
|
||||
```
|
||||
|
||||
### Step 3: Install
|
||||
|
||||
Run `npm install` to install the dependencies in the local node_modules folder:
|
||||
```bash
|
||||
$ npm install -g npm
|
||||
$ npm install
|
||||
```
|
||||
|
||||
### Step 4: Commit
|
||||
|
||||
Make sure git knows your name and email address:
|
||||
```bash
|
||||
$ git config --global user.name "User Name"
|
||||
$ git config --global user.email "user.email@example.com"
|
||||
```
|
||||
|
||||
Writing good commit logs is important. A commit log should describe what changed and why.
|
||||
|
||||
### Step 5: Rebase
|
||||
|
||||
Use `git rebase` (not `git merge`) to sync your work from time to time.
|
||||
```bash
|
||||
$ git fetch upstream
|
||||
$ git rebase upstream/master
|
||||
```
|
||||
|
||||
### Step 6: Build
|
||||
|
||||
Run `npm run prepare` to make sure the build succeed:
|
||||
```bash
|
||||
$ npm run prepare
|
||||
```
|
||||
|
||||
### Step 7: Push
|
||||
|
||||
```bash
|
||||
$ git push origin my-feature-branch
|
||||
```
|
||||
|
||||
Go to https://github.com/username/cncjs and select your feature branch. Click on the <kbd>New pull request</kbd> button and fill out the form.
|
||||
|
||||

|
||||
|
||||
## Keeping a Fork Up-to-date
|
||||
|
||||
### Clone your fork
|
||||
```bash
|
||||
git clone git@github.com:USERNAME/cncjs.git
|
||||
```
|
||||
|
||||
### Add remote from original repository in your forked repository
|
||||
```bash
|
||||
cd cncjs
|
||||
git remote add upstream git://github.com/cncjs/cncjs.git
|
||||
git fetch upstream
|
||||
```
|
||||
|
||||
### Updating your fork from original repo to keep up with their changes
|
||||
```bash
|
||||
git pull upstream master
|
||||
```
|
||||
|
||||
### Push the local branch to the remote repository
|
||||
```bash
|
||||
git pull origin master
|
||||
git push origin master
|
||||
```
|
||||
|
||||
## Running Local Development Server
|
||||
|
||||
Make sure you have Node.js 4 or later verions installed, and run `npm run dev` to start a local development server for development and testing. Every code changes will trigger webpack Hot Module Replacement (HMR) which will be really useful while developing in React.
|
||||
|
||||
```bash
|
||||
$ npm install # Ensure that packages are installed
|
||||
$ npm run dev # It may take several minutes...
|
||||
: : :
|
||||
Server is listening on 0.0.0.0:8000
|
||||
```
|
||||
|
||||
Connect to http://localhost:8000 and wait until bundle finished.
|
||||
```bash
|
||||
webpack: wait until bundle finished: /__webpack_hmr
|
||||
: : :
|
||||
webpack: bundle is now VALID
|
||||
```
|
||||
|
||||
Now you're ready to go!
|
||||
|
||||
## Running Production Build
|
||||
|
||||
```bash
|
||||
$ npm install # Ensure that packages are installed
|
||||
$ npm run prepare
|
||||
$ ./bin/cncjs -vv
|
||||
: : :
|
||||
Server is listening on 0.0.0.0:8000
|
||||
```
|
||||
|
||||
## Build Desktop Apps
|
||||
|
||||
#### Mac
|
||||
```bash
|
||||
$ npm install # Ensure that packages are installed
|
||||
$ npm run prepare && npm run build:mac-x64
|
||||
$ ls -al output/osx/
|
||||
```
|
||||
|
||||
#### Windows x86
|
||||
```bash
|
||||
$ npm install # Ensure that packages are installed
|
||||
$ npm run prepare && npm run build:win-ia32
|
||||
$ ls -al output/win-ia32/
|
||||
```
|
||||
|
||||
#### Windows x64
|
||||
```bash
|
||||
$ npm install # Ensure that packages are installed
|
||||
$ npm run prepare && npm run build:win-x64
|
||||
$ ls -al output/win/
|
||||
```
|
||||
|
||||
#### Linux x86
|
||||
```bash
|
||||
$ npm install # Ensure that packages are installed
|
||||
$ npm run prepare && npm run build:linux-ia32
|
||||
$ ls -al output/linux-ia32/
|
||||
```
|
||||
|
||||
#### Linux x64
|
||||
```bash
|
||||
$ npm install # Ensure that packages are installed
|
||||
$ npm run prepare && npm run build:linux-x64
|
||||
$ ls -al output/linux/
|
||||
```
|
||||
|
||||
## Localization
|
||||
|
||||
If you'd like to help contribute translations, you can fork the repository, update resource files in the [src/app/i18n](https://github.com/cncjs/cncjs/tree/master/src/app/i18n) directory or in the [src/server/i18n](https://github.com/cncjs/cncjs/tree/master/src/server/i18n) directory, and create a pull request to submit your changes.
|
||||
|
||||
### Fork the repository
|
||||
|
||||
To fork the cncjs repository, click the <b>Fork</b> button in the header of the repository.
|
||||
|
||||

|
||||
|
||||
When it’s finished, you’ll be taken to your copy of the cncjs repository. Now you can update the resource files on GitHub, or clone it to your computer.
|
||||
|
||||
If you're using <b>GitHub for Desktop</b> application, navigate over to the toolbar, open the <b>Clone or download</b> dropdown, and click <b>Open in Desktop</b> to clone cncjs/cncjs to your computer and use it in GitHub Desktop.
|
||||
|
||||

|
||||
|
||||
### Making and pushing changes
|
||||
|
||||
Go ahead and make a few changes to the project using your favorite text editor. When you’re ready to submit your changes, type up a commit summary in <b>GitHub for Desktop</b>, and click <b>Commit to master</b>.
|
||||
|
||||

|
||||
|
||||
You can continue to make more changes and create new commits. When you’re ready to push your changes, click on the <b>Sync</b> button to synchronize master with the remote server.
|
||||
|
||||

|
||||
|
||||
### Creating the pull request
|
||||
|
||||
1. Head on over to the repository on GitHub.com where your project lives. For your example, it would be at `https://www.github.com/<your_username>/cncjs`.
|
||||

|
||||
|
||||
2. To the right of the branch menu, click <b>New pull request</b>.<br>
|
||||

|
||||
|
||||
3. Click <b>Create pull request</b>.
|
||||

|
||||
|
||||
4. That's done.
|
||||
|
||||
## Translation Validation
|
||||
|
||||
You can validate the translation by copying translated resource files to the installed directory. Note that your path may differ based on the Node installation path you have in place.
|
||||
```bash
|
||||
$ cd $(dirname `which cncjs`)/../lib/node_modules/cncjs/dist/app/i18n/
|
||||
$ pwd
|
||||
/home/cheton/.nvm/versions/node/v10.15.3/lib/node_modules/cncjs/dist/app/i18n
|
||||
```
|
||||
|
||||
To verify your changes during runtime, it's recommended that you open <b>Developer Tools</b> and disable browser cache. For example:
|
||||
|
||||
##### Step 1: Open Developer Tools and click [Settings]
|
||||

|
||||
|
||||
##### Step 2: Disable cache
|
||||

|
||||
|
||||
Now you can copy resource files to the <b>dist/cncjs/app/i18n</b> directory and refresh your browser to see new updates.
|
||||
|
||||
<b>Note that you should not close DevTools to make sure your browser won't cache anything.</b>
|
||||
54
cncjs/Dockerfile
Normal file
@@ -0,0 +1,54 @@
|
||||
# BUILD STAGE
|
||||
FROM debian:bullseye as build-stage
|
||||
|
||||
ENV BUILD_DIR /tmp/build
|
||||
ENV NVM_DIR /root/.nvm
|
||||
ENV NODE_VERSION v12.22.1
|
||||
ENV NODE_ENV production
|
||||
ENV NODE_PATH $NVM_DIR/$NODE_VERSION/lib/node_modules
|
||||
ENV PATH $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH
|
||||
|
||||
RUN apt-get update -y && apt-get install -y -q --no-install-recommends \
|
||||
apt-utils \
|
||||
build-essential \
|
||||
ca-certificates \
|
||||
python3 \
|
||||
python3-pip \
|
||||
curl \
|
||||
git \
|
||||
udev
|
||||
|
||||
RUN git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR" \
|
||||
&& cd "$NVM_DIR" \
|
||||
&& git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)` \
|
||||
&& . "$NVM_DIR/nvm.sh" \
|
||||
&& nvm install "$NODE_VERSION" \
|
||||
&& nvm alias default "$NODE_VERSION" \
|
||||
&& nvm use --delete-prefix default
|
||||
|
||||
COPY ./dist/cncjs $BUILD_DIR/cncjs
|
||||
COPY ./entrypoint $BUILD_DIR/cncjs/
|
||||
|
||||
WORKDIR $BUILD_DIR/cncjs
|
||||
RUN npm install -g npm@latest && npm install -g yarn && yarn --production
|
||||
|
||||
# FINAL STAGE
|
||||
FROM debian:bullseye
|
||||
|
||||
ENV NVM_DIR /root/.nvm
|
||||
ENV NODE_VERSION v12.22.1
|
||||
ENV NODE_ENV production
|
||||
ENV NODE_PATH $NVM_DIR/$NODE_VERSION/lib/node_modules
|
||||
ENV PATH $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH
|
||||
|
||||
RUN apt-get update -y && apt-get install -y -q --no-install-recommends \
|
||||
apt-utils \
|
||||
ca-certificates \
|
||||
udev
|
||||
|
||||
WORKDIR /opt/cncjs
|
||||
EXPOSE 8000
|
||||
ENTRYPOINT ["/opt/cncjs/entrypoint"]
|
||||
|
||||
COPY --from=build-stage /root/.nvm $NVM_DIR
|
||||
COPY --from=build-stage /tmp/build/cncjs /opt/cncjs
|
||||
22
cncjs/LICENSE
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015-2017 Cheton Wu
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
338
cncjs/README.md
Normal file
@@ -0,0 +1,338 @@
|
||||
# CNCjs [](#backers) [](#sponsors) [](https://travis-ci.org/cncjs/cncjs) [](https://ci.appveyor.com/project/cheton/cncjs) [](https://coveralls.io/github/cncjs/cncjs?branch=master)
|
||||
|
||||
[](https://www.npmjs.com/package/cncjs)
|
||||

|
||||
|
||||
CNCjs is a full-featured web-based interface for CNC controllers running [Grbl](https://github.com/grbl/grbl), [Marlin](https://github.com/MarlinFirmware/Marlin), [Smoothieware](https://github.com/Smoothieware/Smoothieware), or [TinyG](https://github.com/synthetos/TinyG).
|
||||
|
||||
For a more complete introduction, see the [Introduction](https://github.com/cncjs/cncjs/wiki/Introduction) section of the wiki page.
|
||||
|
||||

|
||||
|
||||
## Features
|
||||
|
||||
* Supported controllers
|
||||
- [Grbl](https://github.com/gnea/grbl) ([Download](https://github.com/gnea/grbl/releases))
|
||||
- [Grbl-Mega](https://github.com/gnea/grbl-Mega) ([Download](https://github.com/gnea/grbl-Mega/releases))
|
||||
- [Marlin](https://github.com/MarlinFirmware/Marlin) ([Download](http://marlinfw.org/meta/download/))
|
||||
- [Smoothieware](https://github.com/Smoothieware/Smoothieware) ([Download](https://github.com/Smoothieware/Smoothieware/tree/edge/FirmwareBin))
|
||||
- [TinyG](https://github.com/synthetos/TinyG) (_Recommend: firmware version 0.97 build 449.xx_) ([Download](http://synthetos.github.io/))
|
||||
- [g2core](https://github.com/synthetos/g2)
|
||||
* [Desktop App for Linux, Mac OS X, and Windows](https://github.com/cncjs/cncjs/wiki/Desktop-App)
|
||||
* 6-axis digital readout (DRO)
|
||||
* Tool path 3D visualization
|
||||
* Simultaneously communicate with multiple clients
|
||||
* Responsive view for small screen display with device width less than 720px
|
||||
- <i>Safari on an iPhone 5S</i> [\[1\]](https://cloud.githubusercontent.com/assets/447801/15633749/b817cd4a-25e7-11e6-9beb-600c65ea1324.PNG) [\[2\]](https://cloud.githubusercontent.com/assets/447801/15633750/b819b5f6-25e7-11e6-8bfe-d3e6247e443b.PNG)
|
||||
* Customizable workspace
|
||||
* [Custom widget](https://github.com/cncjs/cncjs-widget-boilerplate) (since 1.9.10)
|
||||
* Custom MDI (Multiple Document Interface) command buttons (since 1.9.13)
|
||||
* My Account
|
||||
* Commands
|
||||
* Events
|
||||
* [Keyboard Shortcuts](https://cnc.js.org/docs/user-guide/#keyboard-shortcuts)
|
||||
* [Contour ShuttleXpress](https://cnc.js.org/docs/user-guide/#contour-shuttlexpress)
|
||||
* Multi-Language Support
|
||||
* Watch Directory
|
||||
* [Tool Change](https://github.com/cncjs/cncjs/wiki/Tool-Change) (since 1.9.11)
|
||||
* Z-Probe
|
||||
|
||||
## Custom Widgets
|
||||
|
||||
* [cncjs-widget-boilerplate](https://github.com/cncjs/cncjs-widget-boilerplate) - Creating custom widgets for CNCjs.
|
||||
|
||||
## Pendants
|
||||
|
||||
### Boilerplate Code
|
||||
|
||||
* [cncjs-pendant-boilerplate](https://github.com/cncjs/cncjs-pendant-boilerplate) - A bare minimum example to develop a cncjs pendant.
|
||||
|
||||
### Existing Pendants
|
||||
|
||||
* [cncjs-pendant-keyboard](https://github.com/cncjs/cncjs-pendant-keyboard) - A simple pendant (using wireless keyboard or usb) to CNCJS.
|
||||
* [cncjs-pendant-numpad](https://github.com/mariolukas/cncjs-pendant-numpad) - A simple pendant (using wireless numpad or usb) to CNCJS.
|
||||
* [cncjs-pendant-lcd](https://github.com/cncjs/cncjs-pendant-lcd) - CNCjs Web Kiosk for Raspberry Pi Touch Displays.
|
||||
* [cncjs-pendant-ps3](https://github.com/cncjs/cncjs-pendant-ps3) - Dual Shock / PS3 Bluetooth Remote Pendant for CNCjs.
|
||||
* [cncjs-pendant-raspi-gpio](https://github.com/cncjs/cncjs-pendant-raspi-gpio) - Simple Raspberry Pi GPIO Pendant control for CNCjs.
|
||||
|
||||
## Tablet UI
|
||||
|
||||
* [cncjs-pendant-tinyweb](https://github.com/cncjs/cncjs-pendant-tinyweb) - A tiny web console for small 320x240 LCD display.<br>
|
||||

|
||||
* [cncjs-shopfloor-tablet](https://github.com/cncjs/cncjs-shopfloor-tablet) - A simplified UI for cncjs optimized for tablet computers in a production (shop floor) environment.<br>
|
||||

|
||||
|
||||
## Browser Support
|
||||
|
||||
<br>Chrome | <br>Edge | <br>Firefox | <br>IE | <br>Opera | <br>Safari
|
||||
--- | --- | --- | --- | --- | --- |
|
||||
Yes | Yes | Yes| Not supported | Yes | Yes |
|
||||
|
||||
## Supported Node.js Versions
|
||||
|
||||
Version | Supported Level
|
||||
:------- |:---------------
|
||||
4 | Dropped support
|
||||
6 | Supported
|
||||
8 | Supported
|
||||
10 | Recommended
|
||||
12 | Recommended
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Node.js Installation
|
||||
|
||||
Node.js 8 or higher is recommended. You can install [Node Version Manager](https://github.com/creationix/nvm) to manage multiple Node.js versions. If you have `git` installed, just clone the `nvm` repo, and check out the latest version:
|
||||
```
|
||||
git clone https://github.com/creationix/nvm.git ~/.nvm
|
||||
cd ~/.nvm
|
||||
git checkout `git describe --abbrev=0 --tags`
|
||||
cd ..
|
||||
. ~/.nvm/nvm.sh
|
||||
```
|
||||
|
||||
Add these lines to your `~/.bash_profile`, `~/.bashrc`, or `~/.profile` file to have it automatically sourced upon login:
|
||||
```bash
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
|
||||
```
|
||||
|
||||
Once installed, you can select Node.js versions with:
|
||||
```
|
||||
nvm install 10
|
||||
nvm use 10
|
||||
```
|
||||
|
||||
It's also recommended that you upgrade npm to the latest version. To upgrade, run:
|
||||
```
|
||||
npm install npm@latest -g
|
||||
```
|
||||
|
||||
### Installation
|
||||
|
||||
Install cncjs as a non-root user, or the [serialport](https://github.com/node-serialport/node-serialport) module may not install correctly on some platforms like Raspberry Pi.
|
||||
```
|
||||
npm install -g cncjs
|
||||
```
|
||||
|
||||
If you're going to use sudo or root to install cncjs, you need to specify the `--unsafe-perm` option to run npm as the root account.
|
||||
```
|
||||
sudo npm install --unsafe-perm -g cncjs
|
||||
```
|
||||
|
||||
Check out [https://github.com/cncjs/cncjs/wiki/Installation](https://github.com/cncjs/cncjs/wiki/Installation) for other installation methods.
|
||||
|
||||
### Upgrade
|
||||
|
||||
Run `npm install -g cncjs@latest` to install the latest version. To determine the version, use `cncjs -V`.
|
||||
|
||||
### Usage
|
||||
|
||||
Run `cncjs` to start the server, and visit `http://yourhostname:8000/` to view the web interface. Pass `--help` to `cncjs` for more options.
|
||||
|
||||
```
|
||||
pi@rpi3$ cncjs -h
|
||||
|
||||
Usage: cncjs [options]
|
||||
|
||||
|
||||
Options:
|
||||
|
||||
-V, --version output the version number
|
||||
-p, --port <port> Set listen port (default: 8000)
|
||||
-H, --host <host> Set listen address or hostname (default: 0.0.0.0)
|
||||
-b, --backlog <backlog> Set listen backlog (default: 511)
|
||||
-c, --config <filename> Set config file (default: ~/.cncrc)
|
||||
-v, --verbose Increase the verbosity level (-v, -vv, -vvv)
|
||||
-m, --mount <route-path>:<target> Add a mount point for serving static files
|
||||
-w, --watch-directory <path> Watch a directory for changes
|
||||
--access-token-lifetime <lifetime> Access token lifetime in seconds or a time span string (default: 30d)
|
||||
--allow-remote-access Allow remote access to the server (default: false)
|
||||
--controller <type> Specify CNC controller: Grbl|Marlin|Smoothie|TinyG|g2core (default: '')
|
||||
-h, --help output usage information
|
||||
|
||||
Examples:
|
||||
|
||||
$ cncjs -vv
|
||||
$ cncjs --mount /pendant:/home/pi/tinyweb
|
||||
$ cncjs --mount /widget:~+/widget --mount /pendant:~/pendant
|
||||
$ cncjs --mount /widget:https://cncjs.github.io/cncjs-widget-boilerplate/v1/
|
||||
$ cncjs --watch-directory /home/pi/watch
|
||||
$ cncjs --access-token-lifetime 60d # e.g. 3600, 30m, 12h, 30d
|
||||
$ cncjs --allow-remote-access
|
||||
$ cncjs --controller Grbl
|
||||
```
|
||||
|
||||
Instead of passing command line options for `--watch-directory`, `--access-token-lifetime`, `--allow-remote-access`, and `--controller`, you can create a `~/.cncrc` file that contains the following configuration in JSON format:
|
||||
```json
|
||||
{
|
||||
"mountPoints": [
|
||||
{
|
||||
"route": "/pendant",
|
||||
"target": "/home/pi/tinyweb"
|
||||
},
|
||||
{
|
||||
"route": "/widget",
|
||||
"target": "https://cncjs.github.io/cncjs-widget-boilerplate/v1/"
|
||||
}
|
||||
],
|
||||
"watchDirectory": "/path/to/dir",
|
||||
"accessTokenLifetime": "30d",
|
||||
"allowRemoteAccess": false,
|
||||
"controller": ""
|
||||
}
|
||||
```
|
||||
|
||||
To troubleshoot issues, run:
|
||||
```
|
||||
cncjs -vvv
|
||||
```
|
||||
|
||||
### Configuration File
|
||||
|
||||
The configuration file <b>.cncrc</b> contains settings that are equivalent to the cncjs command-line options. The configuration file is stored in user's home directory. To find out the actual location of the home directory, do the following:
|
||||
|
||||
* Linux/Mac
|
||||
```sh
|
||||
echo $HOME
|
||||
```
|
||||
|
||||
* Windows
|
||||
```sh
|
||||
echo %USERPROFILE%
|
||||
```
|
||||
|
||||
Check out an example configuration file [here](https://github.com/cncjs/cncjs/blob/master/examples/.cncrc).
|
||||
|
||||
### File Format
|
||||
|
||||
See https://github.com/cncjs/cncjs/issues/242#issuecomment-352294549 for a detailed explanation.
|
||||
|
||||
```json
|
||||
{
|
||||
"ports": [
|
||||
{
|
||||
"comName": "/dev/ttyAMA0",
|
||||
"manufacturer": ""
|
||||
}
|
||||
],
|
||||
"baudrates": [115200, 250000],
|
||||
"mountPoints": [
|
||||
{
|
||||
"route": "/widget",
|
||||
"target": "https://cncjs.github.io/cncjs-widget-boilerplate/v1/"
|
||||
}
|
||||
],
|
||||
"watchDirectory": "/path/to/dir",
|
||||
"accessTokenLifetime": "30d",
|
||||
"allowRemoteAccess": false,
|
||||
"controller": "",
|
||||
"state": {
|
||||
"checkForUpdates": true,
|
||||
"controller": {
|
||||
"exception": {
|
||||
"ignoreErrors": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"title": "Update (root user)",
|
||||
"commands": "sudo npm install -g cncjs@latest --unsafe-perm; pkill -f cncjs"
|
||||
},
|
||||
{
|
||||
"title": "Update (non-root user)",
|
||||
"commands": "npm install -g cncjs@latest; pkill -f cncjs"
|
||||
},
|
||||
{
|
||||
"title": "Reboot",
|
||||
"commands": "sudo /sbin/reboot"
|
||||
},
|
||||
{
|
||||
"title": "Shutdown",
|
||||
"commands": "sudo /sbin/shutdown"
|
||||
}
|
||||
],
|
||||
"events": [],
|
||||
"macros": [],
|
||||
"users": []
|
||||
}
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
https://cnc.js.org/docs/
|
||||
|
||||
## Examples
|
||||
|
||||
There are several *.gcode files in the [examples](https://github.com/cncjs/cncjs/tree/master/examples) directory. You can use the GCode widget to load a GCode file and make a trial run.
|
||||
|
||||
If you don't have a CAM software, try using [jscut](http://jscut.org/) to create G-Code from *.svg. It's a simple CAM package that runs in the browser.
|
||||
|
||||
Check out a live demo at http://jscut.org/jscut.html.
|
||||
|
||||
## Contributions
|
||||
|
||||
Use [GitHub issues](https://github.com/cncjs/cncjs/issues) for requests.
|
||||
|
||||
Pull requests welcome! Learn how to [contribute](CONTRIBUTING.md).
|
||||
|
||||
## Localization
|
||||
|
||||
You can help translate resource files in both of [app](https://github.com/cncjs/cncjs/tree/master/src/app/i18n) and [server](https://github.com/cncjs/cncjs/tree/master/src/server/i18n) directories from English to other languages. Check out [Localization guide](https://github.com/cncjs/cncjs/blob/master/CONTRIBUTING.md#localization) to learn how to get started. If you are not familiar with GitHub development, you can [open an issue](https://github.com/cncjs/cncjs/issues) or send your translations to cheton@gmail.com.
|
||||
|
||||
Locale | Language | Status | Contributors
|
||||
:----- | :------- | :----- | :-----------
|
||||
[cs](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/cs) | Čeština (Czech) | ✔ | [Miroslav Zuzelka](https://github.com/dronecz)
|
||||
[de](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/de) | Deutsch (German) | ✔ | [Thorsten Godau](https://github.com/dl9sec), [Max B.](https://github.com/mbs38)
|
||||
[es](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/es) | Español (Spanish) | ✔ | [Juan Biondi](https://github.com/yeyeto2788)
|
||||
[fr](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/fr) | Français (French) | ✔ | [Simon Maillard](https://github.com/maisim), [CorentinBrulé](https://github.com/CorentinBrule)
|
||||
[hu](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/hu) | Magyar (Hungarian) | ✔ | Sipos Péter
|
||||
[it](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/it) | Italiano (Italian) | ✔ | [vince87](https://github.com/vince87)
|
||||
[ja](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/ja) | 日本語 (Japanese) | ✔ | [Naoki Okamoto](https://github.com/toonaoki)
|
||||
[nl](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/nl) | Nederlands (Netherlands) | ✔ | [dutchpatriot](https://github.com/dutchpatriot)
|
||||
[pt-br](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/pt-br) | Português (Brasil) | ✔ | [cmsteinBR](https://github.com/cmsteinBR)
|
||||
[ru](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/ru) | Ру́сский (Russian) | ✔ | [Denis Yusupov](https://github.com/minithc)
|
||||
[tr](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/tr) | Türkçe (Turkish) | ✔ | Ali GÜNDOĞDU
|
||||
[zh-cn](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/zh-cn) | 简体中文 (Simplified Chinese) | ✔ | [Mandy Chien](https://github.com/MandyChien), [Terry Lee](https://github.com/TerryShampoo)
|
||||
[zh-tw](https://github.com/cncjs/cncjs/tree/master/src/web/i18n/zh-tw) | 繁體中文 (Traditional Chinese) | ✔ | [Cheton Wu](https://github.com/cheton)
|
||||
|
||||
## Donate
|
||||
|
||||
If you would like to support this project, you can make a donation using PayPal. Thank you!
|
||||
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=38CYN33CWPBR2)
|
||||
|
||||
## Contributors
|
||||
|
||||
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
|
||||
<a href="graphs/contributors"><img src="https://opencollective.com/cncjs/contributors.svg?width=890&button=false" /></a>
|
||||
|
||||
|
||||
## Backers
|
||||
|
||||
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/cncjs#backer)]
|
||||
|
||||
<a href="https://opencollective.com/cncjs#backers" target="_blank"><img src="https://opencollective.com/cncjs/backers.svg?width=890"></a>
|
||||
|
||||
|
||||
## Sponsors
|
||||
|
||||
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/cncjs#sponsor)]
|
||||
|
||||
<a href="https://opencollective.com/cncjs/sponsor/0/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/1/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/2/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/3/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/4/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/5/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/6/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/7/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/8/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/cncjs/sponsor/9/website" target="_blank"><img src="https://opencollective.com/cncjs/sponsor/9/avatar.svg"></a>
|
||||
|
||||
|
||||
|
||||
## License
|
||||
|
||||
Licensed under the [MIT License](https://raw.githubusercontent.com/cncjs/cncjs/master/LICENSE).
|
||||
502
cncjs/appveyor.yml
Normal file
@@ -0,0 +1,502 @@
|
||||
# https://stefanscherer.github.io/use-appveyor-to-build-multi-arch-docker-image/
|
||||
|
||||
version: "{build}-{branch}"
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
#- job_name: Linux build (i386)
|
||||
# appveyor_build_worker_image: Ubuntu
|
||||
# nodejs_version: "12"
|
||||
# ARCH: i386
|
||||
- job_name: Linux build (amd64)
|
||||
appveyor_build_worker_image: Ubuntu2004
|
||||
nodejs_version: "12"
|
||||
ARCH: amd64
|
||||
- job_name: Linux build (arm)
|
||||
appveyor_build_worker_image: Ubuntu2004
|
||||
nodejs_version: "12"
|
||||
ARCH: arm
|
||||
- job_name: Linux build (arm64)
|
||||
appveyor_build_worker_image: Ubuntu2004
|
||||
nodejs_version: "12"
|
||||
ARCH: arm64
|
||||
- job_name: macOS build (x64)
|
||||
appveyor_build_worker_image: macos
|
||||
nodejs_version: "12"
|
||||
ARCH: x64
|
||||
- job_name: Windows build (x64)
|
||||
appveyor_build_worker_image: Visual Studio 2019
|
||||
nodejs_version: "12"
|
||||
ARCH: x64
|
||||
- job_name: Windows build (x86)
|
||||
appveyor_build_worker_image: Visual Studio 2019
|
||||
nodejs_version: "12"
|
||||
ARCH: x86
|
||||
global:
|
||||
GITHUB_TOKEN:
|
||||
secure: G9Qlv8MYhgvYlUxWWUiDdfIUTrKcia16HAdzkVydWqC+wo60XrC8nk1Q2R9WKGXx
|
||||
|
||||
for:
|
||||
# Linux
|
||||
-
|
||||
matrix:
|
||||
only:
|
||||
#- job_name: Linux build (i386)
|
||||
- job_name: Linux build (amd64)
|
||||
- job_name: Linux build (arm)
|
||||
- job_name: Linux build (arm64)
|
||||
fast_finish: true
|
||||
|
||||
init:
|
||||
- uname -a
|
||||
- git --version
|
||||
- git config --global core.autocrlf false
|
||||
- git config --global user.name "AppVeyor"
|
||||
- git config --global user.email "appveyor@ci.appveyor.com"
|
||||
- sh: |
|
||||
export CI_BRANCH=$APPVEYOR_REPO_BRANCH
|
||||
export CI_BUILD_NUMBER=$APPVEYOR_BUILD_NUMBER
|
||||
export CI_COMMIT=$APPVEYOR_REPO_COMMIT
|
||||
export CI_COMMIT_SHORT=${APPVEYOR_REPO_COMMIT:0:8}
|
||||
export CI_COMMIT_TIMESTAMP=$APPVEYOR_REPO_COMMIT_TIMESTAMP
|
||||
export CI_TAG=$APPVEYOR_REPO_TAG_NAME
|
||||
echo "• ARCH=$ARCH"
|
||||
echo "• CI_BRANCH=$CI_BRANCH"
|
||||
echo "• CI_BUILD_NUMBER=$CI_BUILD_NUMBER"
|
||||
echo "• CI_COMMIT=$CI_COMMIT"
|
||||
echo "• CI_COMMIT_SHORT=$CI_COMMIT_SHORT"
|
||||
echo "• CI_COMMIT_TIMESTAMP=$CI_COMMIT_TIMESTAMP"
|
||||
echo "• CI_TAG=$CI_TAG"
|
||||
|
||||
install:
|
||||
# https://github.com/cfillion/reapack/blob/master/.appveyor.yml
|
||||
- |
|
||||
sudo cp -af /etc/apt/sources.list /etc/apt/sources.list.old
|
||||
sudo sed -i '/arch=/! s/^deb/deb [arch=amd64,i386]/' /etc/apt/sources.list
|
||||
awk '
|
||||
$3 !~ /ubuntu\.com/ { next }
|
||||
$1 == "deb" {
|
||||
$2 = "[arch=armhf,arm64]";
|
||||
$3 = "http://ports.ubuntu.com/ubuntu-ports/"
|
||||
} 1' /etc/apt/sources.list | sudo dd of=/etc/apt/sources.list.d/ports.list
|
||||
diff -uN /etc/apt/sources.list.old /etc/apt/sources.list
|
||||
cat /etc/apt/sources.list.d/ports.list
|
||||
- sudo dpkg --print-architecture
|
||||
- sudo dpkg --add-architecture arm64
|
||||
- sudo dpkg --add-architecture armhf
|
||||
#- sudo dpkg --add-architecture i386
|
||||
- sudo dpkg --print-foreign-architectures
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick gcc-multilib g++-multilib rpm
|
||||
- nvm install $nodejs_version
|
||||
- npm config set loglevel warn
|
||||
- npm config set scripts-prepend-node-path auto
|
||||
- npm install -g npm
|
||||
- npm install -g yarn
|
||||
- yarn
|
||||
|
||||
build_script:
|
||||
- sh: |
|
||||
yarn clean
|
||||
yarn lint
|
||||
yarn test
|
||||
if [[ -z "$CI_TAG" ]]; then
|
||||
yarn build-latest
|
||||
else
|
||||
yarn build
|
||||
fi
|
||||
- sh: |
|
||||
# i386
|
||||
if [[ "$ARCH" == "i386" ]]; then
|
||||
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
|
||||
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
|
||||
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
|
||||
PRODUCT_NAME=CNCjs
|
||||
yarn build:linux-ia32
|
||||
ls -al output output/*
|
||||
mkdir -p releases/linux
|
||||
cp -af "output/${PACKAGE_NAME}-${PACKAGE_VERSION}.i686.rpm" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.i686.rpm"
|
||||
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}-i386.AppImage" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-i386.AppImage"
|
||||
cp -af "output/${PACKAGE_NAME}_${PACKAGE_VERSION}_i386.deb" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-i386.deb"
|
||||
pushd releases/linux
|
||||
ln -sf ../../output/linux-ia32-unpacked "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-ia32"
|
||||
tar zcfh "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-ia32.tar.gz" "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-ia32"
|
||||
rm -f "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-ia32";
|
||||
popd
|
||||
ls -al releases/linux/*
|
||||
if [[ "$CI_BRANCH" == "master" && -z "$CI_TAG" ]]; then
|
||||
yarn github-release delete \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
"*-linux-i386.AppImage" \
|
||||
"*-linux-i386.deb" \
|
||||
"*-linux.i686.rpm" \
|
||||
"*-linux-ia32.tar.gz";
|
||||
yarn github-release upload \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
--body="${COMMIT_LOG}" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.i686.rpm" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-i386.AppImage" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-i386.deb" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-ia32.tar.gz";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.i686.rpm";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-i386.AppImage";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-i386.deb";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-ia32.tar.gz";
|
||||
fi
|
||||
fi
|
||||
- sh: |
|
||||
# amd64
|
||||
if [[ "$ARCH" == "amd64" ]]; then
|
||||
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
|
||||
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
|
||||
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
|
||||
PRODUCT_NAME=CNCjs
|
||||
yarn build:linux-x64
|
||||
ls -al output output/*
|
||||
mkdir -p releases/linux
|
||||
cp -af "output/${PACKAGE_NAME}-${PACKAGE_VERSION}.x86_64.rpm" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.x86_64.rpm"
|
||||
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}.AppImage" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x86_64.AppImage"
|
||||
cp -af "output/${PACKAGE_NAME}_${PACKAGE_VERSION}_amd64.deb" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-amd64.deb"
|
||||
pushd releases/linux
|
||||
ln -sf ../../output/linux-unpacked "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64"
|
||||
tar zcfh "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64.tar.gz" "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64"
|
||||
rm -f "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64"
|
||||
popd
|
||||
ls -al releases/linux/*
|
||||
if [[ "$CI_BRANCH" == "master" && -z "$CI_TAG" ]]; then
|
||||
yarn github-release delete \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
"*-linux.x86_64.rpm" \
|
||||
"*-linux-x86_64.AppImage" \
|
||||
"*-linux-amd64.deb" \
|
||||
"*-linux-x64.tar.gz";
|
||||
yarn github-release upload \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
--body="${GIT_COMMIT_LOG}" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.x86_64.rpm" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x86_64.AppImage" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-amd64.deb" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64.tar.gz";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.x86_64.rpm";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x86_64.AppImage";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-amd64.deb";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64.tar.gz";
|
||||
fi
|
||||
fi
|
||||
- sh: |
|
||||
# arm
|
||||
if [[ "$ARCH" == "arm" ]]; then
|
||||
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
|
||||
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
|
||||
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
|
||||
PRODUCT_NAME=CNCjs
|
||||
yarn build:linux-armv7l
|
||||
ls -al output output/*
|
||||
mkdir -p releases/linux
|
||||
cp -af "output/${PACKAGE_NAME}-${PACKAGE_VERSION}.armv7l.rpm" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.armv7l.rpm"
|
||||
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}-armv7l.AppImage" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.AppImage"
|
||||
cp -af "output/${PACKAGE_NAME}_${PACKAGE_VERSION}_armv7l.deb" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.deb"
|
||||
pushd releases/linux
|
||||
ln -sf ../../output/linux-armv7l-unpacked "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l"
|
||||
tar zcfh "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.tar.gz" "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l"
|
||||
rm -f "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l"
|
||||
popd
|
||||
ls -al releases/linux/*
|
||||
if [[ "$CI_BRANCH" == "master" && -z "$CI_TAG" ]]; then
|
||||
yarn github-release delete \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
"*-linux.armv7l.rpm" \
|
||||
"*-linux-armv7l.AppImage" \
|
||||
"*-linux-armv7l.deb" \
|
||||
"*-linux-armv7l.tar.gz";
|
||||
yarn github-release upload \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
--body="${GIT_COMMIT_LOG}" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.armv7l.rpm" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.AppImage" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.deb" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.tar.gz";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.armv7l.rpm";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.AppImage";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.deb";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.tar.gz";
|
||||
fi
|
||||
fi
|
||||
- sh: |
|
||||
# arm64
|
||||
if [[ "$ARCH" == "arm64" ]]; then
|
||||
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
|
||||
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
|
||||
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
|
||||
PRODUCT_NAME=CNCjs
|
||||
yarn build:linux-arm64
|
||||
ls -al output output/*
|
||||
mkdir -p releases/linux
|
||||
cp -af "output/${PACKAGE_NAME}-${PACKAGE_VERSION}.arm64.rpm" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.arm64.rpm"
|
||||
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}-arm64.AppImage" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.AppImage"
|
||||
cp -af "output/${PACKAGE_NAME}_${PACKAGE_VERSION}_arm64.deb" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.deb"
|
||||
pushd releases/linux
|
||||
ln -sf ../../output/linux-arm64-unpacked "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64"
|
||||
tar zcfh "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.tar.gz" "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64"
|
||||
rm -f "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64"
|
||||
popd
|
||||
ls -al releases/linux/*
|
||||
if [[ "$CI_BRANCH" == "master" && -z "$CI_TAG" ]]; then
|
||||
yarn github-release delete \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
"*-linux.arm64.rpm" \
|
||||
"*-linux-arm64.AppImage" \
|
||||
"*-linux-arm64.deb" \
|
||||
"*-linux-arm64.tar.gz";
|
||||
yarn github-release upload \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
--body="${GIT_COMMIT_LOG}" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.arm64.rpm" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.AppImage" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.deb" \
|
||||
"releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.tar.gz";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.arm64.rpm";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.AppImage";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.deb";
|
||||
rm -f "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.tar.gz";
|
||||
fi
|
||||
fi
|
||||
|
||||
test: off
|
||||
|
||||
# Packaging artifacts
|
||||
# https://www.appveyor.com/docs/packaging-artifacts
|
||||
artifacts:
|
||||
- path: releases/linux/*
|
||||
|
||||
# Publishing artifacts to GitHub Releases
|
||||
# https://www.appveyor.com/docs/deployment/github
|
||||
deploy:
|
||||
- provider: GitHub
|
||||
auth_token:
|
||||
secure: G9Qlv8MYhgvYlUxWWUiDdfIUTrKcia16HAdzkVydWqC+wo60XrC8nk1Q2R9WKGXx
|
||||
draft: false
|
||||
prerelease: false
|
||||
on:
|
||||
appveyor_repo_tag: true # deploy on tag push only
|
||||
nodejs_version: "12"
|
||||
|
||||
# macOS
|
||||
-
|
||||
matrix:
|
||||
only:
|
||||
- job_name: macOS build (x64)
|
||||
fast_finish: true
|
||||
|
||||
init:
|
||||
- uname -a
|
||||
- git --version
|
||||
- git config --global core.autocrlf false
|
||||
- git config --global user.name "AppVeyor"
|
||||
- git config --global user.email "appveyor@ci.appveyor.com"
|
||||
- sh: |
|
||||
export CI_BRANCH=$APPVEYOR_REPO_BRANCH
|
||||
export CI_BUILD_NUMBER=$APPVEYOR_BUILD_NUMBER
|
||||
export CI_COMMIT=$APPVEYOR_REPO_COMMIT
|
||||
export CI_COMMIT_SHORT=${APPVEYOR_REPO_COMMIT:0:8}
|
||||
export CI_COMMIT_TIMESTAMP=$APPVEYOR_REPO_COMMIT_TIMESTAMP
|
||||
export CI_TAG=$APPVEYOR_REPO_TAG_NAME
|
||||
echo "• ARCH=$ARCH"
|
||||
echo "• CI_BRANCH=$CI_BRANCH"
|
||||
echo "• CI_BUILD_NUMBER=$CI_BUILD_NUMBER"
|
||||
echo "• CI_COMMIT=$CI_COMMIT"
|
||||
echo "• CI_COMMIT_SHORT=$CI_COMMIT_SHORT"
|
||||
echo "• CI_COMMIT_TIMESTAMP=$CI_COMMIT_TIMESTAMP"
|
||||
echo "• CI_TAG=$CI_TAG"
|
||||
|
||||
install:
|
||||
- nvm install $nodejs_version
|
||||
- security import "scripts/certs/Certum-Code-Signing-CA-SHA2.cer" -k ~/Library/Keychains/login.keychain -T /usr/bin/codesign
|
||||
- npm config set loglevel warn
|
||||
- npm config set scripts-prepend-node-path auto
|
||||
- npm install -g npm
|
||||
- npm install -g yarn
|
||||
- yarn
|
||||
|
||||
build_script:
|
||||
- sh: |
|
||||
yarn clean
|
||||
yarn lint
|
||||
yarn test
|
||||
if [[ -z "$CI_TAG" ]]; then
|
||||
yarn build-latest
|
||||
else
|
||||
yarn build
|
||||
fi
|
||||
- sh: |
|
||||
# x64
|
||||
if [[ "$ARCH" == "x64" ]]; then
|
||||
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
|
||||
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
|
||||
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
|
||||
PRODUCT_NAME=CNCjs
|
||||
yarn build:macos-x64
|
||||
ls -al output output/*
|
||||
mkdir -p releases/macos
|
||||
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}.dmg" "releases/macos/${PACKAGE_NAME}-${PACKAGE_VERSION}-macos.x64.dmg"
|
||||
ls -al releases/macos/*
|
||||
if [[ "$CI_BRANCH" == "master" && -z "$CI_TAG" ]]; then
|
||||
yarn github-release delete \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
"*-macos.x64.dmg";
|
||||
yarn github-release upload \
|
||||
--owner=cncjs \
|
||||
--repo=cncjs \
|
||||
--tag="${CI_BRANCH}-latest" \
|
||||
--release-name="${CI_BRANCH}" \
|
||||
--body="${GIT_COMMIT_LOG}" \
|
||||
"releases/macos/${PACKAGE_NAME}-${PACKAGE_VERSION}-macos.x64.dmg";
|
||||
rm -f "releases/macos/${PACKAGE_NAME}-${PACKAGE_VERSION}-macos.x64.dmg";
|
||||
fi
|
||||
fi
|
||||
|
||||
test: off
|
||||
|
||||
# Packaging artifacts
|
||||
# https://www.appveyor.com/docs/packaging-artifacts
|
||||
artifacts:
|
||||
- path: releases/macos/*
|
||||
|
||||
# Publishing artifacts to GitHub Releases
|
||||
# https://www.appveyor.com/docs/deployment/github
|
||||
deploy:
|
||||
- provider: GitHub
|
||||
auth_token:
|
||||
secure: 14dS/9loZ4uMoKGOHGkagaYp5oS30HSIQcPB0FEa7aTEfpb2VJQiUms82hv8nWxY
|
||||
draft: false
|
||||
prerelease: false
|
||||
on:
|
||||
appveyor_repo_tag: true # deploy on tag push only
|
||||
nodejs_version: "12"
|
||||
|
||||
# Windows
|
||||
-
|
||||
matrix:
|
||||
only:
|
||||
- job_name: Windows build (x64)
|
||||
- job_name: Windows build (x86)
|
||||
fast_finish: true
|
||||
|
||||
init:
|
||||
- git --version
|
||||
- git config --global core.autocrlf false
|
||||
- git config --global user.name "AppVeyor"
|
||||
- git config --global user.email "appveyor@ci.appveyor.com"
|
||||
- ps: |
|
||||
$env:CI_BRANCH = $env:APPVEYOR_REPO_BRANCH
|
||||
$env:CI_BUILD_NUMBER = $env:APPVEYOR_BUILD_NUMBER
|
||||
$env:CI_COMMIT = $env:APPVEYOR_REPO_COMMIT
|
||||
$env:CI_COMMIT_SHORT = ${env:APPVEYOR_REPO_COMMIT}.SubString(0,8)
|
||||
$env:CI_COMMIT_TIMESTAMP = $env:APPVEYOR_REPO_COMMIT_TIMESTAMP
|
||||
$env:CI_TAG = $env:APPVEYOR_REPO_TAG_NAME
|
||||
Write-Host "• ARCH=$env:ARCH"
|
||||
Write-Host "• CI_BRANCH=$env:CI_BRANCH"
|
||||
Write-Host "• CI_BUILD_NUMBER=$env:CI_BUILD_NUMBER"
|
||||
Write-Host "• CI_COMMIT=$env:CI_COMMIT"
|
||||
Write-Host "• CI_COMMIT_SHORT=$env:CI_COMMIT_SHORT"
|
||||
Write-Host "• CI_COMMIT_TIMESTAMP=$env:CI_COMMIT_TIMESTAMP"
|
||||
Write-Host "• CI_TAG=$env:CI_TAG"
|
||||
|
||||
install:
|
||||
- ps: Install-Product node $env:nodejs_version
|
||||
- npm config set loglevel warn
|
||||
- npm config set scripts-prepend-node-path auto
|
||||
- npm install -g npm
|
||||
- npm install -g yarn
|
||||
- yarn
|
||||
|
||||
build_script:
|
||||
- ps: |
|
||||
yarn clean
|
||||
yarn lint
|
||||
yarn test
|
||||
if (-not $env:CI_TAG) {
|
||||
yarn build-latest
|
||||
} else {
|
||||
yarn build
|
||||
}
|
||||
- ps: |
|
||||
if ($env:ARCH -eq "x64") {
|
||||
$GIT_COMMIT_LOG = git log -1 --format='%ci %H %s'
|
||||
$PACKAGE_NAME = node -e "console.log(require('./src/package.json').name)"
|
||||
$PACKAGE_VERSION = node -e "console.log(require('./src/package.json').version)"
|
||||
$PRODUCT_NAME = "CNCjs"
|
||||
mkdir -Force -Path releases\windows
|
||||
yarn build:windows-x64
|
||||
Get-ChildItem output
|
||||
Copy-Item "output\${PRODUCT_NAME} Setup ${PACKAGE_VERSION}.exe" "releases\windows\${PACKAGE_NAME}-${PACKAGE_VERSION}-windows-x64.exe"
|
||||
Get-ChildItem releases\windows
|
||||
if ($env:CI_BRANCH -eq "master" -And -not $env:CI_TAG) {
|
||||
yarn github-release delete --owner=cncjs --repo=cncjs --tag="${env:CI_BRANCH}-latest" --release-name="${env:CI_BRANCH}" "*-windows-x64.exe"
|
||||
yarn github-release upload --owner=cncjs --repo=cncjs --tag="${env:CI_BRANCH}-latest" --release-name="${env:CI_BRANCH}" --body="${GIT_COMMIT_LOG}" "releases\windows\${PACKAGE_NAME}-${PACKAGE_VERSION}-windows-x64.exe"
|
||||
Remove-Item "releases\windows\${PACKAGE_NAME}-${PACKAGE_VERSION}-windows-x64.exe"
|
||||
}
|
||||
}
|
||||
- ps: |
|
||||
if ($env:ARCH -eq "x86") {
|
||||
$GIT_COMMIT_LOG = git log -1 --format='%ci %H %s'
|
||||
$PACKAGE_NAME = node -e "console.log(require('./src/package.json').name)"
|
||||
$PACKAGE_VERSION = node -e "console.log(require('./src/package.json').version)"
|
||||
$PRODUCT_NAME = "CNCjs"
|
||||
mkdir -Force -Path releases\windows
|
||||
yarn build:windows-ia32
|
||||
Get-ChildItem output
|
||||
Copy-Item "output\${PRODUCT_NAME} Setup ${PACKAGE_VERSION}.exe" "releases\windows\${PACKAGE_NAME}-${PACKAGE_VERSION}-windows-x86.exe"
|
||||
Get-ChildItem releases\windows
|
||||
if ($env:CI_BRANCH -eq "master" -And -not $env:CI_TAG) {
|
||||
yarn github-release delete --owner=cncjs --repo=cncjs --tag="${env:CI_BRANCH}-latest" --release-name="${env:CI_BRANCH}" "*-windows-x86.exe"
|
||||
yarn github-release upload --owner=cncjs --repo=cncjs --tag="${env:CI_BRANCH}-latest" --release-name="${env:CI_BRANCH}" --body="${GIT_COMMIT_LOG}" "releases\windows\${PACKAGE_NAME}-${PACKAGE_VERSION}-windows-x86.exe"
|
||||
Remove-Item "releases\windows\${PACKAGE_NAME}-${PACKAGE_VERSION}-windows-x86.exe"
|
||||
}
|
||||
}
|
||||
|
||||
test: off
|
||||
|
||||
# Packaging artifacts
|
||||
# https://www.appveyor.com/docs/packaging-artifacts
|
||||
artifacts:
|
||||
- path: releases\windows\*
|
||||
|
||||
# Publishing artifacts to GitHub Releases
|
||||
# https://www.appveyor.com/docs/deployment/github
|
||||
deploy:
|
||||
- provider: GitHub
|
||||
auth_token:
|
||||
secure: 14dS/9loZ4uMoKGOHGkagaYp5oS30HSIQcPB0FEa7aTEfpb2VJQiUms82hv8nWxY
|
||||
draft: false
|
||||
prerelease: false
|
||||
on:
|
||||
appveyor_repo_tag: true # deploy on tag push only
|
||||
nodejs_version: "12"
|
||||
10
cncjs/babel.config.js
Normal file
@@ -0,0 +1,10 @@
|
||||
module.exports = {
|
||||
extends: '@trendmicro/babel-config',
|
||||
presets: [
|
||||
'@babel/preset-env',
|
||||
'@babel/preset-react'
|
||||
],
|
||||
plugins: [
|
||||
'lodash'
|
||||
]
|
||||
};
|
||||
15
cncjs/bin/cnc
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
require('@babel/polyfill');
|
||||
|
||||
const chalk = require('chalk');
|
||||
|
||||
console.warn(chalk.yellow('Warning: The "cnc" executable is deprecated and will be removed in the next major release. Use "cncjs" instead to avoid deprecation.\n'));
|
||||
|
||||
const launchServer = (process.env.NODE_ENV === 'development')
|
||||
? require('../output/server-cli').default
|
||||
: require('../dist/cncjs/server-cli').default;
|
||||
|
||||
launchServer().catch(err => {
|
||||
console.error('Error:', err);
|
||||
});
|
||||
11
cncjs/bin/cncjs
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
require('@babel/polyfill');
|
||||
|
||||
const launchServer = (process.env.NODE_ENV === 'development')
|
||||
? require('../output/cncjs/server-cli').default
|
||||
: require('../dist/cncjs/server-cli').default;
|
||||
|
||||
launchServer().catch(err => {
|
||||
console.error('Error:', err);
|
||||
});
|
||||
22
cncjs/build.config.js
Normal file
@@ -0,0 +1,22 @@
|
||||
module.exports = {
|
||||
languages: [
|
||||
'en', // English (default)
|
||||
'cs', // Czech
|
||||
'de', // German
|
||||
'es', // Spanish
|
||||
'fr', // French
|
||||
'hu', // Hungarian
|
||||
'it', // Italian
|
||||
'ja', // Japanese
|
||||
'nl', // Nederlands
|
||||
'pt-br', // Portuguese (Brazil)
|
||||
'pt-pt', // Portuguese (Portugal)
|
||||
'ru', // Russian
|
||||
'tr', // Turkish
|
||||
'zh-cn', // Simplified Chinese
|
||||
'zh-tw' // Traditional Chinese
|
||||
],
|
||||
analytics: {
|
||||
trackingId: 'UA-107017110-1'
|
||||
}
|
||||
};
|
||||
BIN
cncjs/electron-build/background.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
cncjs/electron-build/icon-round.png
Normal file
|
After Width: | Height: | Size: 191 KiB |
BIN
cncjs/electron-build/icon-square.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
cncjs/electron-build/icon.icns
Normal file
BIN
cncjs/electron-build/icon.ico
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
cncjs/electron-build/install-spinner-256x256.gif
Normal file
|
After Width: | Height: | Size: 303 KiB |
BIN
cncjs/electron-build/install-spinner-300x300.gif
Normal file
|
After Width: | Height: | Size: 322 KiB |
BIN
cncjs/electron-build/install-spinner-400x400.gif
Normal file
|
After Width: | Height: | Size: 315 KiB |
BIN
cncjs/electron-build/install-spinner.gif
Normal file
|
After Width: | Height: | Size: 282 KiB |
9
cncjs/entrypoint
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
require('@babel/polyfill');
|
||||
|
||||
const launchServer = require('/opt/cncjs/server-cli').default;
|
||||
|
||||
launchServer().catch(err => {
|
||||
console.error('Error:', err);
|
||||
});
|
||||
43
cncjs/examples/.cncrc
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"ports": [
|
||||
{
|
||||
"comName": "/dev/ttyAMA0",
|
||||
"manufacturer": ""
|
||||
}
|
||||
],
|
||||
"baudrates": [115200, 250000],
|
||||
"mountPoints": [
|
||||
{
|
||||
"route": "/widget",
|
||||
"target": "https://cncjs.github.io/cncjs-widget-boilerplate/v1/"
|
||||
}
|
||||
],
|
||||
"watchDirectory": "/path/to/dir",
|
||||
"accessTokenLifetime": "30d",
|
||||
"allowRemoteAccess": false,
|
||||
"controller": "",
|
||||
"state": {
|
||||
"checkForUpdates": true
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"title": "Update (root user)",
|
||||
"commands": "sudo npm install -g cncjs@latest --unsafe-perm; pkill -f cncjs"
|
||||
},
|
||||
{
|
||||
"title": "Update (non-root user)",
|
||||
"commands": "npm install -g cncjs@latest; pkill -f cncjs"
|
||||
},
|
||||
{
|
||||
"title": "Reboot",
|
||||
"commands": "sudo /sbin/reboot"
|
||||
},
|
||||
{
|
||||
"title": "Shutdown",
|
||||
"commands": "sudo /sbin/shutdown"
|
||||
}
|
||||
],
|
||||
"events": [],
|
||||
"macros": [],
|
||||
"users": []
|
||||
}
|
||||
988
cncjs/examples/gcode/Circle_Diamond_Square_Calibration.gcode
Normal file
@@ -0,0 +1,988 @@
|
||||
N1 (Credit to Shapeoko Wiki for this calibration file)
|
||||
N2 G17 G21 G90
|
||||
N3 F355
|
||||
N4 G1 Z-1
|
||||
N5 G1 Z1
|
||||
N6 G0 X0 Y0
|
||||
N7 G17 G21 G90
|
||||
N8 G0 Z1
|
||||
N9 G0 X-17.75 Y-17.5
|
||||
N10 G1 Z-3.0
|
||||
N11 G1 X-17.75 Y-17.5
|
||||
N12 G1 X-17.5 Y-17.75
|
||||
N13 G1 X-18.5 Y-18.5
|
||||
N14 G1 Y-15.7
|
||||
N15 G1 X-15.7 Y-18.5
|
||||
N16 G1 X-18.5
|
||||
N17 G1 X-20 Y-20
|
||||
N18 G1 Y-12
|
||||
N19 G1 X-12 Y-20
|
||||
N20 G1 X-20 Y-20
|
||||
N21 G1 X-21.5 Y-21.5
|
||||
N22 G1 Y-8.45
|
||||
N23 G1 X-8.45 Y-21.5
|
||||
N24 G1 X-21.5 Y-21.5
|
||||
N25 G1 X-23 Y-23
|
||||
N26 G1 Y-4.83
|
||||
N27 G1 X-4.83 Y-23
|
||||
N28 G1 X-23 Y-23
|
||||
N29 G1 X-24.5 Y-24.5
|
||||
N30 G1 Y-1.2
|
||||
N31 G1 X-1.2 Y-24.5
|
||||
N32 G1 X-24.5 Y-24.5
|
||||
N33 G1 X-25 Y-25
|
||||
N34 G1 Y0
|
||||
N35 G1 X0 Y-25
|
||||
N36 G1 X-25 Y-25
|
||||
N37 G0 Z1
|
||||
N38 G0 X17.75 Y-17.5
|
||||
N39 G1 Z-3.0
|
||||
N40 G1 X17.75 Y-17.5
|
||||
N41 G1 X17.5 Y-17.75
|
||||
N42 G1 X18.5 Y-18.5
|
||||
N43 G1 Y-15.7
|
||||
N44 G1 X15.7 Y-18.5
|
||||
N45 G1 X18.5
|
||||
N46 G1 X20 Y-20
|
||||
N47 G1 Y-12
|
||||
N48 G1 X12 Y-20
|
||||
N49 G1 X20 Y-20
|
||||
N50 G1 X21.5 Y-21.5
|
||||
N51 G1 Y-8.45
|
||||
N52 G1 X8.45 Y-21.5
|
||||
N53 G1 X21.5 Y-21.5
|
||||
N54 G1 X23 Y-23
|
||||
N55 G1 Y-4.83
|
||||
N56 G1 X4.83 Y-23
|
||||
N57 G1 X23 Y-23
|
||||
N58 G1 X24.5 Y-24.5
|
||||
N59 G1 Y-1.2
|
||||
N60 G1 X1.2 Y-24.5
|
||||
N61 G1 X24.5 Y-24.5
|
||||
N62 G1 X25 Y-25
|
||||
N63 G1 Y0
|
||||
N64 G1 X0 Y-25
|
||||
N65 G1 X25 Y-25
|
||||
N66 G0 Z1
|
||||
N67 G0 X17.75 Y17.5
|
||||
N68 G1 Z-3.0
|
||||
N69 G1 X17.75 Y17.5
|
||||
N70 G1 X17.5 Y17.75
|
||||
N71 G1 X18.5 Y18.5
|
||||
N72 G1 Y15.7
|
||||
N73 G1 X15.7 Y18.5
|
||||
N74 G1 X18.5
|
||||
N75 G1 X20 Y20
|
||||
N76 G1 Y12
|
||||
N77 G1 X12 Y20
|
||||
N78 G1 X20 Y20
|
||||
N79 G1 X21.5 Y21.5
|
||||
N80 G1 Y8.45
|
||||
N81 G1 X8.45 Y21.5
|
||||
N82 G1 X21.5 Y21.5
|
||||
N83 G1 X23 Y23
|
||||
N84 G1 Y4.83
|
||||
N85 G1 X4.83 Y23
|
||||
N86 G1 X23 Y23
|
||||
N87 G1 X24.5 Y24.5
|
||||
N88 G1 Y1.2
|
||||
N89 G1 X1.2 Y24.5
|
||||
N90 G1 X24.5 Y24.5
|
||||
N91 G1 X25 Y25
|
||||
N92 G1 Y0
|
||||
N93 G1 X0 Y25
|
||||
N94 G1 X25 Y25
|
||||
N95 G0 Z1
|
||||
N96 G0 X-17.75 Y17.5
|
||||
N97 G1 Z-3.0
|
||||
N98 G1 X-17.75 Y17.5
|
||||
N99 G1 X-17.5 Y17.75
|
||||
N100 G1 X-18.5 Y18.5
|
||||
N101 G1 Y15.7
|
||||
N102 G1 X-15.7 Y18.5
|
||||
N103 G1 X-18.5
|
||||
N104 G1 X-20 Y20
|
||||
N105 G1 Y12
|
||||
N106 G1 X-12 Y20
|
||||
N107 G1 X-20 Y20
|
||||
N108 G1 X-21.5 Y21.5
|
||||
N109 G1 Y8.45
|
||||
N110 G1 X-8.45 Y21.5
|
||||
N111 G1 X-21.5 Y21.5
|
||||
N112 G1 X-23 Y23
|
||||
N113 G1 Y4.83
|
||||
N114 G1 X-4.83 Y23
|
||||
N115 G1 X-23 Y23
|
||||
N116 G1 X-24.5 Y24.5
|
||||
N117 G1 Y1.2
|
||||
N118 G1 X-1.2 Y24.5
|
||||
N119 G1 X-24.5 Y24.5
|
||||
N120 G1 X-25 Y25
|
||||
N121 G1 Y0
|
||||
N122 G1 X-0 Y25
|
||||
N123 G1 X-25 Y25
|
||||
N124 G0 Z1
|
||||
N125 G0 X0 Y0
|
||||
N126 G17 G21 G90
|
||||
N127 G0 Z1
|
||||
N128 G0 X-17.75 Y-17.5
|
||||
N129 G1 Z-3.5
|
||||
N130 G1 X-17.75 Y-17.5
|
||||
N131 G1 X-17.5 Y-17.75
|
||||
N132 G1 X-18.5 Y-18.5
|
||||
N133 G1 Y-15.7
|
||||
N134 G1 X-15.7 Y-18.5
|
||||
N135 G1 X-18.5
|
||||
N136 G1 X-20 Y-20
|
||||
N137 G1 Y-12
|
||||
N138 G1 X-12 Y-20
|
||||
N139 G1 X-20 Y-20
|
||||
N140 G1 X-21.5 Y-21.5
|
||||
N141 G1 Y-8.45
|
||||
N142 G1 X-8.45 Y-21.5
|
||||
N143 G1 X-21.5 Y-21.5
|
||||
N144 G1 X-23 Y-23
|
||||
N145 G1 Y-4.83
|
||||
N146 G1 X-4.83 Y-23
|
||||
N147 G1 X-23 Y-23
|
||||
N148 G1 X-24.5 Y-24.5
|
||||
N149 G1 Y-1.2
|
||||
N150 G1 X-1.2 Y-24.5
|
||||
N151 G1 X-24.5 Y-24.5
|
||||
N152 G1 X-25 Y-25
|
||||
N153 G1 Y0
|
||||
N154 G1 X0 Y-25
|
||||
N155 G1 X-25 Y-25
|
||||
N156 G0 Z1
|
||||
N157 G0 X17.75 Y-17.5
|
||||
N158 G1 Z-3.5
|
||||
N159 G1 X17.75 Y-17.5
|
||||
N160 G1 X17.5 Y-17.75
|
||||
N161 G1 X18.5 Y-18.5
|
||||
N162 G1 Y-15.7
|
||||
N163 G1 X15.7 Y-18.5
|
||||
N164 G1 X18.5
|
||||
N165 G1 X20 Y-20
|
||||
N166 G1 Y-12
|
||||
N167 G1 X12 Y-20
|
||||
N168 G1 X20 Y-20
|
||||
N169 G1 X21.5 Y-21.5
|
||||
N170 G1 Y-8.45
|
||||
N171 G1 X8.45 Y-21.5
|
||||
N172 G1 X21.5 Y-21.5
|
||||
N173 G1 X23 Y-23
|
||||
N174 G1 Y-4.83
|
||||
N175 G1 X4.83 Y-23
|
||||
N176 G1 X23 Y-23
|
||||
N177 G1 X24.5 Y-24.5
|
||||
N178 G1 Y-1.2
|
||||
N179 G1 X1.2 Y-24.5
|
||||
N180 G1 X24.5 Y-24.5
|
||||
N181 G1 X25 Y-25
|
||||
N182 G1 Y0
|
||||
N183 G1 X0 Y-25
|
||||
N184 G1 X25 Y-25
|
||||
N185 G0 Z1
|
||||
N186 G0 X17.75 Y17.5
|
||||
N187 G1 Z-3.5
|
||||
N188 G1 X17.75 Y17.5
|
||||
N189 G1 X17.5 Y17.75
|
||||
N190 G1 X18.5 Y18.5
|
||||
N191 G1 Y15.7
|
||||
N192 G1 X15.7 Y18.5
|
||||
N193 G1 X18.5
|
||||
N194 G1 X20 Y20
|
||||
N195 G1 Y12
|
||||
N196 G1 X12 Y20
|
||||
N197 G1 X20 Y20
|
||||
N198 G1 X21.5 Y21.5
|
||||
N199 G1 Y8.45
|
||||
N200 G1 X8.45 Y21.5
|
||||
N201 G1 X21.5 Y21.5
|
||||
N202 G1 X23 Y23
|
||||
N203 G1 Y4.83
|
||||
N204 G1 X4.83 Y23
|
||||
N205 G1 X23 Y23
|
||||
N206 G1 X24.5 Y24.5
|
||||
N207 G1 Y1.2
|
||||
N208 G1 X1.2 Y24.5
|
||||
N209 G1 X24.5 Y24.5
|
||||
N210 G1 X25 Y25
|
||||
N211 G1 Y0
|
||||
N212 G1 X0 Y25
|
||||
N213 G1 X25 Y25
|
||||
N214 G0 Z1
|
||||
N215 G0 X-17.75 Y17.5
|
||||
N216 G1 Z-3.5
|
||||
N217 G1 X-17.75 Y17.5
|
||||
N218 G1 X-17.5 Y17.75
|
||||
N219 G1 X-18.5 Y18.5
|
||||
N220 G1 Y15.7
|
||||
N221 G1 X-15.7 Y18.5
|
||||
N222 G1 X-18.5
|
||||
N223 G1 X-20 Y20
|
||||
N224 G1 Y12
|
||||
N225 G1 X-12 Y20
|
||||
N226 G1 X-20 Y20
|
||||
N227 G1 X-21.5 Y21.5
|
||||
N228 G1 Y8.45
|
||||
N229 G1 X-8.45 Y21.5
|
||||
N230 G1 X-21.5 Y21.5
|
||||
N231 G1 X-23 Y23
|
||||
N232 G1 Y4.83
|
||||
N233 G1 X-4.83 Y23
|
||||
N234 G1 X-23 Y23
|
||||
N235 G1 X-24.5 Y24.5
|
||||
N236 G1 Y1.2
|
||||
N237 G1 X-1.2 Y24.5
|
||||
N238 G1 X-24.5 Y24.5
|
||||
N239 G1 X-25 Y25
|
||||
N240 G1 Y0
|
||||
N241 G1 X-0 Y25
|
||||
N242 G1 X-25 Y25
|
||||
N243 G0 Z1
|
||||
N244 G0 X0 Y0
|
||||
N245 G17 G21 G90
|
||||
N246 G0 Z1
|
||||
N247 G0 X-17.75 Y-17.5
|
||||
N248 G1 Z-4.0
|
||||
N249 G1 X-17.75 Y-17.5
|
||||
N250 G1 X-17.5 Y-17.75
|
||||
N251 G1 X-18.5 Y-18.5
|
||||
N252 G1 Y-15.7
|
||||
N253 G1 X-15.7 Y-18.5
|
||||
N254 G1 X-18.5
|
||||
N255 G1 X-20 Y-20
|
||||
N256 G1 Y-12
|
||||
N257 G1 X-12 Y-20
|
||||
N258 G1 X-20 Y-20
|
||||
N259 G1 X-21.5 Y-21.5
|
||||
N260 G1 Y-8.45
|
||||
N261 G1 X-8.45 Y-21.5
|
||||
N262 G1 X-21.5 Y-21.5
|
||||
N263 G1 X-23 Y-23
|
||||
N264 G1 Y-4.83
|
||||
N265 G1 X-4.83 Y-23
|
||||
N266 G1 X-23 Y-23
|
||||
N267 G1 X-24.5 Y-24.5
|
||||
N268 G1 Y-1.2
|
||||
N269 G1 X-1.2 Y-24.5
|
||||
N270 G1 X-24.5 Y-24.5
|
||||
N271 G1 X-25 Y-25
|
||||
N272 G1 Y0
|
||||
N273 G1 X0 Y-25
|
||||
N274 G1 X-25 Y-25
|
||||
N275 G0 Z1
|
||||
N276 G0 X17.75 Y-17.5
|
||||
N277 G1 Z-4.0
|
||||
N278 G1 X17.75 Y-17.5
|
||||
N279 G1 X17.5 Y-17.75
|
||||
N280 G1 X18.5 Y-18.5
|
||||
N281 G1 Y-15.7
|
||||
N282 G1 X15.7 Y-18.5
|
||||
N283 G1 X18.5
|
||||
N284 G1 X20 Y-20
|
||||
N285 G1 Y-12
|
||||
N286 G1 X12 Y-20
|
||||
N287 G1 X20 Y-20
|
||||
N288 G1 X21.5 Y-21.5
|
||||
N289 G1 Y-8.45
|
||||
N290 G1 X8.45 Y-21.5
|
||||
N291 G1 X21.5 Y-21.5
|
||||
N292 G1 X23 Y-23
|
||||
N293 G1 Y-4.83
|
||||
N294 G1 X4.83 Y-23
|
||||
N295 G1 X23 Y-23
|
||||
N296 G1 X24.5 Y-24.5
|
||||
N297 G1 Y-1.2
|
||||
N298 G1 X1.2 Y-24.5
|
||||
N299 G1 X24.5 Y-24.5
|
||||
N300 G1 X25 Y-25
|
||||
N301 G1 Y0
|
||||
N302 G1 X0 Y-25
|
||||
N303 G1 X25 Y-25
|
||||
N304 G0 Z1
|
||||
N305 G0 X17.75 Y17.5
|
||||
N306 G1 Z-4.0
|
||||
N307 G1 X17.75 Y17.5
|
||||
N308 G1 X17.5 Y17.75
|
||||
N309 G1 X18.5 Y18.5
|
||||
N310 G1 Y15.7
|
||||
N311 G1 X15.7 Y18.5
|
||||
N312 G1 X18.5
|
||||
N313 G1 X20 Y20
|
||||
N314 G1 Y12
|
||||
N315 G1 X12 Y20
|
||||
N316 G1 X20 Y20
|
||||
N317 G1 X21.5 Y21.5
|
||||
N318 G1 Y8.45
|
||||
N319 G1 X8.45 Y21.5
|
||||
N320 G1 X21.5 Y21.5
|
||||
N321 G1 X23 Y23
|
||||
N322 G1 Y4.83
|
||||
N323 G1 X4.83 Y23
|
||||
N324 G1 X23 Y23
|
||||
N325 G1 X24.5 Y24.5
|
||||
N326 G1 Y1.2
|
||||
N327 G1 X1.2 Y24.5
|
||||
N328 G1 X24.5 Y24.5
|
||||
N329 G1 X25 Y25
|
||||
N330 G1 Y0
|
||||
N331 G1 X0 Y25
|
||||
N332 G1 X25 Y25
|
||||
N333 G0 Z1
|
||||
N334 G0 X-17.75 Y17.5
|
||||
N335 G1 Z-4.0
|
||||
N336 G1 X-17.75 Y17.5
|
||||
N337 G1 X-17.5 Y17.75
|
||||
N338 G1 X-18.5 Y18.5
|
||||
N339 G1 Y15.7
|
||||
N340 G1 X-15.7 Y18.5
|
||||
N341 G1 X-18.5
|
||||
N342 G1 X-20 Y20
|
||||
N343 G1 Y12
|
||||
N344 G1 X-12 Y20
|
||||
N345 G1 X-20 Y20
|
||||
N346 G1 X-21.5 Y21.5
|
||||
N347 G1 Y8.45
|
||||
N348 G1 X-8.45 Y21.5
|
||||
N349 G1 X-21.5 Y21.5
|
||||
N350 G1 X-23 Y23
|
||||
N351 G1 Y4.83
|
||||
N352 G1 X-4.83 Y23
|
||||
N353 G1 X-23 Y23
|
||||
N354 G1 X-24.5 Y24.5
|
||||
N355 G1 Y1.2
|
||||
N356 G1 X-1.2 Y24.5
|
||||
N357 G1 X-24.5 Y24.5
|
||||
N358 G1 X-25 Y25
|
||||
N359 G1 Y0
|
||||
N360 G1 X-0 Y25
|
||||
N361 G1 X-25 Y25
|
||||
N362 G0 Z1
|
||||
N363 G0 X0 Y0
|
||||
N364 G17 G21 G90
|
||||
N365 G0 Z1
|
||||
N366 G0 X-17.75 Y-17.5
|
||||
N367 G1 Z-4.5
|
||||
N368 G1 X-17.75 Y-17.5
|
||||
N369 G1 X-17.5 Y-17.75
|
||||
N370 G1 X-18.5 Y-18.5
|
||||
N371 G1 Y-15.7
|
||||
N372 G1 X-15.7 Y-18.5
|
||||
N373 G1 X-18.5
|
||||
N374 G1 X-20 Y-20
|
||||
N375 G1 Y-12
|
||||
N376 G1 X-12 Y-20
|
||||
N377 G1 X-20 Y-20
|
||||
N378 G1 X-21.5 Y-21.5
|
||||
N379 G1 Y-8.45
|
||||
N380 G1 X-8.45 Y-21.5
|
||||
N381 G1 X-21.5 Y-21.5
|
||||
N382 G1 X-23 Y-23
|
||||
N383 G1 Y-4.83
|
||||
N384 G1 X-4.83 Y-23
|
||||
N385 G1 X-23 Y-23
|
||||
N386 G1 X-24.5 Y-24.5
|
||||
N387 G1 Y-1.2
|
||||
N388 G1 X-1.2 Y-24.5
|
||||
N389 G1 X-24.5 Y-24.5
|
||||
N390 G1 X-25 Y-25
|
||||
N391 G1 Y0
|
||||
N392 G1 X0 Y-25
|
||||
N393 G1 X-25 Y-25
|
||||
N394 G0 Z1
|
||||
N395 G0 X17.75 Y-17.5
|
||||
N396 G1 Z-4.5
|
||||
N397 G1 X17.75 Y-17.5
|
||||
N398 G1 X17.5 Y-17.75
|
||||
N399 G1 X18.5 Y-18.5
|
||||
N400 G1 Y-15.7
|
||||
N401 G1 X15.7 Y-18.5
|
||||
N402 G1 X18.5
|
||||
N403 G1 X20 Y-20
|
||||
N404 G1 Y-12
|
||||
N405 G1 X12 Y-20
|
||||
N406 G1 X20 Y-20
|
||||
N407 G1 X21.5 Y-21.5
|
||||
N408 G1 Y-8.45
|
||||
N409 G1 X8.45 Y-21.5
|
||||
N410 G1 X21.5 Y-21.5
|
||||
N411 G1 X23 Y-23
|
||||
N412 G1 Y-4.83
|
||||
N413 G1 X4.83 Y-23
|
||||
N414 G1 X23 Y-23
|
||||
N415 G1 X24.5 Y-24.5
|
||||
N416 G1 Y-1.2
|
||||
N417 G1 X1.2 Y-24.5
|
||||
N418 G1 X24.5 Y-24.5
|
||||
N419 G1 X25 Y-25
|
||||
N420 G1 Y0
|
||||
N421 G1 X0 Y-25
|
||||
N422 G1 X25 Y-25
|
||||
N423 G0 Z1
|
||||
N424 G0 X17.75 Y17.5
|
||||
N425 G1 Z-4.5
|
||||
N426 G1 X17.75 Y17.5
|
||||
N427 G1 X17.5 Y17.75
|
||||
N428 G1 X18.5 Y18.5
|
||||
N429 G1 Y15.7
|
||||
N430 G1 X15.7 Y18.5
|
||||
N431 G1 X18.5
|
||||
N432 G1 X20 Y20
|
||||
N433 G1 Y12
|
||||
N434 G1 X12 Y20
|
||||
N435 G1 X20 Y20
|
||||
N436 G1 X21.5 Y21.5
|
||||
N437 G1 Y8.45
|
||||
N438 G1 X8.45 Y21.5
|
||||
N439 G1 X21.5 Y21.5
|
||||
N440 G1 X23 Y23
|
||||
N441 G1 Y4.83
|
||||
N442 G1 X4.83 Y23
|
||||
N443 G1 X23 Y23
|
||||
N444 G1 X24.5 Y24.5
|
||||
N445 G1 Y1.2
|
||||
N446 G1 X1.2 Y24.5
|
||||
N447 G1 X24.5 Y24.5
|
||||
N448 G1 X25 Y25
|
||||
N449 G1 Y0
|
||||
N450 G1 X0 Y25
|
||||
N451 G1 X25 Y25
|
||||
N452 G0 Z1
|
||||
N453 G0 X-17.75 Y17.5
|
||||
N454 G1 Z-4.5
|
||||
N455 G1 X-17.75 Y17.5
|
||||
N456 G1 X-17.5 Y17.75
|
||||
N457 G1 X-18.5 Y18.5
|
||||
N458 G1 Y15.7
|
||||
N459 G1 X-15.7 Y18.5
|
||||
N460 G1 X-18.5
|
||||
N461 G1 X-20 Y20
|
||||
N462 G1 Y12
|
||||
N463 G1 X-12 Y20
|
||||
N464 G1 X-20 Y20
|
||||
N465 G1 X-21.5 Y21.5
|
||||
N466 G1 Y8.45
|
||||
N467 G1 X-8.45 Y21.5
|
||||
N468 G1 X-21.5 Y21.5
|
||||
N469 G1 X-23 Y23
|
||||
N470 G1 Y4.83
|
||||
N471 G1 X-4.83 Y23
|
||||
N472 G1 X-23 Y23
|
||||
N473 G1 X-24.5 Y24.5
|
||||
N474 G1 Y1.2
|
||||
N475 G1 X-1.2 Y24.5
|
||||
N476 G1 X-24.5 Y24.5
|
||||
N477 G1 X-25 Y25
|
||||
N478 G1 Y0
|
||||
N479 G1 X-0 Y25
|
||||
N480 G1 X-25 Y25
|
||||
N481 G0 Z1
|
||||
N482 G0 X0 Y0
|
||||
N483 G17 G21 G90
|
||||
N484 G0 Z1
|
||||
N485 G0 X-17.75 Y-17.5
|
||||
N486 G1 Z-5.0
|
||||
N487 G1 X-17.75 Y-17.5
|
||||
N488 G1 X-17.5 Y-17.75
|
||||
N489 G1 X-18.5 Y-18.5
|
||||
N490 G1 Y-15.7
|
||||
N491 G1 X-15.7 Y-18.5
|
||||
N492 G1 X-18.5
|
||||
N493 G1 X-20 Y-20
|
||||
N494 G1 Y-12
|
||||
N495 G1 X-12 Y-20
|
||||
N496 G1 X-20 Y-20
|
||||
N497 G1 X-21.5 Y-21.5
|
||||
N498 G1 Y-8.45
|
||||
N499 G1 X-8.45 Y-21.5
|
||||
N500 G1 X-21.5 Y-21.5
|
||||
N501 G1 X-23 Y-23
|
||||
N502 G1 Y-4.83
|
||||
N503 G1 X-4.83 Y-23
|
||||
N504 G1 X-23 Y-23
|
||||
N505 G1 X-24.5 Y-24.5
|
||||
N506 G1 Y-1.2
|
||||
N507 G1 X-1.2 Y-24.5
|
||||
N508 G1 X-24.5 Y-24.5
|
||||
N509 G1 X-25 Y-25
|
||||
N510 G1 Y0
|
||||
N511 G1 X0 Y-25
|
||||
N512 G1 X-25 Y-25
|
||||
N513 G0 Z1
|
||||
N514 G0 X17.75 Y-17.5
|
||||
N515 G1 Z-5.0
|
||||
N516 G1 X17.75 Y-17.5
|
||||
N517 G1 X17.5 Y-17.75
|
||||
N518 G1 X18.5 Y-18.5
|
||||
N519 G1 Y-15.7
|
||||
N520 G1 X15.7 Y-18.5
|
||||
N521 G1 X18.5
|
||||
N522 G1 X20 Y-20
|
||||
N523 G1 Y-12
|
||||
N524 G1 X12 Y-20
|
||||
N525 G1 X20 Y-20
|
||||
N526 G1 X21.5 Y-21.5
|
||||
N527 G1 Y-8.45
|
||||
N528 G1 X8.45 Y-21.5
|
||||
N529 G1 X21.5 Y-21.5
|
||||
N530 G1 X23 Y-23
|
||||
N531 G1 Y-4.83
|
||||
N532 G1 X4.83 Y-23
|
||||
N533 G1 X23 Y-23
|
||||
N534 G1 X24.5 Y-24.5
|
||||
N535 G1 Y-1.2
|
||||
N536 G1 X1.2 Y-24.5
|
||||
N537 G1 X24.5 Y-24.5
|
||||
N538 G1 X25 Y-25
|
||||
N539 G1 Y0
|
||||
N540 G1 X0 Y-25
|
||||
N541 G1 X25 Y-25
|
||||
N542 G0 Z1
|
||||
N543 G0 X17.75 Y17.5
|
||||
N544 G1 Z-5.0
|
||||
N545 G1 X17.75 Y17.5
|
||||
N546 G1 X17.5 Y17.75
|
||||
N547 G1 X18.5 Y18.5
|
||||
N548 G1 Y15.7
|
||||
N549 G1 X15.7 Y18.5
|
||||
N550 G1 X18.5
|
||||
N551 G1 X20 Y20
|
||||
N552 G1 Y12
|
||||
N553 G1 X12 Y20
|
||||
N554 G1 X20 Y20
|
||||
N555 G1 X21.5 Y21.5
|
||||
N556 G1 Y8.45
|
||||
N557 G1 X8.45 Y21.5
|
||||
N558 G1 X21.5 Y21.5
|
||||
N559 G1 X23 Y23
|
||||
N560 G1 Y4.83
|
||||
N561 G1 X4.83 Y23
|
||||
N562 G1 X23 Y23
|
||||
N563 G1 X24.5 Y24.5
|
||||
N564 G1 Y1.2
|
||||
N565 G1 X1.2 Y24.5
|
||||
N566 G1 X24.5 Y24.5
|
||||
N567 G1 X25 Y25
|
||||
N568 G1 Y0
|
||||
N569 G1 X0 Y25
|
||||
N570 G1 X25 Y25
|
||||
N571 G0 Z1
|
||||
N572 G0 X-17.75 Y17.5
|
||||
N573 G1 Z-5.0
|
||||
N574 G1 X-17.75 Y17.5
|
||||
N575 G1 X-17.5 Y17.75
|
||||
N576 G1 X-18.5 Y18.5
|
||||
N577 G1 Y15.7
|
||||
N578 G1 X-15.7 Y18.5
|
||||
N579 G1 X-18.5
|
||||
N580 G1 X-20 Y20
|
||||
N581 G1 Y12
|
||||
N582 G1 X-12 Y20
|
||||
N583 G1 X-20 Y20
|
||||
N584 G1 X-21.5 Y21.5
|
||||
N585 G1 Y8.45
|
||||
N586 G1 X-8.45 Y21.5
|
||||
N587 G1 X-21.5 Y21.5
|
||||
N588 G1 X-23 Y23
|
||||
N589 G1 Y4.83
|
||||
N590 G1 X-4.83 Y23
|
||||
N591 G1 X-23 Y23
|
||||
N592 G1 X-24.5 Y24.5
|
||||
N593 G1 Y1.2
|
||||
N594 G1 X-1.2 Y24.5
|
||||
N595 G1 X-24.5 Y24.5
|
||||
N596 G1 X-25 Y25
|
||||
N597 G1 Y0
|
||||
N598 G1 X-0 Y25
|
||||
N599 G1 X-25 Y25
|
||||
N600 G0 Z1
|
||||
N601 G0 X0 Y0
|
||||
N602 G0 Z1
|
||||
N603 G0 X-21 Y-21
|
||||
N604 G1 Z-5.5
|
||||
N605 G1 X-21 Y-20
|
||||
N606 G3 X-20 Y-21 I21 J20
|
||||
N607 G1 X-21 Y-21
|
||||
N608 G1 X-22.5 Y-22.5
|
||||
N609 G1 Y-15.8
|
||||
N610 G3 X-15.8 Y-22.5 I22.5 J15.8
|
||||
N611 G1 X-22.5
|
||||
N612 G1 X-24 Y-24
|
||||
N613 G1 Y-10
|
||||
N614 G3 X-10 Y-24 I24 J10
|
||||
N615 G1 X-24
|
||||
N616 G1 X-25 Y-25
|
||||
N617 G1 Y0
|
||||
N618 G3 X0 Y-25 I25 J0
|
||||
N619 G1 X-25
|
||||
N620 G0 Z1
|
||||
N621 G0 X21 Y-21
|
||||
N622 G1 Z-5.5
|
||||
N623 G1 X20
|
||||
N624 G3 X21 Y-20 I20 J21
|
||||
N625 G1 Y-21
|
||||
N626 G1 X22.5 Y-22.5
|
||||
N627 G1 X15.8
|
||||
N628 G3 X22.5 Y-15.8 I-15.8 J22.5
|
||||
N629 G1 Y-22.5
|
||||
N630 G1 X24 Y-24
|
||||
N631 G1 X10
|
||||
N632 G3 X24 Y-10 I-10 J24
|
||||
N633 G1 Y-24
|
||||
N634 G1 X25 Y-25
|
||||
N635 G1 X0
|
||||
N636 G3 X25 Y0 I0 J25
|
||||
N637 G1 Y-25
|
||||
N638 G1 Z1
|
||||
N639 G0 X21 Y21
|
||||
N640 G1 Z-5.5
|
||||
N641 G1 X21 Y20
|
||||
N642 G3 X20 Y21 I-21 J-20
|
||||
N643 G1 X21 Y21
|
||||
N644 G1 X22.5 Y22.5
|
||||
N645 G1 Y15.8
|
||||
N646 G3 X15.8 Y22.5 I-22.5 J-15.8
|
||||
N647 G1 X22.5
|
||||
N648 G1 X24 Y24
|
||||
N649 G1 Y10
|
||||
N650 G3 X10 Y24 I-24 J-10
|
||||
N651 G1 X24
|
||||
N652 G1 X25 Y25
|
||||
N653 G1 Y0
|
||||
N654 G3 X0 Y25 I-25 J0
|
||||
N655 G1 X25
|
||||
N656 G0 Z1
|
||||
N657 G0 X-21 Y21
|
||||
N658 G1 Z-5.5
|
||||
N659 G1 X-20
|
||||
N660 G3 X-21 Y20 I20 J-21
|
||||
N661 G1 Y21
|
||||
N662 G1 X-22.5 Y22.5
|
||||
N663 G1 X-15.8
|
||||
N664 G3 X-22.5 Y15.8 I15.8 J-22.5
|
||||
N665 G1 Y22.5
|
||||
N666 G1 X-24 Y24
|
||||
N667 G1 X-10
|
||||
N668 G3 X-24 Y10 I10 J-24
|
||||
N669 G1 Y24
|
||||
N670 G1 X-25 Y25
|
||||
N671 G1 X0
|
||||
N672 G3 X-25 Y0 I0 J-25
|
||||
N673 G1 Y25
|
||||
N674 G0 Z1
|
||||
N675 G0 X-21 Y-21
|
||||
N676 G1 Z-6
|
||||
N677 G1 X-21 Y-20
|
||||
N678 G3 X-20 Y-21 I21 J20
|
||||
N679 G1 X-21 Y-21
|
||||
N680 G1 X-22.5 Y-22.5
|
||||
N681 G1 Y-15.8
|
||||
N682 G3 X-15.8 Y-22.5 I22.5 J15.8
|
||||
N683 G1 X-22.5
|
||||
N684 G1 X-24 Y-24
|
||||
N685 G1 Y-10
|
||||
N686 G3 X-10 Y-24 I24 J10
|
||||
N687 G1 X-24
|
||||
N688 G1 X-25 Y-25
|
||||
N689 G1 Y0
|
||||
N690 G3 X0 Y-25 I25 J0
|
||||
N691 G1 X-25
|
||||
N692 G0 Z1
|
||||
N693 G0 X21 Y-21
|
||||
N694 G1 Z-6
|
||||
N695 G1 X20
|
||||
N696 G3 X21 Y-20 I20 J21
|
||||
N697 G1 Y-21
|
||||
N698 G1 X22.5 Y-22.5
|
||||
N699 G1 X15.8
|
||||
N700 G3 X22.5 Y-15.8 I-15.8 J22.5
|
||||
N701 G1 Y-22.5
|
||||
N702 G1 X24 Y-24
|
||||
N703 G1 X10
|
||||
N704 G3 X24 Y-10 I-10 J24
|
||||
N705 G1 Y-24
|
||||
N706 G1 X25 Y-25
|
||||
N707 G1 X0
|
||||
N708 G3 X25 Y0 I0 J25
|
||||
N709 G1 Y-25
|
||||
N710 G1 Z1
|
||||
N711 G0 X21 Y21
|
||||
N712 G1 Z-6
|
||||
N713 G1 X21 Y20
|
||||
N714 G3 X20 Y21 I-21 J-20
|
||||
N715 G1 X21 Y21
|
||||
N716 G1 X22.5 Y22.5
|
||||
N717 G1 Y15.8
|
||||
N718 G3 X15.8 Y22.5 I-22.5 J-15.8
|
||||
N719 G1 X22.5
|
||||
N720 G1 X24 Y24
|
||||
N721 G1 Y10
|
||||
N722 G3 X10 Y24 I-24 J-10
|
||||
N723 G1 X24
|
||||
N724 G1 X25 Y25
|
||||
N725 G1 Y0
|
||||
N726 G3 X0 Y25 I-25 J0
|
||||
N727 G1 X25
|
||||
N728 G0 Z1
|
||||
N729 G0 X-21 Y21
|
||||
N730 G1 Z-6
|
||||
N731 G1 X-20
|
||||
N732 G3 X-21 Y20 I20 J-21
|
||||
N733 G1 Y21
|
||||
N734 G1 X-22.5 Y22.5
|
||||
N735 G1 X-15.8
|
||||
N736 G3 X-22.5 Y15.8 I15.8 J-22.5
|
||||
N737 G1 Y22.5
|
||||
N738 G1 X-24 Y24
|
||||
N739 G1 X-10
|
||||
N740 G3 X-24 Y10 I10 J-24
|
||||
N741 G1 Y24
|
||||
N742 G1 X-25 Y25
|
||||
N743 G1 X0
|
||||
N744 G3 X-25 Y0 I0 J-25
|
||||
N745 G1 Y25
|
||||
N746 G0 Z1
|
||||
N747 G0 X-21 Y-21
|
||||
N748 G1 Z-6.5
|
||||
N749 G1 X-21 Y-20
|
||||
N750 G3 X-20 Y-21 I21 J20
|
||||
N751 G1 X-21 Y-21
|
||||
N752 G1 X-22.5 Y-22.5
|
||||
N753 G1 Y-15.8
|
||||
N754 G3 X-15.8 Y-22.5 I22.5 J15.8
|
||||
N755 G1 X-22.5
|
||||
N756 G1 X-24 Y-24
|
||||
N757 G1 Y-10
|
||||
N758 G3 X-10 Y-24 I24 J10
|
||||
N759 G1 X-24
|
||||
N760 G1 X-25 Y-25
|
||||
N761 G1 Y0
|
||||
N762 G3 X0 Y-25 I25 J0
|
||||
N763 G1 X-25
|
||||
N764 G0 Z1
|
||||
N765 G0 X21 Y-21
|
||||
N766 G1 Z-6.5
|
||||
N767 G1 X20
|
||||
N768 G3 X21 Y-20 I20 J21
|
||||
N769 G1 Y-21
|
||||
N770 G1 X22.5 Y-22.5
|
||||
N771 G1 X15.8
|
||||
N772 G3 X22.5 Y-15.8 I-15.8 J22.5
|
||||
N773 G1 Y-22.5
|
||||
N774 G1 X24 Y-24
|
||||
N775 G1 X10
|
||||
N776 G3 X24 Y-10 I-10 J24
|
||||
N777 G1 Y-24
|
||||
N778 G1 X25 Y-25
|
||||
N779 G1 X0
|
||||
N780 G3 X25 Y0 I0 J25
|
||||
N781 G1 Y-25
|
||||
N782 G1 Z1
|
||||
N783 G0 X21 Y21
|
||||
N784 G1 Z-6.5
|
||||
N785 G1 X21 Y20
|
||||
N786 G3 X20 Y21 I-21 J-20
|
||||
N787 G1 X21 Y21
|
||||
N788 G1 X22.5 Y22.5
|
||||
N789 G1 Y15.8
|
||||
N790 G3 X15.8 Y22.5 I-22.5 J-15.8
|
||||
N791 G1 X22.5
|
||||
N792 G1 X24 Y24
|
||||
N793 G1 Y10
|
||||
N794 G3 X10 Y24 I-24 J-10
|
||||
N795 G1 X24
|
||||
N796 G1 X25 Y25
|
||||
N797 G1 Y0
|
||||
N798 G3 X0 Y25 I-25 J0
|
||||
N799 G1 X25
|
||||
N800 G0 Z1
|
||||
N801 G0 X-21 Y21
|
||||
N802 G1 Z-6.5
|
||||
N803 G1 X-20
|
||||
N804 G3 X-21 Y20 I20 J-21
|
||||
N805 G1 Y21
|
||||
N806 G1 X-22.5 Y22.5
|
||||
N807 G1 X-15.8
|
||||
N808 G3 X-22.5 Y15.8 I15.8 J-22.5
|
||||
N809 G1 Y22.5
|
||||
N810 G1 X-24 Y24
|
||||
N811 G1 X-10
|
||||
N812 G3 X-24 Y10 I10 J-24
|
||||
N813 G1 Y24
|
||||
N814 G1 X-25 Y25
|
||||
N815 G1 X0
|
||||
N816 G3 X-25 Y0 I0 J-25
|
||||
N817 G1 Y25
|
||||
N818 G0 Z1
|
||||
N819 G0 X-21 Y-21
|
||||
N820 G1 Z-7
|
||||
N821 G1 X-21 Y-20
|
||||
N822 G3 X-20 Y-21 I21 J20
|
||||
N823 G1 X-21 Y-21
|
||||
N824 G1 X-22.5 Y-22.5
|
||||
N825 G1 Y-15.8
|
||||
N826 G3 X-15.8 Y-22.5 I22.5 J15.8
|
||||
N827 G1 X-22.5
|
||||
N828 G1 X-24 Y-24
|
||||
N829 G1 Y-10
|
||||
N830 G3 X-10 Y-24 I24 J10
|
||||
N831 G1 X-24
|
||||
N832 G1 X-25 Y-25
|
||||
N833 G1 Y0
|
||||
N834 G3 X0 Y-25 I25 J0
|
||||
N835 G1 X-25
|
||||
N836 G0 Z1
|
||||
N837 G0 X21 Y-21
|
||||
N838 G1 Z-7
|
||||
N839 G1 X20
|
||||
N840 G3 X21 Y-20 I20 J21
|
||||
N841 G1 Y-21
|
||||
N842 G1 X22.5 Y-22.5
|
||||
N843 G1 X15.8
|
||||
N844 G3 X22.5 Y-15.8 I-15.8 J22.5
|
||||
N845 G1 Y-22.5
|
||||
N846 G1 X24 Y-24
|
||||
N847 G1 X10
|
||||
N848 G3 X24 Y-10 I-10 J24
|
||||
N849 G1 Y-24
|
||||
N850 G1 X25 Y-25
|
||||
N851 G1 X0
|
||||
N852 G3 X25 Y0 I0 J25
|
||||
N853 G1 Y-25
|
||||
N854 G1 Z1
|
||||
N855 G0 X21 Y21
|
||||
N856 G1 Z-7
|
||||
N857 G1 X21 Y20
|
||||
N858 G3 X20 Y21 I-21 J-20
|
||||
N859 G1 X21 Y21
|
||||
N860 G1 X22.5 Y22.5
|
||||
N861 G1 Y15.8
|
||||
N862 G3 X15.8 Y22.5 I-22.5 J-15.8
|
||||
N863 G1 X22.5
|
||||
N864 G1 X24 Y24
|
||||
N865 G1 Y10
|
||||
N866 G3 X10 Y24 I-24 J-10
|
||||
N867 G1 X24
|
||||
N868 G1 X25 Y25
|
||||
N869 G1 Y0
|
||||
N870 G3 X0 Y25 I-25 J0
|
||||
N871 G1 X25
|
||||
N872 G0 Z1
|
||||
N873 G0 X-21 Y21
|
||||
N874 G1 Z-7
|
||||
N875 G1 X-20
|
||||
N876 G3 X-21 Y20 I20 J-21
|
||||
N877 G1 Y21
|
||||
N878 G1 X-22.5 Y22.5
|
||||
N879 G1 X-15.8
|
||||
N880 G3 X-22.5 Y15.8 I15.8 J-22.5
|
||||
N881 G1 Y22.5
|
||||
N882 G1 X-24 Y24
|
||||
N883 G1 X-10
|
||||
N884 G3 X-24 Y10 I10 J-24
|
||||
N885 G1 Y24
|
||||
N886 G1 X-25 Y25
|
||||
N887 G1 X0
|
||||
N888 G3 X-25 Y0 I0 J-25
|
||||
N889 G1 Y25
|
||||
N890 G0 Z1
|
||||
N891 G0 X-21 Y-21
|
||||
N892 G1 Z-7.5
|
||||
N893 G1 X-21 Y-20
|
||||
N894 G3 X-20 Y-21 I21 J20
|
||||
N895 G1 X-21 Y-21
|
||||
N896 G1 X-22.5 Y-22.5
|
||||
N897 G1 Y-15.8
|
||||
N898 G3 X-15.8 Y-22.5 I22.5 J15.8
|
||||
N899 G1 X-22.5
|
||||
N900 G1 X-24 Y-24
|
||||
N901 G1 Y-10
|
||||
N902 G3 X-10 Y-24 I24 J10
|
||||
N903 G1 X-24
|
||||
N904 G1 X-25 Y-25
|
||||
N905 G1 Y0
|
||||
N906 G3 X0 Y-25 I25 J0
|
||||
N907 G1 X-25
|
||||
N908 G0 Z1
|
||||
N909 G0 X21 Y-21
|
||||
N910 G1 Z-7.5
|
||||
N911 G1 X20
|
||||
N912 G3 X21 Y-20 I20 J21
|
||||
N913 G1 Y-21
|
||||
N914 G1 X22.5 Y-22.5
|
||||
N915 G1 X15.8
|
||||
N916 G3 X22.5 Y-15.8 I-15.8 J22.5
|
||||
N917 G1 Y-22.5
|
||||
N918 G1 X24 Y-24
|
||||
N919 G1 X10
|
||||
N920 G3 X24 Y-10 I-10 J24
|
||||
N921 G1 Y-24
|
||||
N922 G1 X25 Y-25
|
||||
N923 G1 X0
|
||||
N924 G3 X25 Y0 I0 J25
|
||||
N925 G1 Y-25
|
||||
N926 G1 Z1
|
||||
N927 G0 X21 Y21
|
||||
N928 G1 Z-7.5
|
||||
N929 G1 X21 Y20
|
||||
N930 G3 X20 Y21 I-21 J-20
|
||||
N931 G1 X21 Y21
|
||||
N932 G1 X22.5 Y22.5
|
||||
N933 G1 Y15.8
|
||||
N934 G3 X15.8 Y22.5 I-22.5 J-15.8
|
||||
N935 G1 X22.5
|
||||
N936 G1 X24 Y24
|
||||
N937 G1 Y10
|
||||
N938 G3 X10 Y24 I-24 J-10
|
||||
N939 G1 X24
|
||||
N940 G1 X25 Y25
|
||||
N941 G1 Y0
|
||||
N942 G3 X0 Y25 I-25 J0
|
||||
N943 G1 X25
|
||||
N944 G0 Z1
|
||||
N945 G0 X-21 Y21
|
||||
N946 G1 Z-7.5
|
||||
N947 G1 X-20
|
||||
N948 G3 X-21 Y20 I20 J-21
|
||||
N949 G1 Y21
|
||||
N950 G1 X-22.5 Y22.5
|
||||
N951 G1 X-15.8
|
||||
N952 G3 X-22.5 Y15.8 I15.8 J-22.5
|
||||
N953 G1 Y22.5
|
||||
N954 G1 X-24 Y24
|
||||
N955 G1 X-10
|
||||
N956 G3 X-24 Y10 I10 J-24
|
||||
N957 G1 Y24
|
||||
N958 G1 X-25 Y25
|
||||
N959 G1 X0
|
||||
N960 G3 X-25 Y0 I0 J-25
|
||||
N961 G1 Y25
|
||||
N962 G0 Z1
|
||||
N963 G0 X-25 Y-25
|
||||
N964 G1 Z-8
|
||||
N965 G1 X25
|
||||
N966 G1 Y25
|
||||
N967 G1 X-25
|
||||
N968 G1 Y-25
|
||||
N969 G1 Z-8.5
|
||||
N970 G1 X25
|
||||
N971 G1 Y25
|
||||
N972 G1 X-25
|
||||
N973 G1 Y-25
|
||||
N974 G1 Z-9
|
||||
N975 G1 X25
|
||||
N976 G1 Y25
|
||||
N977 G1 X-25
|
||||
N978 G1 Y-25
|
||||
N979 G1 Z-9.5
|
||||
N980 G1 X25
|
||||
N981 G1 Y25
|
||||
N982 G1 X-25
|
||||
N983 G1 Y-25
|
||||
N984 G1 Z-10
|
||||
N985 G1 X25
|
||||
N986 G1 Y25
|
||||
N987 G1 X-25
|
||||
N988 G1 Y-25
|
||||
3
cncjs/examples/gcode/arc-ijk.gcode
Normal file
@@ -0,0 +1,3 @@
|
||||
G17
|
||||
G1 X0Y20 F200
|
||||
G2 X20Y0 I0 J-20.0
|
||||
3
cncjs/examples/gcode/arc-xy-plane.gcode
Normal file
@@ -0,0 +1,3 @@
|
||||
G17
|
||||
G1 X0Y20 F200
|
||||
G2 X20Y0 I0 J-20.0
|
||||
3
cncjs/examples/gcode/arc-xz-plane.gcode
Normal file
@@ -0,0 +1,3 @@
|
||||
G18
|
||||
G1 X0Z20 F200
|
||||
G2 X20Z0 I0 K-20.0
|
||||
3
cncjs/examples/gcode/arc-yz-plane.gcode
Normal file
@@ -0,0 +1,3 @@
|
||||
G19
|
||||
G1 Y0Z20 F200
|
||||
G2 Y20Z0 J0 K-20.0
|
||||
11
cncjs/examples/gcode/circle-inch.gcode
Normal file
@@ -0,0 +1,11 @@
|
||||
G17 G20 G90 G94 G54
|
||||
G0 Z0.25
|
||||
X-0.5 Y0.
|
||||
Z0.1
|
||||
G01 Z0. F5.
|
||||
G02 X0. Y0.5 I0.5 J0. F2.5
|
||||
X0.5 Y0. I0. J-0.5
|
||||
X0. Y-0.5 I-0.5 J0.
|
||||
X-0.5 Y0. I0. J0.5
|
||||
G01 Z0.1 F5.
|
||||
G00 X0. Y0. Z0.25
|
||||
8
cncjs/examples/gcode/circle.gcode
Normal file
@@ -0,0 +1,8 @@
|
||||
G17 G21 G90 G94 G54
|
||||
G0 X-5 Y0 Z0 F200
|
||||
G2 X0 Y5 I5 J0 F200
|
||||
G02 X5 Y0 I0 J-5
|
||||
G02 X0 Y-5 I-5 J0
|
||||
G02 X-5 Y0 I0 J5
|
||||
G01 Z1 F500
|
||||
G00 X0 Y0 Z5
|
||||
18
cncjs/examples/gcode/full-circle-without-xyz.gcode
Normal file
@@ -0,0 +1,18 @@
|
||||
N45 G0 X-2. Y.75
|
||||
N46 G1 Z-.5 F10.
|
||||
N47 Y.5 F30. S2000
|
||||
N48 G2 J-1.1
|
||||
N49 G1 Y.75
|
||||
N50 Z.2
|
||||
N51 G0 X.75 Y-3.4
|
||||
N52 G1 Z-.5 F10.
|
||||
N53 X.5 F30.
|
||||
N54 G2 I-1.1
|
||||
N55 X.75
|
||||
N56 Z.2
|
||||
N57 G0 X-4.75 Y-3.4
|
||||
N58 G1 Z-.5 F10.
|
||||
N59 X-4.5 F30.
|
||||
N60 G2 I1.1
|
||||
N61 G1 X-4.75
|
||||
N62 Z.2
|
||||
10
cncjs/examples/gcode/g2-arc.gcode
Normal file
@@ -0,0 +1,10 @@
|
||||
G21
|
||||
G00 X0 Y0 Z50
|
||||
G01 Z0 F250
|
||||
X10 Y10
|
||||
Y50
|
||||
X40
|
||||
G02 X50 Y40 I0 J-10
|
||||
G01 Y20
|
||||
G02 X40 Y10 I-10 J0
|
||||
G01 X10
|
||||
187753
cncjs/examples/gcode/github.gcode
Normal file
16
cncjs/examples/gcode/helical-thread-milling.gcode
Normal file
@@ -0,0 +1,16 @@
|
||||
G17
|
||||
G20
|
||||
G91
|
||||
G01 Z-0.6533 F100.
|
||||
G42 D08
|
||||
G01 X0.0235 Y-0.0939 F10.
|
||||
G03 X0.0939 Y0.0939 Z0.0179 R0.0939
|
||||
G03 X-0.1179 Y0.1179 Z0.0179 R0.1179
|
||||
G03 X-0.1185 Y-0.1185 Z0.0179 R0.1185
|
||||
G03 X0.1191 Y-0.1191 Z0.0179 R0.1191 F16.
|
||||
G03 X0.1196 Y0.1196 Z0.0179 R0.1196
|
||||
G03 X-0.1202 Y0.1202 Z0.0179 R0.1202 F26.
|
||||
G03 X-0.1207 Y-0.1207 Z0.0179 R0.1207
|
||||
G03 X0.1213 Y-0.1213 Z0.0179 R0.1213
|
||||
G03 X0.1218 Y0.1218 Z0.0179 R0.1218
|
||||
G03 X-0.0975 Y0.0975 Z0.0179 R0.0975
|
||||
2418
cncjs/examples/gcode/jsdc-laser.gcode
Normal file
2428
cncjs/examples/gcode/jsdc.gcode
Normal file
BIN
cncjs/examples/gcode/jsdc.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
30
cncjs/examples/gcode/jsdc.svg
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="300.000000pt" height="225.000000pt" viewBox="0 0 300.000000 225.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.10, written by Peter Selinger 2001-2011
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,225.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M1090 1490 c-136 -24 -210 -99 -210 -215 0 -110 54 -167 215 -230
|
||||
119 -46 155 -74 155 -121 0 -81 -100 -112 -255 -78 -38 8 -82 17 -97 21 l-28
|
||||
6 0 -71 0 -71 58 -12 c90 -20 257 -17 320 5 105 36 161 113 162 219 0 105 -46
|
||||
163 -169 213 -189 76 -213 96 -197 158 15 60 154 74 299 30 15 -5 17 2 17 60
|
||||
0 74 5 70 -105 86 -79 11 -101 11 -165 0z"/>
|
||||
<path d="M2393 1469 c-150 -58 -236 -250 -205 -459 20 -140 67 -215 167 -268
|
||||
46 -25 60 -27 165 -27 65 0 133 6 158 13 l42 13 0 68 0 69 -62 -20 c-91 -28
|
||||
-183 -22 -233 16 -59 45 -80 102 -80 221 0 109 13 159 52 206 61 72 149 82
|
||||
301 34 21 -7 22 -5 22 63 l0 71 -37 10 c-66 19 -231 13 -290 -10z"/>
|
||||
<path d="M262 1423 l3 -58 138 -3 137 -3 0 -207 c0 -114 -5 -224 -10 -244 -17
|
||||
-59 -53 -81 -125 -76 -34 2 -79 13 -103 25 l-43 21 3 -71 3 -70 40 -15 c59
|
||||
-21 180 -21 237 1 65 25 123 92 137 158 6 29 11 167 11 324 l0 275 -215 0
|
||||
-216 0 3 -57z"/>
|
||||
<path d="M1520 1101 l0 -381 143 0 c78 0 162 5 187 11 99 22 190 103 226 200
|
||||
9 24 19 90 21 148 9 162 -19 254 -96 324 -71 64 -95 70 -298 75 l-183 4 0
|
||||
-381z m313 245 c78 -33 110 -103 111 -241 0 -87 -3 -107 -25 -156 -35 -75 -77
|
||||
-101 -175 -107 l-74 -5 0 262 0 261 65 0 c36 0 80 -6 98 -14z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
25592
cncjs/examples/gcode/octocat.gcode
Normal file
44305
cncjs/examples/gcode/part.gcode
Normal file
19277
cncjs/examples/gcode/sample.gcode
Normal file
3455
cncjs/examples/gcode/tball/tball-engrave-laser.gcode
Normal file
3459
cncjs/examples/gcode/tball/tball-engrave.gcode
Normal file
40299
cncjs/examples/gcode/tball/tball-pocket-laser.gcode
Normal file
40307
cncjs/examples/gcode/tball/tball-pocket.gcode
Normal file
2708
cncjs/examples/gcode/tball/tball.gcode
Normal file
8
cncjs/examples/grbl-sim/.cncrc
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"ports": [
|
||||
{
|
||||
"comName": "/dev/ttyFAKE",
|
||||
"manufacturer": "grbl-sim"
|
||||
}
|
||||
]
|
||||
}
|
||||
32
cncjs/examples/grbl-sim/simport.sh
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
FAKETTY=/dev/ttyFAKE
|
||||
GRBLSIM="./grbl_sim.exe"
|
||||
|
||||
# Kill the socat process running in background
|
||||
trap "ctrl_c" 2
|
||||
ctrl_c() {
|
||||
printf "\nTerminating grbl-sim.\n"
|
||||
for child in $(jobs -p); do
|
||||
sudo kill $child
|
||||
done
|
||||
exit
|
||||
}
|
||||
|
||||
if [ ! -e $GRBLSIM ];then
|
||||
printf "Build grbl-sim with 'make' first.\nIf the output is not named $GRBLSIM this script needs to be updated.\n"
|
||||
exit
|
||||
fi
|
||||
|
||||
sudo socat PTY,raw,link=$FAKETTY,echo=0 "EXEC:'$GRBLSIM -n -s step.out -b block.out',pty,raw,echo=0"&
|
||||
|
||||
# Wait for socat to setup the link then change permission
|
||||
sleep 1
|
||||
sudo chmod a+rw /dev/ttyFAKE
|
||||
|
||||
printf "grbl-sim running on $FAKETTY\n"
|
||||
printf "Press [CTRL+C] to stop.\n"
|
||||
|
||||
while true
|
||||
do
|
||||
sleep 100
|
||||
done
|
||||
5
cncjs/examples/pendant-ps3/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# cncjs-pendant-ps3
|
||||
|
||||
Dual Shock / PS3 Bluetooth Remote Pendant for CNCjs
|
||||
|
||||
#### This project has been moved to https://github.com/cncjs/cncjs-pendant-ps3.
|
||||
5
cncjs/examples/pendant-tinyweb/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# cncjs-pendant-tinyweb
|
||||
|
||||
A tiny web console for small 320x240 LCD display
|
||||
|
||||
#### This project has been moved to https://github.com/cncjs/cncjs-pendant-tinyweb.
|
||||
78
cncjs/i18next-scanner.app.config.js
Normal file
@@ -0,0 +1,78 @@
|
||||
/* eslint no-console: 0 */
|
||||
/* eslint strict: 0 */
|
||||
const fs = require('fs');
|
||||
const chalk = require('chalk');
|
||||
const languages = require('./build.config').languages;
|
||||
|
||||
module.exports = {
|
||||
src: [
|
||||
'src/app/**/*.{html,hbs,js,jsx}',
|
||||
// Use ! to filter out files or directories
|
||||
'!src/app/{vendor,i18n}/**',
|
||||
'!test/**',
|
||||
'!**/node_modules/**'
|
||||
],
|
||||
dest: './',
|
||||
options: {
|
||||
debug: false,
|
||||
removeUnusedKeys: true,
|
||||
sort: false,
|
||||
func: {
|
||||
list: [], // Use an empty array to bypass the default list: i18n.t, i18next.t
|
||||
extensions: ['.js', '.jsx']
|
||||
},
|
||||
trans: {
|
||||
component: 'I18n',
|
||||
i18nKey: 'i18nKey',
|
||||
defaultsKey: 'defaults',
|
||||
extensions: ['.js', '.jsx'],
|
||||
fallbackKey: function(ns, value) {
|
||||
return value;
|
||||
}
|
||||
},
|
||||
lngs: languages,
|
||||
ns: [
|
||||
'gcode',
|
||||
'resource' // default
|
||||
],
|
||||
defaultNs: 'resource',
|
||||
defaultValue: (lng, ns, key) => {
|
||||
if (lng === 'en') {
|
||||
return key; // Use key as value for base language
|
||||
}
|
||||
return ''; // Return empty string for other languages
|
||||
},
|
||||
resource: {
|
||||
loadPath: 'src/app/i18n/{{lng}}/{{ns}}.json',
|
||||
savePath: 'src/app/i18n/{{lng}}/{{ns}}.json', // or 'src/app/i18n/${lng}/${ns}.saveAll.json'
|
||||
jsonIndent: 4
|
||||
},
|
||||
nsSeparator: ':', // namespace separator
|
||||
keySeparator: '.', // key separator
|
||||
interpolation: {
|
||||
prefix: '{{',
|
||||
suffix: '}}'
|
||||
}
|
||||
},
|
||||
transform: function(file, enc, done) {
|
||||
'use strict';
|
||||
|
||||
const parser = this.parser;
|
||||
const content = fs.readFileSync(file.path, enc);
|
||||
let count = 0;
|
||||
|
||||
parser.parseFuncFromString(content, { list: ['i18n._', 'i18n.__'] }, (key, options) => {
|
||||
parser.set(key, Object.assign({}, options, {
|
||||
nsSeparator: false,
|
||||
keySeparator: false
|
||||
}));
|
||||
++count;
|
||||
});
|
||||
|
||||
if (count > 0) {
|
||||
console.log(`[i18next-scanner] transform: count=${chalk.cyan(count)}, file=${chalk.yellow(JSON.stringify(file.relative))}`);
|
||||
}
|
||||
|
||||
done();
|
||||
}
|
||||
};
|
||||
66
cncjs/i18next-scanner.server.config.js
Normal file
@@ -0,0 +1,66 @@
|
||||
/* eslint no-console: 0 */
|
||||
/* eslint strict: 0 */
|
||||
const fs = require('fs');
|
||||
const chalk = require('chalk');
|
||||
const languages = require('./build.config').languages;
|
||||
|
||||
module.exports = {
|
||||
options: {
|
||||
debug: false,
|
||||
removeUnusedKeys: false,
|
||||
sort: false,
|
||||
func: {
|
||||
list: ['i18n.t', 't'],
|
||||
extensions: ['.js', '.jsx']
|
||||
},
|
||||
trans: {
|
||||
component: 'I18n',
|
||||
i18nKey: 'i18nKey',
|
||||
defaultsKey: 'defaults',
|
||||
extensions: ['.js', '.jsx'],
|
||||
fallbackKey: function(ns, value) {
|
||||
return value;
|
||||
}
|
||||
},
|
||||
lngs: languages,
|
||||
ns: [
|
||||
'resource' // default
|
||||
],
|
||||
defaultNs: 'resource',
|
||||
defaultValue: '__L10N__', // to indicate that a default value has not been defined for the key
|
||||
resource: {
|
||||
loadPath: 'src/server/i18n/{{lng}}/{{ns}}.json',
|
||||
savePath: 'src/server/i18n/{{lng}}/{{ns}}.json', // or 'src/server/i18n/${lng}/${ns}.saveAll.json'
|
||||
jsonIndent: 4
|
||||
},
|
||||
nsSeparator: ':', // namespace separator
|
||||
keySeparator: '.', // key separator
|
||||
pluralSeparator: '_', // plural separator
|
||||
contextSeparator: '_', // context separator
|
||||
interpolation: {
|
||||
prefix: '{{',
|
||||
suffix: '}}'
|
||||
}
|
||||
},
|
||||
transform: function(file, enc, done) {
|
||||
'use strict';
|
||||
|
||||
const parser = this.parser;
|
||||
const content = fs.readFileSync(file.path, enc);
|
||||
let count = 0;
|
||||
|
||||
parser.parseFuncFromString(content, { list: ['i18n._', 'i18n.__'] }, (key, options) => {
|
||||
parser.set(key, Object.assign({}, options, {
|
||||
nsSeparator: false,
|
||||
keySeparator: false
|
||||
}));
|
||||
++count;
|
||||
});
|
||||
|
||||
if (count > 0) {
|
||||
console.log(`[i18next-scanner] transform: count=${chalk.cyan(count)}, file=${chalk.yellow(JSON.stringify(file.relative))}`);
|
||||
}
|
||||
|
||||
done();
|
||||
}
|
||||
};
|
||||
19
cncjs/index.hbs
Normal file
@@ -0,0 +1,19 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>{{title}}</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<link rel="shortcut icon" href="{{webroot}}favicon.ico">
|
||||
</head>
|
||||
<body>
|
||||
<div id="loading" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">
|
||||
<div style="background: transparent url('{{webroot}}images/32x32/loading.gif') no-repeat 0 0; height: 32px; width: 32px; display: block; margin: 0 auto;"></div>
|
||||
<div style="font-family: Arial, Helvetica, sans-serif; font-size: 13px; font-weight: normal; color: #222; text-align: center; margin-top: 10px;">{{loading}}</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
cncjs/media/ShuttleXpress.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
cncjs/media/WS_WIFI-LPT100_WIFI400.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
cncjs/media/banner.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
cncjs/media/banner2.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
cncjs/media/cnc.png
Normal file
|
After Width: | Height: | Size: 584 KiB |
BIN
cncjs/media/cncjs.png
Normal file
|
After Width: | Height: | Size: 329 KiB |
BIN
cncjs/media/events.png
Normal file
|
After Width: | Height: | Size: 251 KiB |
1
cncjs/media/font-awesome/black/svg/adjust.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 1440v-1088q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73zm768-544q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 321 B |
1
cncjs/media/font-awesome/black/svg/adn.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 622l201 306h-402zm365 530h94l-459-691-459 691h94l104-160h522zm403-256q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 319 B |
1
cncjs/media/font-awesome/black/svg/align-center.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 1344v128q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45zm-384-384v128q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h896q26 0 45 19t19 45zm256-384v128q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45zm-384-384v128q0 26-19 45t-45 19h-640q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h640q26 0 45 19t19 45z"/></svg>
|
||||
|
After Width: | Height: | Size: 509 B |
1
cncjs/media/font-awesome/black/svg/align-justify.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 1344v128q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45zm0-384v128q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45zm0-384v128q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45zm0-384v128q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45z"/></svg>
|
||||
|
After Width: | Height: | Size: 505 B |
1
cncjs/media/font-awesome/black/svg/align-left.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 1344v128q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45zm-384-384v128q0 26-19 45t-45 19h-1280q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1280q26 0 45 19t19 45zm256-384v128q0 26-19 45t-45 19h-1536q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1536q26 0 45 19t19 45zm-384-384v128q0 26-19 45t-45 19h-1152q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1152q26 0 45 19t19 45z"/></svg>
|
||||
|
After Width: | Height: | Size: 513 B |
1
cncjs/media/font-awesome/black/svg/align-right.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 1344v128q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45zm0-384v128q0 26-19 45t-45 19h-1280q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1280q26 0 45 19t19 45zm0-384v128q0 26-19 45t-45 19h-1536q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1536q26 0 45 19t19 45zm0-384v128q0 26-19 45t-45 19h-1152q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1152q26 0 45 19t19 45z"/></svg>
|
||||
|
After Width: | Height: | Size: 505 B |
1
cncjs/media/font-awesome/black/svg/ambulance.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M576 1408q0-53-37.5-90.5t-90.5-37.5-90.5 37.5-37.5 90.5 37.5 90.5 90.5 37.5 90.5-37.5 37.5-90.5zm-384-512h384v-256h-158q-14 2-22 9l-195 195q-7 12-9 22v30zm1280 512q0-53-37.5-90.5t-90.5-37.5-90.5 37.5-37.5 90.5 37.5 90.5 90.5 37.5 90.5-37.5 37.5-90.5zm128-672v-192q0-14-9-23t-23-9h-224v-224q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v224h-224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23-9t9-23v-224h224q14 0 23-9t9-23zm256-544v1152q0 26-19 45t-45 19h-192q0 106-75 181t-181 75-181-75-75-181h-384q0 106-75 181t-181 75-181-75-75-181h-128q-26 0-45-19t-19-45 19-45 45-19v-416q0-26 13-58t32-51l198-198q19-19 51-32t58-13h160v-320q0-26 19-45t45-19h1152q26 0 45 19t19 45z"/></svg>
|
||||
|
After Width: | Height: | Size: 792 B |
1
cncjs/media/font-awesome/black/svg/anchor.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M960 256q0-26-19-45t-45-19-45 19-19 45 19 45 45 19 45-19 19-45zm832 928v352q0 22-20 30-8 2-12 2-13 0-23-9l-93-93q-119 143-318.5 226.5t-429.5 83.5-429.5-83.5-318.5-226.5l-93 93q-9 9-23 9-4 0-12-2-20-8-20-30v-352q0-14 9-23t23-9h352q22 0 30 20 8 19-7 35l-100 100q67 91 189.5 153.5t271.5 82.5v-647h-192q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h192v-163q-58-34-93-92.5t-35-128.5q0-106 75-181t181-75 181 75 75 181q0 70-35 128.5t-93 92.5v163h192q26 0 45 19t19 45v128q0 26-19 45t-45 19h-192v647q149-20 271.5-82.5t189.5-153.5l-100-100q-15-16-7-35 8-20 30-20h352q14 0 23 9t9 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 677 B |
1
cncjs/media/font-awesome/black/svg/android.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M685 483q16 0 27.5-11.5t11.5-27.5-11.5-27.5-27.5-11.5-27 11.5-11 27.5 11 27.5 27 11.5zm422 0q16 0 27-11.5t11-27.5-11-27.5-27-11.5-27.5 11.5-11.5 27.5 11.5 27.5 27.5 11.5zm-812 184q42 0 72 30t30 72v430q0 43-29.5 73t-72.5 30-73-30-30-73v-430q0-42 30-72t73-30zm1060 19v666q0 46-32 78t-77 32h-75v227q0 43-30 73t-73 30-73-30-30-73v-227h-138v227q0 43-30 73t-73 30q-42 0-72-30t-30-73l-1-227h-74q-46 0-78-32t-32-78v-666h918zm-232-405q107 55 171 153.5t64 215.5h-925q0-117 64-215.5t172-153.5l-71-131q-7-13 5-20 13-6 20 6l72 132q95-42 201-42t201 42l72-132q7-12 20-6 12 7 5 20zm477 488v430q0 43-30 73t-73 30q-42 0-72-30t-30-73v-430q0-43 30-72.5t72-29.5q43 0 73 29.5t30 72.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 771 B |
1
cncjs/media/font-awesome/black/svg/angellist.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1209 378l-114 328 117 21q165-451 165-518 0-56-38-56-57 0-130 225zm-299 687l33 88q37-42 71-67l-33-5.5-38.5-7-32.5-8.5zm-292-896q0 98 159 521 18-10 49-10 15 0 75 5l-121-351q-75-220-123-220-19 0-29 17.5t-10 37.5zm-79 759q0 36 51.5 119t117.5 153 100 70q14 0 25.5-13t11.5-27q0-24-32-102-13-32-32-72t-47.5-89-61.5-81-62-32q-20 0-45.5 27t-25.5 47zm-158 335q0 41 25 104 59 145 183.5 227t281.5 82q227 0 382-170 152-169 152-427 0-43-1-67t-11.5-62-30.5-56q-56-49-211.5-75.5t-270.5-26.5q-37 0-49 11-12 5-12 35 0 34 21.5 60t55.5 40 77.5 23.5 87.5 11.5 85 4 70 0h23q24 0 40 19 15 19 19 55-28 28-96 54-61 22-93 46-64 46-108.5 114t-44.5 137q0 31 18.5 88.5t18.5 87.5l-3 12q-4 12-4 14-137-10-146-216-8 2-41 2 2 7 2 21 0 53-40.5 89.5t-94.5 36.5q-82 0-166.5-78t-84.5-159q0-34 33-67 52 64 60 76 77 104 133 104 12 0 26.5-8.5t14.5-20.5q0-34-87.5-145t-116.5-111q-43 0-70 44.5t-27 90.5zm-114 9q0-101 42.5-163t136.5-88q-28-74-28-104 0-62 61-123t122-61q29 0 70 15-163-462-163-567 0-80 41-130.5t119-50.5q131 0 325 581 6 17 8 23 6-16 29-79.5t43.5-118.5 54-127.5 64.5-123 70.5-86.5 76.5-36q71 0 112 49t41 122q0 108-159 550 61 15 100.5 46t58.5 78 26 93.5 7 110.5q0 150-47 280t-132 225-211 150-278 55q-111 0-223-42-149-57-258-191.5t-109-286.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
cncjs/media/font-awesome/black/svg/angle-double-down.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1395 864q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23zm0-384q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 414 B |
1
cncjs/media/font-awesome/black/svg/angle-double-left.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1011 1376q0 13-10 23l-50 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l50 50q10 10 10 23t-10 23l-393 393 393 393q10 10 10 23zm384 0q0 13-10 23l-50 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l50 50q10 10 10 23t-10 23l-393 393 393 393q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 419 B |
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M979 960q0 13-10 23l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23zm384 0q0 13-10 23l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 415 B |
1
cncjs/media/font-awesome/black/svg/angle-double-up.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1395 1312q0 13-10 23l-50 50q-10 10-23 10t-23-10l-393-393-393 393q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l466 466q10 10 10 23zm0-384q0 13-10 23l-50 50q-10 10-23 10t-23-10l-393-393-393 393q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l466 466q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 421 B |
1
cncjs/media/font-awesome/black/svg/angle-down.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1395 736q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 263 B |
1
cncjs/media/font-awesome/black/svg/angle-left.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l50 50q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 265 B |
1
cncjs/media/font-awesome/black/svg/angle-right.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1171 960q0 13-10 23l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 264 B |
1
cncjs/media/font-awesome/black/svg/angle-up.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1395 1184q0 13-10 23l-50 50q-10 10-23 10t-23-10l-393-393-393 393q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l466 466q10 10 10 23z"/></svg>
|
||||
|
After Width: | Height: | Size: 267 B |
1
cncjs/media/font-awesome/black/svg/apple.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1585 1215q-39 125-123 250-129 196-257 196-49 0-140-32-86-32-151-32-61 0-142 33-81 34-132 34-152 0-301-259-147-261-147-503 0-228 113-374 112-144 284-144 72 0 177 30 104 30 138 30 45 0 143-34 102-34 173-34 119 0 213 65 52 36 104 100-79 67-114 118-65 94-65 207 0 124 69 223t158 126zm-376-1173q0 61-29 136-30 75-93 138-54 54-108 72-37 11-104 17 3-149 78-257 74-107 250-148 1 3 2.5 11t2.5 11q0 4 .5 10t.5 10z"/></svg>
|
||||
|
After Width: | Height: | Size: 513 B |
1
cncjs/media/font-awesome/black/svg/archive.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1088 832q0-26-19-45t-45-19h-256q-26 0-45 19t-19 45 19 45 45 19h256q26 0 45-19t19-45zm576-192v960q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-960q0-26 19-45t45-19h1408q26 0 45 19t19 45zm64-448v256q0 26-19 45t-45 19h-1536q-26 0-45-19t-19-45v-256q0-26 19-45t45-19h1536q26 0 45 19t19 45z"/></svg>
|
||||
|
After Width: | Height: | Size: 393 B |
1
cncjs/media/font-awesome/black/svg/area-chart.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1920 1536v128h-2048v-1536h128v1408h1920zm-384-1024l256 896h-1664v-576l448-576 576 576z"/></svg>
|
||||
|
After Width: | Height: | Size: 196 B |
1
cncjs/media/font-awesome/black/svg/arrow-circle-down.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1412 897q0-27-18-45l-91-91q-18-18-45-18t-45 18l-189 189v-502q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v502l-189-189q-19-19-45-19t-45 19l-91 91q-18 18-18 45t18 45l362 362 91 91q18 18 45 18t45-18l91-91 362-362q18-18 18-45zm252-1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 472 B |
1
cncjs/media/font-awesome/black/svg/arrow-circle-left.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 960v-128q0-26-19-45t-45-19h-502l189-189q19-19 19-45t-19-45l-91-91q-18-18-45-18t-45 18l-362 362-91 91q-18 18-18 45t18 45l91 91 362 362q18 18 45 18t45-18l91-91q18-18 18-45t-18-45l-189-189h502q26 0 45-19t19-45zm256-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 465 B |
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1248 928q0 12-10 24l-319 319q-11 9-23 9t-23-9l-320-320q-15-16-7-35 8-20 30-20h192v-352q0-14 9-23t23-9h192q14 0 23 9t9 23v352h192q14 0 23 9t9 23zm-352-576q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 504 B |
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1280 800v192q0 13-9.5 22.5t-22.5 9.5h-352v192q0 14-9 23t-23 9q-12 0-24-10l-319-319q-9-9-9-23t9-23l320-320q9-9 23-9 13 0 22.5 9.5t9.5 22.5v192h352q13 0 22.5 9.5t9.5 22.5zm160 96q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 524 B |
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1280 896q0 14-9 23l-320 320q-9 9-23 9-13 0-22.5-9.5t-9.5-22.5v-192h-352q-13 0-22.5-9.5t-9.5-22.5v-192q0-13 9.5-22.5t22.5-9.5h352v-192q0-14 9-23t23-9q12 0 24 10l319 319q9 9 9 23zm160 0q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 531 B |
1
cncjs/media/font-awesome/black/svg/arrow-circle-o-up.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1246 876q-8 20-30 20h-192v352q0 14-9 23t-23 9h-192q-14 0-23-9t-9-23v-352h-192q-14 0-23-9t-9-23q0-12 10-24l319-319q11-9 23-9t23 9l320 320q15 16 7 35zm-350-524q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 508 B |
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 468 B |
1
cncjs/media/font-awesome/black/svg/arrow-circle-up.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1412 895q0-27-18-45l-362-362-91-91q-18-18-45-18t-45 18l-91 91-362 362q-18 18-18 45t18 45l91 91q18 18 45 18t45-18l189-189v502q0 26 19 45t45 19h128q26 0 45-19t19-45v-502l189 189q19 19 45 19t45-19l91-91q18-18 18-45zm252 1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 464 B |
1
cncjs/media/font-awesome/black/svg/arrow-down.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1675 832q0 53-37 90l-651 652q-39 37-91 37-53 0-90-37l-651-652q-38-36-38-90 0-53 38-91l74-75q39-37 91-37 53 0 90 37l294 294v-704q0-52 38-90t90-38h128q52 0 90 38t38 90v704l294-294q37-37 90-37 52 0 91 37l75 75q37 39 37 91z"/></svg>
|
||||
|
After Width: | Height: | Size: 329 B |
1
cncjs/media/font-awesome/black/svg/arrow-left.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 896v128q0 53-32.5 90.5t-84.5 37.5h-704l293 294q38 36 38 90t-38 90l-75 76q-37 37-90 37-52 0-91-37l-651-652q-37-37-37-90 0-52 37-91l651-650q38-38 91-38 52 0 90 38l75 74q38 38 38 91t-38 91l-293 293h704q52 0 84.5 37.5t32.5 90.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 339 B |