Compare commits

..
16 Commits
Author SHA1 Message Date
Weston BliedenandGitHub e61185aab8 Merge pull request #13 from paromarc/main 2024-06-25 18:58:09 +02:00
Marco Parodi fe4194f14c matching acap version to tailscale 1.68.1 2024-06-25 12:54:10 -04:00
Weston BliedenandGitHub 65fabaf526 Merge pull request #12 from paromarc/main
AXIS OS 12 Support + License
2024-06-25 18:36:26 +02:00
MarcoandGitHub 3f956518c5 Merge pull request #2 from paromarc/license
License
2024-06-25 12:27:23 -04:00
Marco Parodi 5ecf23ca4c auto install license 2024-06-25 12:24:58 -04:00
Marco Parodi 472c45385a added axLicense 2024-06-25 11:05:22 -04:00
MarcoandGitHub 0bf110bf08 Merge pull request #1 from paromarc/no_root_support
No root support
2024-06-25 09:41:44 -04:00
paromarc b648bc2425 added script inside main.c file 2024-06-24 15:15:33 -04:00
axismarco 65c0a23d67 no root suport. Tailscale version 1.68.1 2024-06-24 12:59:40 -04:00
Weston BliedenandGitHub d1080d1405 Update README.md 2024-06-24 09:22:09 +02:00
Weston Blieden dea29b9b19 Merge branch 'main' of https://github.com/Mo3he/Axis_Cam_Tailscale 2024-06-24 08:18:38 +02:00
Weston BliedenandGitHub 50b4ec0264 Update README.md 2024-03-26 16:15:55 +01:00
Weston BliedenandGitHub 890e166448 Update README.md 2024-03-26 16:12:00 +01:00
Weston BliedenandGitHub 5c03cb2eda Update README.md 2024-03-23 10:47:44 +01:00
Weston Blieden 9b90bd6fc2 Version 1.62.0
Updated Tailscale binaries to version 1.62.0
2024-03-23 10:41:02 +01:00
Weston BliedenandGitHub 73d7b7df16 Update README.md 2024-03-19 08:32:23 +01:00
243 changed files with 81004 additions and 4490 deletions
-102
View File
@@ -1,102 +0,0 @@
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
BinPackArguments: false
BinPackParameters: false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 8
UseTab: Never
...
-12
View File
@@ -1,12 +0,0 @@
# All variants build from the repository root (docker build -f <variant>/Dockerfile .)
# so keep the context lean. Do NOT exclude common/app/ or <variant>/app/ — the
# Dockerfiles COPY those, including the Tailscale binaries placed in app/lib/.
.git
.github
.DS_Store
*.eap
*.tgz
build
releases
tailscale_bins
README.md
-11
View File
@@ -1,11 +0,0 @@
DEFAULT_BRANCH=origin/main
LINTER_RULES_PATH=/
VALIDATE_ALL_CODEBASE=true
IGNORE_GITIGNORED_FILES=true
YAML_CONFIG_FILE=.yamllint.yaml
MARKDOWN_CONFIG_FILE=.markdownlint.yaml
VALIDATE_DOCKERFILE_HADOLINT=true
VALIDATE_JSON=true
VALIDATE_MARKDOWN=true
VALIDATE_SHELL_SHFMT=true
VALIDATE_YAML=true
-205
View File
@@ -1,205 +0,0 @@
name: Auto Build & Release Tailscale ACAP
on:
schedule:
- cron: "0 0 * * *" # Every Monday at 03:00 UTC
workflow_dispatch:
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
# 1. Checkout repo
- uses: actions/checkout@v3
with:
persist-credentials: true
fetch-depth: 0
# 2. Get latest Tailscale version
- name: Get latest Tailscale version
id: tailscale_version
run: |
# 1. Start from GitHub latest
GH_TAG=$(curl -s https://api.github.com/repos/tailscale/tailscale/releases/latest | jq -r .tag_name)
GH_VERSION=${GH_TAG#v}
echo "GitHub latest: $GH_VERSION"
# 2. See if static ARM build exists for that version
if curl -sfI "https://pkgs.tailscale.com/stable/tailscale_${GH_VERSION}_arm.tgz" > /dev/null; then
VERSION="$GH_VERSION"
echo "Using GitHub latest (has ARM package): $VERSION"
else
echo "No ARM package for $GH_VERSION, falling back to latest version on pkgs.tailscale.com"
# 3. Derive latest version that actually has an ARM tarball
VERSION=$(
curl -s https://pkgs.tailscale.com/stable/ \
| grep -o 'tailscale_[0-9.]*_arm\.tgz' \
| sed -E 's/^tailscale_([0-9.]+)_arm\.tgz$/\1/' \
| sort -V | tail -n1
)
echo "Fallback version: $VERSION"
fi
echo "RELEASE_VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Get current repo version
id: current
run: |
CURRENT=$(find . -path "*/app/manifest.json" -exec jq -r '.acapPackageConf.setup.version' {} \; | sort -u | head -n1)
echo "CURRENT_VERSION=$CURRENT" >> $GITHUB_ENV
echo "Current repo version: $CURRENT"
- name: Compare versions
id: compare
run: |
echo "Repo version: $CURRENT_VERSION"
echo "Latest Tailscale version: $RELEASE_VERSION"
echo "Trigger: ${{ github.event_name }}"
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "build_needed=true" >> $GITHUB_ENV
echo "Manual trigger — building regardless of version."
elif [ "$CURRENT_VERSION" = "$RELEASE_VERSION" ]; then
echo "build_needed=false" >> $GITHUB_ENV
echo "Already up to date. Skipping build."
else
echo "build_needed=true" >> $GITHUB_ENV
echo "New version detected. Will build."
fi
# 3. Download Tailscale binaries
- name: Download Tailscale binaries
if: env.build_needed == 'true'
run: |
mkdir -p tailscale_bins
curl -L "https://pkgs.tailscale.com/stable/tailscale_${RELEASE_VERSION}_arm.tgz" -o tailscale_arm.tgz
tar -xzf tailscale_arm.tgz -C tailscale_bins --strip-components=1
mv tailscale_bins/tailscale tailscale_bins/tailscale_arm
mv tailscale_bins/tailscaled tailscale_bins/tailscaled_arm
curl -L "https://pkgs.tailscale.com/stable/tailscale_${RELEASE_VERSION}_arm64.tgz" -o tailscale_arm64.tgz
tar -xzf tailscale_arm64.tgz -C tailscale_bins --strip-components=1
mv tailscale_bins/tailscale tailscale_bins/tailscale_arm64
mv tailscale_bins/tailscaled tailscale_bins/tailscaled_arm64
# 4. Strip binaries to reduce package size
- name: Strip binaries
if: env.build_needed == 'true'
run: |
# Install cross-architecture strip tools
sudo apt-get update
sudo apt-get install -y binutils-aarch64-linux-gnu binutils-arm-linux-gnueabihf
# Strip debug info and symbol tables (zero runtime/memory cost)
aarch64-linux-gnu-strip -s tailscale_bins/tailscale_arm64
aarch64-linux-gnu-strip -s tailscale_bins/tailscaled_arm64
arm-linux-gnueabihf-strip -s tailscale_bins/tailscale_arm
arm-linux-gnueabihf-strip -s tailscale_bins/tailscaled_arm
ls -lh tailscale_bins/
# 5. Build each folder, update manifest, and copy .eap files
- name: Build all folders
if: env.build_needed == 'true'
run: |
mkdir -p build
rm -rf releases
mkdir -p releases
for folder in */ ; do
FOLDER_NAME="${folder%/}" # remove trailing slash
[[ "$FOLDER_NAME" == "common" ]] && continue
[[ ! -d "$folder/app" ]] && continue
echo "Processing folder $FOLDER_NAME"
# aarch64/arm/aarch64_ROOT/arm_ROOT share their C source, run script,
# HTML, and Makefile via common/app/ (see Dockerfile COPY layers);
# only arm_acap3 still carries its own self-contained app/ tree.
case "$FOLDER_NAME" in
aarch64|arm|aarch64_ROOT|arm_ROOT) APP_LIB_DIR="common/app/lib" ;;
*) APP_LIB_DIR="$folder/app/lib" ;;
esac
mkdir -p "$APP_LIB_DIR"
# Detect architecture
if [[ "$FOLDER_NAME" == arm* ]]; then
cp tailscale_bins/tailscale_arm "$APP_LIB_DIR/tailscale"
cp tailscale_bins/tailscaled_arm "$APP_LIB_DIR/tailscaled"
else
cp tailscale_bins/tailscale_arm64 "$APP_LIB_DIR/tailscale"
cp tailscale_bins/tailscaled_arm64 "$APP_LIB_DIR/tailscaled"
fi
# Detect variant suffix for .eap naming
if [[ "$FOLDER_NAME" == *_ROOT ]]; then
VARIANT="_root"
elif [[ "$FOLDER_NAME" == *_acap3 ]]; then
VARIANT="_acap3"
else
VARIANT=""
fi
# Update version — manifest.json for ACAP 4, package.conf for ACAP 3
if [[ -f "$folder/app/manifest.json" ]]; then
sed -i "s/\"version\": \".*\"/\"version\": \"${RELEASE_VERSION}\"/" "$folder/app/manifest.json"
elif [[ -f "$folder/app/package.conf" ]]; then
IFS='.' read -r MAJOR MINOR MICRO <<< "${RELEASE_VERSION}"
sed -i "s/^APPMAJORVERSION=.*/APPMAJORVERSION=${MAJOR}/" "$folder/app/package.conf"
sed -i "s/^APPMINORVERSION=.*/APPMINORVERSION=${MINOR}/" "$folder/app/package.conf"
sed -i "s/^APPMICROVERSION=.*/APPMICROVERSION=${MICRO}/" "$folder/app/package.conf"
fi
# Docker build
TAG_NAME=$(echo "$FOLDER_NAME" | tr '[:upper:]' '[:lower:]' | tr '/ ' '_') # lowercase and clean
echo "Building $TAG_NAME"
docker build -f "$folder/Dockerfile" --tag "$TAG_NAME" .
# Extract .eap files into build folder
EAP_OUTPUT="./build/${TAG_NAME}"
mkdir -p "$EAP_OUTPUT"
CID=$(docker create "$TAG_NAME")
docker cp "$CID":/opt/app "$EAP_OUTPUT"
docker rm "$CID" >/dev/null
# Move all .eap files to releases folder, append variant if needed
find "$EAP_OUTPUT" -type f -name "*.eap" | while read eap; do
BASENAME=$(basename "$eap" .eap)
if [[ -n "$VARIANT" ]]; then
mv "$eap" "releases/${BASENAME}${VARIANT}.eap"
else
mv "$eap" "releases/${BASENAME}.eap"
fi
done
done
# Clean up
rm -rf build tailscale_bins *.tgz
# 6. Commit updated manifests and .eap files directly to main
- name: Commit updates to main
if: env.build_needed == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
# Only commit manifests and ACAP 3 package.conf; do not track release artifacts
git add */app/manifest.json arm_acap3/app/package.conf
if git diff --cached --quiet; then
echo "No changes to commit"
else
git commit -m "Update Tailscale to v${RELEASE_VERSION}"
git push https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/Mo3he/Axis_Cam_Tailscale.git main
fi
# 7. Create GitHub Release with all new .eap files
- name: Create GitHub Release
if: env.build_needed == 'true'
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ env.RELEASE_VERSION }}
name: "Tailscale VPN ${{ env.RELEASE_VERSION }}"
files: releases/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-22
View File
@@ -1,22 +0,0 @@
---
name: Lint
on: push
jobs:
Build:
name: Lint code base
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup Environment
run: cat .github/super-linter.env >> "$GITHUB_ENV"
- name: Lint code base
uses: super-linter/super-linter/slim@v8
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-13
View File
@@ -1,15 +1,2 @@
**/.DS_Store
**/build
# Do not track release artifacts (local .eap build outputs stay untracked anywhere in the tree)
releases/
build/
*.eap
# Do not track downloaded Tailscale tarballs and temp bins
tailscale_bins/
*.tgz
# Tailscale binaries - downloaded fresh by CI at build time, not stored in git
*/app/lib/tailscale
*/app/lib/tailscaled
-8
View File
@@ -1,8 +0,0 @@
---
# Enforce error-level Dockerfile correctness. Warnings/info are advisory: the
# ACAP cross-compile Dockerfiles use accepted patterns (cd in RUN, ARG-templated
# FROM tags hadolint cannot resolve, optional pipefail).
failure-threshold: error
ignored:
# Pin versions in 'apt-get install' - the SDK base image is already pinned.
- DL3008
-11
View File
@@ -1,11 +0,0 @@
---
# Line length (disabled: long lines in tables, URLs and prose are acceptable)
MD013: false
# Allow inline HTML (e.g. <img> logos and badges in READMEs)
MD033: false
# Allow blank lines inside blockquotes
MD028: false
# First line in a file should be a top-level heading
MD041: false
# Table column style (disabled; the previous "padded" value was invalid)
MD060: false
+6
View File
@@ -0,0 +1,6 @@
{
"files.associations": {
"axlicense.h": "c"
},
"C_Cpp.errorSquiggles": "disabled"
}
-2
View File
@@ -1,2 +0,0 @@
rules:
line-length: disable
-142
View File
@@ -1,142 +0,0 @@
# Changelog
All notable changes to this project are documented here. Each version
links to its full release notes on GitHub.
The format is based on [Keep a Changelog](https://keepachangelog.com/).
## [1.98.8-2] - 2026-07-03 - Tailscale VPN 1.98.8-2
## [1.98.8-subnet-routing] - 2026-07-01 - Tailscale VPN 1.98.8 - Subnet Routing
## [1.98.8] - 2026-06-30 - Tailscale VPN 1.98.8
## [1.98.4-statusfix] - 2026-06-16
## [1.98.4-dns-routes] - 2026-06-10 - Tailscale VPN v1.98.4 - Accept DNS & Routes toggles
## [1.98.4] - 2026-06-02 - Tailscale VPN 1.98.4
## [1.98.3] - 2026-05-22 - Tailscale VPN 1.98.3
## [1.98.2] - 2026-05-19 - Tailscale VPN 1.98.2
## [1.96.4-dns-routes] - 2026-05-12 - Tailscale VPN v1.96.4 - Accept DNS & Routes toggles
## [1.96.4-r3] - 2026-04-17 - Tailscale VPN v1.96.4-r3
## [1.96.4-r2] - 2026-04-17
## [1.96.4-proxy] - 2026-04-14 - Tailscale VPN 1.96.4 - Proxy Support
## [1.96.4] - 2026-03-28 - Tailscale VPN 1.96.4
## [1.96.2] - 2026-03-19 - Tailscale VPN 1.96.2
## [1.94.2] - 2026-02-26 - Tailscale VPN 1.94.2
## [1.94.1] - 2026-01-28 - Tailscale VPN 1.94.1
## [1.92.5] - 2026-01-07 - Tailscale VPN 1.92.5
## [1.92.3] - 2025-12-17 - Tailscale VPN 1.92.3
## [1.92.1] - 2025-12-15 - Tailscale VPN 1.92.1
## [1.90.9] - 2025-11-26 - Tailscale VPN 1.90.9
## [1.90.8] - 2025-11-20 - Tailscale VPN 1.90.8
## [1.90.6] - 2025-11-03 - Tailscale VPN 1.90.6
## [1.90.3] - 2025-10-28 - Tailscale VPN 1.90.3
## [1.90.2] - 2025-10-27 - Tailscale VPN 1.90.2
## [1.90.1] - 2025-10-23 - Tailscale VPN 1.90.1
## [1.88.3] - 2025-09-29 - Tailscale VPN 1.88.3
## [1.88.1] - 2025-09-15 - Tailscale VPN 1.88.1
## [1.86.2] - 2025-08-27 - Tailscale VPN 1.86.2
## [1.84.0] - 2025-05-26
## [1.82.0] - 2025-04-11
## [1.80.3] - 2025-03-24
## [1.78.1] - 2025-01-13
## [1.76.1] - 2024-10-24
## [1.72.1] - 2024-08-26
## [1.68.1] - 2024-06-27
## [1.62.0] - 2024-03-23
## [1.60.0] - 2024-02-21
## [1.56.1] - 2024-01-17
## [1.54.0] - 2023-11-28
## [1.52.0] - 2023-11-01
## [1.50.1] - 2023-10-16
## [148.2] - 2023-09-13 - Version 1.48.2
## [1.44.0] - 2023-07-04
## [138.4] - 2023-04-17 - V1.38.4
## [1.34.0] - 2022-12-19
[1.98.8-2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.8-2
[1.98.8-subnet-routing]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.8-subnet-routing
[1.98.8]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.8
[1.98.4-statusfix]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.4-statusfix
[1.98.4-dns-routes]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.4-dns-routes
[1.98.4]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.4
[1.98.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.3
[1.98.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.2
[1.96.4-dns-routes]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-dns-routes
[1.96.4-r3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-r3
[1.96.4-r2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-r2
[1.96.4-proxy]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-proxy
[1.96.4]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4
[1.96.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.2
[1.94.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.94.2
[1.94.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.94.1
[1.92.5]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.92.5
[1.92.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.92.3
[1.92.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.92.1
[1.90.9]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.9
[1.90.8]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.8
[1.90.6]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.6
[1.90.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.3
[1.90.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.2
[1.90.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.1
[1.88.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.88.3
[1.88.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.88.1
[1.86.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.86.2
[1.84.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.84.0
[1.82.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.82.0
[1.80.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.80.3
[1.78.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.78.1
[1.76.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.76.1
[1.72.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.72.1
[1.68.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.68.1
[1.62.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.62.0
[1.60.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.60.0
[1.56.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.56.1
[1.54.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.54.0
[1.52.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.52.0
[1.50.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.50.1
[148.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.148.2
[1.44.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.44.0
[138.4]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.138.4
[1.34.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.34.0
+19 -19
View File
@@ -13,13 +13,13 @@ All types of contributions are encouraged and valued. See the [Table of contents
- [I have a question](#i-have-a-question)
- [I want to contribute](#i-want-to-contribute)
- [Reporting bugs](#reporting-bugs)
- [Before submitting a bug report](#before-submitting-a-bug-report)
- [How do I submit a good bug report?](#how-do-i-submit-a-good-bug-report)
- [Suggesting enhancements](#suggesting-enhancements)
- [Before Submitting an Enhancement](#before-submitting-an-enhancement)
- [How do I submit a good enhancement suggestion?](#how-do-i-submit-a-good-enhancement-suggestion)
- [Your first code contribution](#your-first-code-contribution)
- [Reporting bugs](#reporting-bugs)
- [Before submitting a bug report](#before-submitting-a-bug-report)
- [How do I submit a good bug report?](#how-do-i-submit-a-good-bug-report)
- [Suggesting enhancements](#suggesting-enhancements)
- [Before Submitting an Enhancement](#before-submitting-an-enhancement)
- [How do I submit a good enhancement suggestion?](#how-do-i-submit-a-good-enhancement-suggestion)
- [Your first code contribution](#your-first-code-contribution)
## I have a question
@@ -46,13 +46,13 @@ A good bug report shouldn't leave others needing to chase you up for more inform
- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker][issues_bugs].
- Also make sure to search the internet to see if users outside of the GitHub community have discussed the issue.
- Collect information about the bug:
- Axis device model
- Axis device firmware version
- Stack trace
- OS and version (Windows, Linux, macOS, x86, ARM)
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant
- Possibly your input and the output
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
- Axis device model
- Axis device firmware version
- Stack trace
- OS and version (Windows, Linux, macOS, x86, ARM)
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant
- Possibly your input and the output
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
#### How do I submit a good bug report?
@@ -126,9 +126,9 @@ Before opening a Pull Request (PR), please consider the following guidelines:
And finally when you are satisfied with your changes, open a new PR.
<!-- markdownlint-disable MD034 -->
[issues]: https://github.com/Mo3he/Axis_Cam_Tailscale/issues
[issues_new]: https://github.com/Mo3he/Axis_Cam_Tailscale/issues/new
[issues_bugs]: https://github.com/Mo3he/Axis_Cam_Tailscale/issues?q=label%3Abug
[discussions]: https://github.com/Mo3he/Axis_Cam_Tailscale/discussions
[discussions_new]: https://github.com/Mo3he/Axis_Cam_Tailscale/discussions/new
[issues]: https://github.com/AxisCommunications/tailscale-acap/issues
[issues_new]: https://github.com/AxisCommunications/tailscale-acap/issues/new
[issues_bugs]: https://github.com/AxisCommunications/tailscale-acap/issues?q=label%3Abug
[discussions]: https://github.com/AxisCommunications/tailscale-acap/discussions
[discussions_new]: https://github.com/AxisCommunications/tailscale-acap/discussions/new
<!-- markdownlint-enable MD034 -->
+3 -2
View File
@@ -1,6 +1,7 @@
BSD 3-Clause License
Copyright (c) 2022, Weston Blieden
Copyright (c) 2020 Tailscale & AUTHORS.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -25,4 +26,4 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+72 -228
View File
@@ -1,242 +1,86 @@
# Tailscale ACAP for Axis Cameras
# The Tailscale installer ACAP
[![Release](https://img.shields.io/github/v/release/Mo3he/Axis_Cam_Tailscale?style=flat)](https://github.com/Mo3he/Axis_Cam_Tailscale/releases)
[![License](https://img.shields.io/github/license/Mo3he/Axis_Cam_Tailscale?style=flat)](LICENSE)
[![Downloads](https://img.shields.io/github/downloads/Mo3he/Axis_Cam_Tailscale/total?label=Downloads&color=blue&style=flat)](https://github.com/Mo3he/Axis_Cam_Tailscale/releases)
[![Build](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/build.yml/badge.svg)](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/build.yml)
[![Super-Linter](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/super-linter.yml/badge.svg)](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/super-linter.yml)
[![Sponsor](https://img.shields.io/badge/Sponsor%20My%20Work-EA4AAA?style=flat&logo=github&logoColor=white)](https://github.com/sponsors/Mo3he)
[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?style=flat&logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/mo3he)
This ACAP packages the scripts and files required to install the Tailscale VPN client on Axis Cameras.
This repository provides an **ACAP package** that installs the
[Tailscale VPN client](https://tailscale.com/) on Axis cameras, for secure remote
access without extra hardware or complex network configuration.
Current version 1.63.0,
**[Visit the Homepage](https://mo3he.github.io/Axis_Cam_Tailscale/)**
The "Auto Update" version has been removed since it no longer works given the files are not stored in the default location.
> **Disclaimer:** Independent, community-developed ACAP package. Not an official
> Axis product and not affiliated with, endorsed by, or supported by Axis
> Communications AB or Tailscale Inc. Use at your own risk.
https://tailscale.com/changelog/
> **Tailscale Notice:** Tailscale is a product of Tailscale Inc. This package
> independently redistributes the Tailscale binaries under the
> [BSD 3-Clause License](LICENSE) and is not affiliated with, endorsed by, or
> supported by Tailscale Inc. For the official Tailscale client, visit
> [tailscale.com](https://tailscale.com).
## Axis OS Support
## Table of Contents
Support for Axis OS 12.
- [Overview](#overview)
- [Compatibility](#compatibility)
- [Installation](#installation)
- [Configuration](#configuration)
- [Ports & security](#ports--security)
- [Accessing Tailnet services from the camera](#accessing-tailnet-services-from-the-camera)
- [Updating Tailscale](#updating-tailscale)
- [Build from source](#build-from-source)
- [Roadmap](#roadmap)
- [Links](#links)
- [License](#license)
## Purpose
## Overview
Adding a VPN client directly to the camera allows secure remote access to the device without requiring any other equipment or network configuration.
Tailscale achieves this in a secure, simple to setup and easy to use way.
Tailscale is based on WireGuard VPN tunneling technology.
Adding a VPN client directly to the camera enables secure remote access without
additional hardware or complex network configuration, through Tailscale's
lightweight WireGuard-based tunnel.
- Secure remote access to cameras.
- Easy to install via EAP package.
- Works on **AXIS OS 10.12+** (non-root version, verified across 10.12–12.10).
- Works on **legacy AXIS OS 9.x / 10.x** via the ACAP 3 variant.
- Based on **WireGuard VPN** technology.
Tailscale ACAP runs **without root privileges** in userspace networking mode,
making it compatible with AXIS OS 10.12+. For **full kernel networking**, use the
**ROOT** version (AXIS OS 10.12–11.x only; AXIS OS 12 and later removed root
access for third-party applications). Learn more:
[How Tailscale Works](https://tailscale.com/blog/how-tailscale-works/).
## Compatibility
| Build | AXIS OS | Architecture | Notes |
|---|---|---|---|
| ACAP 4 (native SDK) | 10.12 – 13 | aarch64 | Standard, userspace networking |
| ACAP 4 (native SDK) | 10.12 – 13 | armv7hf | Standard, userspace networking |
| ACAP 4 root | 10.12 – 11.x | aarch64 | Full kernel networking (not on OS 12+) |
| ACAP 4 root | 10.12 – 11.x | armv7hf | Full kernel networking (not on OS 12+) |
| ACAP 3 (legacy SDK) | 9.x – 10.x | armv7hf | Legacy cameras |
> Most cameras use the standard **ACAP 4** build. The **root** builds add
> kernel-level networking but only run on AXIS OS 10.12–11.x (AXIS OS 12+ removed
> root access for ACAPs). Use the **ACAP 3** build only on legacy cameras that
> don't support ACAP 4 (AXIS OS 9–10).
## Installation
Get the **prebuilt `.eap` file** from the
[Releases page](https://github.com/Mo3he/Axis_Cam_Tailscale/releases).
1. Log into your Axis camera.
2. Go to **Apps -> Add App**.
3. Upload the `.eap` file.
Once installed:
- Start the app.
- Click **Open** to view logs and get your Tailscale authentication URL.
- On uninstall, all changes/files are removed.
> You'll need a [Tailscale account](https://tailscale.com/) to authenticate.
## Configuration
The app runs a C-based parameter bridge that reads settings from the ACAP
parameter store and launches Tailscale. View logs and connection status via the
**Open** button in the app, and authenticate using the provided URL or by
pre-entering an auth key in **Settings**. Parameter changes (ports, server URL,
auth key) are applied automatically without reinstalling the app.
All parameters are configurable via the web UI (**Open -> Settings** card) and
take effect immediately:
| Parameter | Default | Description |
|---|---|---|
| Custom Server URL | *(empty)* | Control server URL for [Headscale](https://headscale.net/) or other self-hosted servers. Leave blank to use Tailscale's official servers. |
| Auth Key | *(empty)* | Pre-authentication key (`tskey-auth-...`). Cleared automatically after first successful connection. Leave blank to authenticate via browser. |
| HTTP Proxy Port | `8080` | Port for the outbound HTTP/HTTPS proxy. |
| SOCKS5 Proxy Port | `1080` | Port for the outbound SOCKS5 proxy. |
| Accept DNS | `off` | Passes `--accept-dns=true` to `tailscale up`. Allows the tailnet to push DNS settings to the camera. Not available on `armv7hf_acap3`. |
| Accept Routes | `off` | Passes `--accept-routes=true` to `tailscale up`. Allows the camera to use subnet routes advertised by other nodes. Not available on `armv7hf_acap3`. |
## Ports & security
All non-ROOT variants expose two local proxy endpoints that route outbound
traffic through the Tailscale tunnel. The ports are configurable via **Settings
-> HTTP Proxy Port / SOCKS5 Proxy Port**.
| Proxy | Default address | Routes |
|---|---|---|
| HTTP CONNECT | `http://127.0.0.1:8080` | HTTP and HTTPS traffic |
| SOCKS5 | `127.0.0.1:1080` | Any SOCKS5-aware app or service |
Set the HTTP CONNECT proxy wherever an HTTP/HTTPS proxy field is available on the
camera (System -> Network -> Global proxies; System -> MQTT -> Broker). For
SOCKS5-aware apps, set their proxy to `127.0.0.1:<port>`.
> **Security:** the proxies bind to **loopback only** (`127.0.0.1`), so they are
> not exposed on the camera's network interface, the least-exposed of the VPN
> ACAPs. The active proxy addresses are shown in the **Proxy Configuration** card
> of the web UI. If you change a port that is already in use, the app logs an
> error and exits rather than silently falling back.
## Accessing Tailnet services from the camera
There is an important asymmetry. Making the camera **reachable from** the tailnet
(browsing to it, VAPIX, SSH from another tailnet node) works on every build. The
harder direction is the camera **reaching out to** a tailnet peer, for example
mounting an SMB/CIFS share hosted on another node. How well this works depends on
the build:
| Build | Networking mode | Camera-initiated access to tailnet peers |
|---|---|---|
| Non-root (`aarch64`, `armv7hf`) and `armv7hf_acap3` | `--tun=userspace-networking` (no kernel `tailscale0`) | Only through the local **SOCKS5 / HTTP proxies**, and only for **proxy-aware** apps. Firmware system services (SMB client, NTP, etc.) are proxy-unaware and **cannot** reach a peer's `100.x` IP directly. |
| **ROOT** (`aarch64_root`, `armv7hf_root`) | Kernel networking with a real `tailscale0` interface | Peer `100.x` IPs are routable at the OS level, so firmware services **can** connect directly. Enable **Accept Routes** to also reach subnets behind other nodes. |
### Plan B: reverse-SSH tunnel
> **Requires root on the camera.** Port 445 is privileged, so binding it needs a
> root-capable build (e.g. developer certificates installed).
If you cannot use the ROOT build but still need the camera to mount a share on a
machine that is on your tailnet, make the remote share appear **local** to the
camera with a reverse SSH tunnel. Because the destination becomes `127.0.0.1`, the
proxy-unaware SMB client never has to route over the tailnet.
```bash
# Forward the camera's local port 445 back to the SMB share on this machine
ssh -R 445:localhost:445 root@<camera-tailscale-ip>
```
Then, in **System -> Storage -> Add network share**, use `127.0.0.1` as the share
host and connect.
## Updating Tailscale
- New `.eap` files are auto-built and released **weekly** (if a new Tailscale
version is available).
- To update, simply install the new `.eap` over the existing one.
### Manual update (advanced)
Replace the binaries in `common/app/lib/` (shared by `aarch64`, `armv7hf`, and
their ROOT variants) or `arm_acap3/app/lib/` (legacy variant, kept separate):
- `tailscale`
- `tailscaled`
Download the latest versions:
[Tailscale static builds](https://pkgs.tailscale.com/stable/#static).
## Build from source
The Tailscale binaries are not stored in git, so first download them (see
[Manual update](#manual-update-advanced)) and place them in `common/app/lib/`, or
`arm_acap3/app/lib/` for the legacy variant.
All variants build from the **repository root**, pointing at the variant's own
`Dockerfile`:
```bash
docker build -f aarch64/Dockerfile --tag <package_name> .
docker cp $(docker create <package_name>):/opt/app ./build
```
(Same for the others: just swap in `arm/Dockerfile`, `aarch64_ROOT/Dockerfile`,
`arm_ROOT/Dockerfile`, or `arm_acap3/Dockerfile`.)
## Roadmap
### AXIS OS 13 Preparation
AXIS OS 13 (scheduled for September 2026) introduces several breaking changes that
affect all ACAP applications. See the full
[AXIS OS 13 breaking changes](https://www.axis.com/for-developers/news/AXIS-OS-13-breaking-changes)
announcement for details.
- [x] **Recompile for 64-bit time (Y2038)** - Done for the standard
`aarch64`/`armv7hf` builds (now built against ACAP Native SDK 12.10.0); the
ROOT variants intentionally stay on the older SDK since AXIS OS 12+ never
supports root third-party apps.
- [x] **Migrate to Manifest Schema v2** - Done for `aarch64`/`armv7hf` (schema
2.0.0, `compatibleOsVersions` declared); verified installability on OS
10.12–12.10.
- [x] **Audit for executable stack usage** - All compiled binaries report
`flags rw-` (no executable stack) on every architecture and variant.
- [x] **Verify web UI works over HTTPS** - Verified live; the UI only issues
relative-path requests, so it inherits the page's protocol with no
mixed-content risk.
- [ ] **Sign the ACAP via the Axis ACAP Portal** - Deferred; the manifest's
`vendorId` is a placeholder value, not yet portal-registered.
### General Improvements
- [x] **Accept DNS from tailnet toggle** - Opt-in setting passing
`--accept-dns=true` to `tailscale up` (defaults off).
- [x] **Accept routes toggle** - Opt-in setting passing `--accept-routes=true`.
- [ ] **Switch to tiny-tailscale binaries** - Evaluate replacing the bundled
`tailscale`/`tailscaled` with [tiny-tailscale](https://github.com/iamromulan/tiny-tailscale)
builds (single binary, ~43% smaller).
https://tailscale.com/blog/how-tailscale-works/
## Links
- [Tailscale](https://tailscale.com/)
- [Tailscale GitHub](https://github.com/tailscale/tailscale)
- [WireGuard](https://www.wireguard.com/)
- [Axis Communications](https://www.axis.com/)
https://tailscale.com/
https://github.com/tailscale/tailscale
https://www.wireguard.com/
https://www.axis.com/
## Compatibility
The Tailscale ACAP is compatable with Axis cameras with arm and aarch64 based Soc's.
```
curl --anyauth "*" -u <username>:<password> <device ip>/axis-cgi/basicdeviceinfo.cgi --data "{\"apiVersion\":\"1.0\",\"context\":\"Client defined request ID\",\"method\":\"getAllProperties\"}"
```
where `<device ip>` is the IP address of the Axis device, `<username>` is the root username and `<password>` is the root password. Please
note that you need to enclose your password with quotes (`'`) if it contains special characters.
## Installing
The recommended way to install this ACAP is to use the pre built eap file.
Go to "Apps" on the camera and click "Add app".
## Using the Tailscale ACAP
The Tailscale ACAP will run a script on startup that sets the required permissions and starts the service and app.
Once started click "Open" to see the output of the logs for further instructions and obtain the authetication URL.
When uninstalling the ACAP, all changes and files are removed from the camera.
You will need a tailscale.com account to use the ACAP
## Updating Tailscale version
The eap files will be updated from time to time and simply installing the new version over the old will update all files.
It's also possible to build and use a locally built image as all necesary files are provided.
Replace binaries "tailscale" and "tailscaled" in lib folder with new versions.
Make sure you use the files for the correct Soc.
Latest versions can be found at
https://pkgs.tailscale.com/stable/#static
To build,
From main directory of the version you want (arm/aarch64)
```
docker build --tag <package name> .
```
```
docker cp $(docker create <package name>):/opt/app ./build
```
## License
The packaging code in this repository is licensed under BSD 3-Clause (see
[LICENSE](LICENSE)); this also covers the redistributed Tailscale binaries
(upstream Tailscale is BSD 3-Clause). Bundled upstream components are listed in
[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
-23
View File
@@ -1,23 +0,0 @@
# Security Policy
This is an independent, community-developed ACAP package, provided on a
best-effort basis. It is not an official Axis Communications product.
## Reporting a vulnerability
Please report security issues privately rather than in a public issue:
- Use GitHub's "Report a vulnerability" (Security > Advisories) to open a
private advisory, or
- email <moshe@mohome.net>.
Include the affected version (or `.eap` filename), camera model / Axis OS
version, a description and its impact, and reproduction steps if available. You
can expect an acknowledgement within a reasonable time; please avoid public
disclosure until a fix is released.
## Scope
Reports about this ACAP's own wrapper code, configuration handling, and default
settings are in scope. Vulnerabilities in bundled upstream projects should also
be reported to their respective upstream projects.
+4 -7
View File
@@ -1,15 +1,12 @@
ARG ARCH=aarch64
ARG VERSION=12.10.0
ARG UBUNTU_VERSION=24.04
ARG VERSION=1.14
ARG UBUNTU_VERSION=22.04
ARG REPO=axisecp
ARG SDK=acap-native-sdk
FROM ${REPO}/${SDK}:${VERSION}-${ARCH}-ubuntu${UBUNTU_VERSION}
# Building the ACAP application
COPY common/app /opt/app/
COPY aarch64/app/manifest.json /opt/app/manifest.json
COPY ./app /opt/app/
WORKDIR /opt/app
ENV EXTRA_CFLAGS=-DHAS_PROXY_PORTS
RUN aarch64-linux-gnu-strip -s lib/tailscale lib/tailscaled
RUN . /opt/axis/acapsdk/environment-setup* && acap-build -a Tailscale_VPN_run ./
RUN . /opt/axis/acapsdk/environment-setup* && acap-build ./
+2 -2
View File
@@ -1,5 +1,5 @@
To build, from main directory
docker build --tag aarch64 .
docker build --tag aarch64 .
docker cp $(docker create aarch64):/opt/app ./build
docker cp $(docker create aarch64):/opt/app ./build
+24
View File
@@ -0,0 +1,24 @@
#//Version=Native
AXIS_USABLE_LIBS = UCLIBC GLIBC
include libs/*/makefile.info
PROG = tailscale_vpn
CFLAGS += -Wall
PKGS += glib-2.0 gio-2.0
CFLAGS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags $(PKGS))
LDLIBS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs $(PKGS))
SRCS += main.c
OBJS += $(SRCS:.c=.o)
all: $(PROG) $(OBJS)
$(PROG): $(OBJS)
$(CC) $^ $(CFLAGS) $(LIBS) $(LDFLAGS) -lm $(LDLIBS) -o $@
$(STRIP) $@
clean:
#rm -f $(PROG) $(OBJS)
+23
View File
@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+68
View File
@@ -0,0 +1,68 @@
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.<br />
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.<br />
You will also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.<br />
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.<br />
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.<br />
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
### Code Splitting
This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
### Analyzing the Bundle Size
This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
### Making a Progressive Web App
This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
### Advanced Configuration
This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
### Deployment
This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
### `npm run build` fails to minify
This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
+14500
View File
File diff suppressed because it is too large Load Diff
+48
View File
@@ -0,0 +1,48 @@
{
"name": "license",
"version": "0.1.0",
"private": true,
"homepage": ".",
"dependencies": {
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1",
"@types/styled-components": "^5.1.25",
"axios": "^0.19.2",
"bootstrap": "^4.5.0",
"pepjs": "^0.5.3",
"practical-react-components-core": "^1.3.0",
"practical-react-components-icons": "^1.3.0",
"react": "^18.1.0",
"react-bootstrap": "^1.2.2",
"react-dom": "^18.1.0",
"react-native-web": "^0.17.7",
"react-router-dom": "^5.2.0",
"react-scripts": "3.4.1",
"react-transition-group": "^4.4.2",
"react-xml-parser": "^1.1.6",
"semantic-ui-react": "^1.0.0",
"styled-components": "^5.3.5"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
@@ -0,0 +1,91 @@
import React from 'react';
import { Nav, Navbar, Form, FormControl } from 'react-bootstrap';
import styled from 'styled-components';
const Styles = styled.div`
.navbar {
background-color: white;
min-width:100px
}
a, .navbar-light {
height: 34px;
width: 100%;
color: black;
&:hover { color: white; }
}
.nav-link {
color: black;
&:hover { color: black; }
}
.navbar-brand {
padding-top: 12px
font-size: 1.4em;
color: black;
margin-left: 100px;
&:hover { color: black; }
}
.navbar-collapse {
position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
top:0px;
left: 85%
width:100%;
height:47px;
background-color: #FFCC33; /* Axis yeallow */
font-size: 1.4em;
color: black;
&:hover { color: white; }
}
.form-center {
position: absolute !important;
left: 25%;
right: 25%;
}
#conertext {
padding: 20px;
color:grey;
padding-top: 27px;
}
#line {
top:0px;
height: 6px;
background-color: #e6e6e6;
}
#conerimage {
top: 0px;
height: 62px;
}
#conerinfo{
position: fixed;
height:62px;
width:100%;
background-color: #FFCC33; /* Axis yeallow */
left: 85%;
font-size: 1.4em;
}
#logomage{
position: fixed;
top:5px;
font-size: 1.4em;
}
`;
export const NavigationBar = () => (
<Styles>
<Navbar >
<img id="logomage" src="./img/logo.svg" ></img>
<Navbar.Brand href="/">{window.acapName}</Navbar.Brand>
<Nav className="ml-auto" id="conerinfo">
<img id="conerimage" src="./img/topcorner62.png" alt="Axis" ></img>
<span id="conertext">{window.cornertext}{window.ver}</span>
</Nav>
</Navbar>
<hr id="line"></hr>
</Styles>
)
/*
<Form className="form-center">
<FormControl type="text" placeholder="Search" className="" />
</Form>
*/
@@ -0,0 +1,74 @@
import React from 'react';
import styled from 'styled-components';
import { Menu } from 'semantic-ui-react';
import { Link } from 'react-router-dom'
const StyledSideNav = styled.div`
/* position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
/* height: 100%;
/* width: 250px; /* Set the width of the sidebar */
/* z-index: 1; /* Stay on top of everything */
/* top: 54px; /* Stay at the top */
/* background-color: #e6e6e6; /* Axis grey */
/* overflow-x: hidden; /* Disable horizontal scroll */
/* padding-top: 10px;
/* padding-left: 10px; */
.menu {
position: fixed;
top: 50px;
height: 100%;
background-color: #e6e6e6;
border: 0px;
}
`;
class SidebarPage extends React.Component {
constructor(props) {
super(props);
this.state = {
activeItem: 'About',
}
}
// ** EDIT ** itens lists
render() {
const { activeItem } = this.state
return(
<StyledSideNav>
<Menu vertical>
<Menu.Item
name='home'
onClick={this.handleItemClick}
as={Link}
to="/"
/>
<Menu.Item
name='Hardware'
onClick={this.handleItemClick}
as={Link}
to="/About"
/>
<Menu.Item
name='Status'
onClick={this.handleItemClick}
as={Link}
to="/NoMatch"
/>
</Menu>
</StyledSideNav>
);
}
}
export default SidebarPage;
+587
View File
@@ -0,0 +1,587 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+218
View File
@@ -0,0 +1,218 @@
body {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
font-size: 12px;
}
/*h1 {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #484848;
font-size: 18px;
font-weight: bold;
}*/
button {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #ffffff;
font-size: 12px;
background: grey;
padding: 5px 15px 5px 15px;
text-decoration: none;
text-shadow: none;
border: none;
cursor: pointer;
border-radius: 25px;
}
#tables{
display: flex;
padding-left: 0px;
}
.SLInput {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 250px;
float:initial;
}
.SLInput_res {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 72px;
float:initial;
}
.SLInput_dropres {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 100px;
float:initial;
}
.header {
height: 40px;
width: auto;
background-color: rgb(216,207,198);
margin: 0px;
border-bottom: 3px solid #ffcb31;
position: absolute;
left: 0px;
right: 0px;
top: 0px;
text-align: center;
padding: 0px;
margin: 0px;
}
.header .logo {
background-repeat: no-repeat;
width: 83px;
height: 30px;
left: 20px;
top: 5px;
position: absolute;
}
.header h1 {
position: absolute;
top: 10px;
}
.saving h1 {
color: grey;
font-size: 15px;
margin-top: 5px;
}
.settings-menu {
width: 100%;
background-color: #ffffff;
margin: 0px;
border-bottom: 3px solid rgb(0,157,220);
position: absolute;
left: 0px;
right: 0px;
top: 43px;
text-align: left;
padding: 0px;
margin: 0px;
z-index: 10;
}
.settings-menu {
overflow: visible;
}
.settings-item {
position: relative;
top: 0;
bottom: 0;
padding: 10px 40px 10px 10px;
margin: 10px;
#border-right: 1px solid rgb(0,157,220);
display: inline-block;
float: left;
overflow: visible;
max-width: 400px;
}
.settings-item h1 {
color: rgb(0,157,220);
font-size: 15px;
margin-top: 5px;
}
.settings-item span {
width: 100px;
display: inline-block;
}
#logo {
font-size:50px;
color:black;
top: 50px;
}
#ruleSpinner {
padding-top: 20px;
position: absolute;
left: 0px;
}
#main {
top: 50px;
position: relative;
color: grey;
font-size: 15px;
font-weight: bold;
}
#configpage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#homepage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#savebutton {
left:50px;
padding-top:20px;
}
li:hover{
background-color:#FFC106;
}
#licensepage {
padding-left:50px;
}
#licenseCode {
width:250px;
}
#savelayoutdiv {
position: absolute;
padding-left: 20px;
padding-right: 20px;
top: 60px;
left: 690px;
#background-color:grey;
#width:100px;
#border-radius:25px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+27
View File
@@ -0,0 +1,27 @@
<svg focusable="false" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 238 90" xml:space="preserve">
<g>
<path d="m98.87496 15.58887 11.51463 0 .13725.13751 0 50.03436-.13725.13713-11.51463 0c-.13713 0-.13713-.13713-.13713-.13713l0-50.03436c0 0 0-.13751.13713-.13751"/>
<path d="m95.03658 15.58887c0 0 .13725.13751 0 .27376l-15.21574 24.67537c-.13725.13675-.13725.41113 0 .68513l15.353 24.40038c.13675.13724 0 .27437 0 .27437l-14.25637 0c-.13713 0-.27438-.13713-.41113-.13713l-9.1845-15.07912c-.13725-.13725-.13725-.13725-.2745 0l-8.63576 14.94188c-.13662.13724-.27387.27437-.41112.27437l-13.29638 0c-.27438 0-.27438-.13713-.13725-.13713l15.627-25.90875c.27438-.27312.27438-.54811 0-.82187l-13.708-23.1675c-.13725-.13625 0-.27376 0-.27376l13.84525 0c.13713 0 .27388.13751.27388.27376l8.36187 13.9825c.13712.1375.13712.1375.27388 0l8.63625-13.9825c0-.13625.13725-.27376.27438-.27376l12.88525 0"/>
<path d="m193.45934 1.33263 41.39876 64.56525-35.91498 0-13.57002-21.11024-1.64502 0-.95998-1.50838-16.175 0 26.86624-41.94663" fill="#f7e109"/>
<path d="m190.85559 41.22313 15.90125 24.67474-50.58249 0 15.90126-24.67474 18.78 0" fill="#231f20"/>
<path d="m186.74309 41.22313 15.90126 24.67474-50.5825 0 15.90123-24.67474 18.78001 0" fill="#c93437"/>
<path d="m44.1802 15.5889-10.6924 0c-.1372 0-.2745.1375-.2745.2737l-32.2133 49.8981c0 0 0 .13721.13721.13721l13.02249 0c.1366 0 .2739 0 .2739-.13721l4.3867-6.8544c.1372 0 .1372-.1368.2744-.1368l13.708 0c.1367 0 .1367.1368.1367.1368l0 6.7172c0 .1372 0 .27441.1373.27441l11.2406 0 .1373-.13721 0-49.8981c0-.1362-.1373-.2737-.2744-.2737l0 0zm-11.2407 33.311c0 .1372 0 .1372 0 .1372l-8.4985 0c-.1373 0-.1373 0-.1373-.1372l9.0469-14.3935 0 0-.4111 14.3935"/>
<path d="m117.24371 65.89787 15.21562 0c1.91875-.13713 3.83875-.41162 5.62126-.95987 6.98999-2.19289 10.69124-9.18464 10.69124-15.07863 0-9.4585-7.40251-12.748-16.175-16.44925-1.50874-.68625-3.42751-1.645-3.42751-3.70125 0-2.05626 2.05626-3.15375 4.25002-3.15375l11.92624 0c.13626 0 .13626 0 .13626-.13626l0-10.83c0-.13625 0-.13625-.13626-.13625l-12.47499 0c-10.41749 0-16.58638 6.16876-16.58638 14.80376 0 7.53999 4.79788 11.24112 11.78889 14.11963 4.935 1.91887 8.08748 2.74161 8.08748 6.71724 0 2.05612-1.23375 4.11224-3.83876 4.11224 0 0-14.94099 0-15.07813 0l0 0c0 0 0 10.41801 0 10.55525 0 .13713.13712.13713 0 .13713"/>
<path d="m155.21434 15.31512c-2.33 0-4.1125 1.91875-4.1125 4.25 0 2.19374 1.7825 4.1125 4.1125 4.1125 2.33 0 4.25-1.91876 4.25-4.1125 0-2.33125-1.92-4.25-4.25-4.25zm0 7.95c-2.05626 0-3.70126-1.64374-3.70126-3.7 0-2.19376 1.645-3.83875 3.70126-3.83875 2.19374 0 3.83875 1.64499 3.83875 3.83875 0 2.05626-1.64499 3.7-3.83875 3.7"/>
<path d="m157.27058 21.89513-.95877-2.19376c.54752-.13625.82251-.685.82251-1.23375 0-.41125-.1375-.82249-.54875-1.09625-.27373-.27374-.68498-.27374-1.09624-.27374l-1.7825 0 0 4.7975.54875 0 0-2.05626 1.37 0 .96001 2.05626.685 0zm-3.01501-2.60501 0-1.78123 1.23375 0c.27376 0 .54875 0 .68501.27374.27374.13625.41124.27374.41124.685 0 .13751-.1375.41125-.27376.54875-.27374.27374-.54874.27374-.82249.27374l-1.23375 0"/>
<path d="m11.14359 84.5405c-1.37063.68501-2.46683.9595-3.97513.9595-3.9751 0-5.89405-2.46774-5.89405-4.93463 0-2.605 2.19336-5.07225 6.03125-5.07225 1.50781 0 2.74117.27388 3.70118.82275l0 2.19337c-1.09663-.54887-2.19336-.9595-3.42676-.9595-2.19335 0-3.70165 1.23337-3.70165 3.01563 0 1.6445 1.5083 2.87851 3.56445 2.87851 1.3706 0 2.19334-.27451 3.70071-.9595l0 2.05611"/>
<path d="m25.53759 85.5c-3.70162 0-5.75775-2.46774-5.75775-4.93463 0-2.46774 2.05612-5.07225 5.75775-5.07225 3.83788 0 5.75688 2.74174 5.75688 5.07225 0 2.46689-2.05613 4.93463-5.75688 4.93463zm0-7.95026c-1.91937 0-3.15325 1.23337-3.15325 3.01563 0 1.78175 1.23388 2.87851 3.15325 2.87851 1.919 0 3.15288-1.09676 3.15288-2.87851 0-1.78226-1.23388-3.01563-3.15288-3.01563"/>
<path d="m48.70409 75.63037 2.05612 0 0 9.73238-2.46775 0 0-6.03125-2.74163 3.01563-.274 0-2.74162-3.01563 0 6.03125-2.46738 0 0-9.73238 2.05625 0 3.29 3.70113 3.29-3.70113"/>
<path d="m69.26559 75.63037 2.19337 0 0 9.73238-2.46775 0 0-6.03125-2.74125 3.01563-.41163 0-2.74112-3.01563 0 6.03125-2.46788 0 0-9.73238 2.19337 0 3.29013 3.70113 3.15275-3.70113"/>
<path d="m90.65033 75.63037 0 5.62012c0 3.15276-2.33049 4.24951-5.07224 4.24951-2.87888 0-4.93501-1.23387-4.93501-4.24951l0-5.62012 2.46776 0 0 5.62012c0 1.371 1.09662 2.19339 2.46725 2.19339 1.37062 0 2.60449-.54839 2.60449-2.33063l0-5.48288 2.46774 0"/>
<path d="m109.97846 85.36275-2.05663 0-5.61964-6.1685 0 6.1685-2.46774 0 0-9.73238 2.33064 0 5.34612 6.03175 0-6.03175 2.46725 0 0 9.73238"/>
<path d="m119.57371 85.36275 2.46778 0 0-9.73241-2.46778 0 0 9.73241z"/>
<path d="m140.13684 84.5405c-1.37126.68501-2.46875.9595-3.97626.9595-3.83876 0-5.89499-2.46774-5.89499-4.93463 0-2.605 2.19374-5.07225 6.03249-5.07225 1.50751 0 2.74126.27388 3.70125.82275l0 2.19337c-1.09749-.54887-2.19374-.9595-3.42749-.9595-2.19376 0-3.70125 1.23337-3.70125 3.01563 0 1.6445 1.50749 2.87851 3.56375 2.87851 1.37125 0 2.19374-.27451 3.7025-.9595l0 2.05611"/>
<path d="m158.09435 85.36275-2.60501 0-.82248-1.91887-4.52376 0-.82248 1.91887-2.60501 0 3.97623-9.73238 3.015 0 4.38751 9.73238zm-5.89499-7.40237-1.37126 3.83838 3.01625 0-1.64499-3.83838"/>
<path d="m172.76184 77.41263-3.56502 0 0 7.95012-2.60373 0 0-7.95012-3.56502 0 0-1.78226 9.73375 0 0 1.78226"/>
<path d="m180.4381 85.36275 2.4673 0 0-9.73241-2.4673 0 0 9.73241z"/>
<path d="m196.33934 85.5c-3.70125 0-5.75751-2.46774-5.75751-4.93463 0-2.46774 1.91875-5.07225 5.75751-5.07225 3.70125 0 5.75624 2.74174 5.75624 5.07225 0 2.46689-2.1925 4.93463-5.75624 4.93463zm0-7.95026c-1.92 0-3.15375 1.23337-3.15375 3.01563 0 1.78175 1.23375 2.87851 3.15375 2.87851 1.91875 0 3.1525-1.09676 3.1525-2.87851 0-1.78226-1.23375-3.01563-3.1525-3.01563"/>
<path d="m219.64183 85.36275-2.05623 0-5.62001-6.1685 0 6.1685-2.4675 0 0-9.73238 2.33 0 5.34624 6.03175 0-6.03175 2.4675 0 0 9.73238"/>
<path d="m234.30934 78.23486c-1.50751-.68512-2.33-.9595-3.28876-.9595-.82376 0-1.37123.41113-1.37123.82225 0 1.50824 5.07123 1.09662 5.07123 4.52386 0 1.78175-1.64499 2.87851-3.83748 2.87851-1.78252 0-2.60501-.41113-3.70128-.9595l0-2.05612c1.50752.9595 2.33002 1.23387 3.42751 1.23387.95876 0 1.50752-.27437 1.50752-.82275 0-1.645-5.07253-1.09674-5.07253-4.52351 0-1.78212 1.50876-2.87888 3.83878-2.87888 1.09624 0 2.05623.27388 3.42624.82275l0 1.91899"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- BUG: Firefox will not animate SVG embedded as background images. [https://bugzilla.mozilla.org/show_bug.cgi?id=908634] -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 234.7 235.6" enable-background="new 0 0 234.7 235.6" xml:space="preserve">
<style>
/* <![CDATA[ */
@-webkit-keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
@keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
g.spinner path {opacity: 0; -webkit-animation: spinner-fade 0.75s linear infinite; animation: spinner-fade 0.75s linear infinite;}
g.spinner path:nth-of-type(1) {-webkit-animation-delay: -0.25s; animation-delay: -0.25s; }
g.spinner path:nth-of-type(2) {-webkit-animation-delay: -0.1875s; animation-delay: -0.1875s; }
g.spinner path:nth-of-type(3) {-webkit-animation-delay: -0.125s; animation-delay: -0.125s; }
g.spinner path:nth-of-type(4) {-webkit-animation-delay: -0.0625s; animation-delay: -0.0625s; }
g.spinner path:nth-of-type(5) {-webkit-animation-delay: 0s; animation-delay: 0s; }
g.spinner path:nth-of-type(6) {-webkit-animation-delay: 0.0625s; animation-delay: 0.0625s; }
g.spinner path:nth-of-type(7) {-webkit-animation-delay: 0.125s; animation-delay: 0.125s; }
g.spinner path:nth-of-type(8) {-webkit-animation-delay: 0.1875s; animation-delay: 0.1875s; }
g.spinner path:nth-of-type(9) {-webkit-animation-delay: 0.25s; animation-delay: 0.25s; }
g.spinner path:nth-of-type(10) {-webkit-animation-delay: 0.3125s; animation-delay: 0.3125s; }
g.spinner path:nth-of-type(11) {-webkit-animation-delay: -0.375s; animation-delay: -0.375s; }
g.spinner path:nth-of-type(12) {-webkit-animation-delay: -0.3125s; animation-delay: -0.3125s; }
/* ]]> */
</style>
<g class="spinner">
<path d="M128.3,10.7c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0v42.7v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V10.7L128.3,10.7L128.3,10.7z" />
<path d="M140.3,56.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.4-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.5,3.9-14.6,3.9l0,0l0.2,0L140.3,56.5L140.3,56.5L140.3,56.5z" />
<path d="M167.4,76.3c0,0-9.2,5.1-3.9,14.3c5.3,9.2,14.6,3.7,14.6,3.7l0,0h0L215,73.1l0,0.1l0,0c0,0,9.2-5.3,3.9-14.5 s-14.6-3.9-14.6-3.9l0,0l0,0.1L167.4,76.3L167.4,76.3L167.4,76.3z" />
<path d="M224,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0h-42.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H224L224,128.3L224,128.3z" />
<path d="M203.8,180.3c0,0,9.2,5.6,14.6-3.6c5.4-9.2-3.8-14.4-3.8-14.4l0,0h0l-36.8-21.7l0,0l0,0 c0,0-9.2-5.4-14.6,3.8c-5.4,9.2,3.8,14.6,3.8,14.6l0,0l0-0.2L203.8,180.3L203.8,180.3L203.8,180.3z" />
<path d="M160.3,215.5c0,0,5.4,9.3,14.7,4.1c9.3-5.2,4.3-14.5,4.3-14.5l0,0v0l-21.1-37.2l-0.1,0l0,0 c0,0-5.3-9.3-14.6-4.1c-9.3,5.2-4.1,14.5-4.1,14.5l0,0l0,0L160.3,215.5L160.3,215.5L160.3,215.5z"/>
<path d="M128.3,181.3c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0V224v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V181.3L128.3,181.3L128.3,181.3z"/>
<path d="M55.3,204.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.3-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.6,3.9-14.6,3.9l0,0l0.2,0L55.3,204.5L55.3,204.5L55.3,204.5z"/>
<path d="M19.6,161.3c0,0-9.2,5.6-3.9,14.8s14.6,4.2,14.6,4.2l0,0h0l36.9-21.5l0-0.1l0,0c0,0,9.2-5.4,3.9-14.6 c-5.3-9.2-14.6-3.9-14.6-3.9l0,0l0-0.1L19.6,161.3L19.6,161.3L19.6,161.3z"/>
<path d="M53.3,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0H10.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H53.3L53.3,128.3L53.3,128.3z"/>
<path d="M56.8,94.3c0,0,9.2,5.1,14.6-4.1c5.4-9.2-3.8-14.9-3.8-14.9l0,0h0L30.8,53.8l0,0.1l0,0c0,0-9.2-5.4-14.6,3.8 S20,72.4,20,72.4l0,0l0,0.2L56.8,94.3L56.8,94.3L56.8,94.3z"/>
<path d="M76.3,66.8c0,0,5.4,9.3,14.7,4.1s4.3-14.5,4.3-14.5l0,0v0l-21-37.2l0,0l0,0c0,0-5.3-9.3-14.5-4.1 s-4.1,14.5-4.1,14.5l0,0l-0.2,0L76.3,66.8L76.3,66.8L76.3,66.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

+91
View File
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="20.64mm" height="9mm" viewBox="0 0 2064 900" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="2064" height="900"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="2" y="0" width="2060" height="899"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="Graphic">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="2064" height="900"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 958,198 L 959,199 959,627 958,628 859,628 C 858,628 858,627 858,627 L 858,199 C 858,199 858,198 859,198 L 958,198 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 826,200 L 696,411 C 695,412 695,415 696,417 L 828,626 C 829,627 828,628 828,628 L 706,628 C 704,628 703,627 702,627 L 624,498 C 622,497 622,497 621,498 L 547,626 C 546,627 545,628 544,628 L 430,628 C 428,628 428,627 429,627 L 563,405 C 565,403 565,401 563,398 L 445,200 C 444,199 445,198 445,198 L 564,198 C 565,198 566,199 566,200 L 638,320 C 639,321 639,321 640,320 L 714,200 C 714,199 715,198 716,198 L 826,198 C 826,198 828,199 826,200 Z"/>
<path fill="rgb(247,225,9)" stroke="none" d="M 2023,628 L 1716,628 1599,448 1585,448 1577,435 1439,435 1669,76 2023,628 Z"/>
<path fill="rgb(35,31,32)" stroke="none" d="M 1782,628 L 1350,628 1486,417 1646,417 1782,628 Z"/>
<path fill="rgb(201,52,55)" stroke="none" d="M 1747,628 L 1314,628 1450,417 1611,417 1747,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 300,198 C 299,198 297,199 297,200 L 22,627 C 22,627 22,628 23,628 L 134,628 C 136,628 137,628 137,627 L 174,568 C 175,568 175,567 177,567 L 294,567 C 295,567 295,568 295,568 L 295,626 C 295,627 295,628 296,628 L 392,628 394,627 394,200 C 394,199 392,198 391,198 L 300,198 Z M 295,484 L 222,484 C 221,484 221,484 221,483 L 299,360 295,483 295,484 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1016,628 L 1147,628 C 1163,627 1180,625 1195,620 1255,601 1286,541 1286,491 1286,410 1223,382 1148,350 1135,344 1119,336 1119,319 1119,301 1136,292 1155,292 L 1257,292 C 1258,292 1258,292 1258,291 L 1258,198 C 1258,197 1258,197 1257,197 L 1150,197 C 1061,197 1008,250 1008,323 1008,388 1049,420 1109,444 1151,461 1178,468 1178,502 1178,519 1168,537 1145,537 1145,537 1018,537 1016,537 L 1016,537 C 1016,537 1016,626 1016,627 1016,628 1018,628 1016,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1341,196 C 1321,196 1306,212 1306,232 1306,251 1321,267 1341,267 1361,267 1378,251 1378,232 1378,212 1361,196 1341,196 Z M 1310,232 C 1310,213 1324,199 1341,199 1360,199 1374,213 1374,232 1374,250 1360,264 1341,264 1324,264 1310,250 1310,232 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1351,233 C 1355,232 1358,227 1358,223 1358,219 1357,215 1353,213 1351,211 1347,211 1344,211 L 1328,211 1328,252 1333,252 1333,234 1345,234 1353,252 1359,252 1351,233 Z M 1333,214 L 1344,214 C 1346,214 1348,214 1350,217 1352,218 1353,219 1353,223 1353,224 1352,226 1351,227 1348,230 1346,230 1344,230 L 1333,230 1333,214 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 109,788 C 97,794 87,796 75,796 41,796 24,775 24,754 24,731 43,710 76,710 89,710 99,713 107,717 L 107,736 C 98,731 89,728 78,728 59,728 46,738 46,754 46,768 59,778 77,778 89,778 96,776 109,770 L 109,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 232,796 C 200,796 182,775 182,754 182,733 200,710 232,710 265,710 281,734 281,754 281,775 263,796 232,796 Z M 205,754 C 205,769 215,778 232,778 248,778 259,769 259,754 259,738 248,728 232,728 215,728 205,738 205,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 430,712 L 448,712 448,795 426,795 426,743 403,769 401,769 377,743 377,795 356,795 356,712 374,712 402,743 430,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 606,712 L 625,712 625,795 604,795 604,743 580,769 577,769 553,743 553,795 532,795 532,712 551,712 579,743 606,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 789,712 L 789,760 C 789,787 769,796 746,796 721,796 703,785 703,760 L 703,712 724,712 724,760 C 724,771 734,778 746,778 757,778 768,774 768,758 L 768,712 789,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 937,795 L 889,742 889,795 868,795 868,712 887,712 933,763 933,712 954,712 954,795 937,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1036,795 L 1058,795 1058,712 1036,712 1036,795 1036,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1212,788 C 1201,794 1191,796 1178,796 1145,796 1128,775 1128,754 1128,731 1147,710 1180,710 1192,710 1203,713 1211,717 L 1211,736 C 1202,731 1192,728 1182,728 1163,728 1150,738 1150,754 1150,768 1163,778 1181,778 1192,778 1199,776 1212,770 L 1212,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1344,795 L 1337,778 1298,778 1291,795 1269,795 1303,712 1328,712 1366,795 1344,795 Z M 1304,764 L 1330,764 1316,731 1304,764 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1461,727 L 1461,795 1439,795 1439,727 1408,727 1408,712 1492,712 1492,727 1461,727 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1557,795 L 1578,795 1578,712 1557,712 1557,795 1557,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1693,796 C 1662,796 1644,775 1644,754 1644,733 1660,710 1693,710 1725,710 1743,734 1743,754 1743,775 1724,796 1693,796 Z M 1666,754 C 1666,769 1677,778 1693,778 1710,778 1720,769 1720,754 1720,738 1710,728 1693,728 1677,728 1666,738 1666,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1875,795 L 1827,742 1827,795 1806,795 1806,712 1826,712 1872,763 1872,712 1893,712 1893,795 1875,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 2018,734 C 2005,728 1998,726 1990,726 1983,726 1978,729 1978,733 1978,746 2022,742 2022,771 2022,787 2008,796 1989,796 1974,796 1967,792 1957,788 L 1957,770 C 1970,778 1977,781 1987,781 1995,781 1999,778 1999,774 1999,760 1956,764 1956,735 1956,720 1969,710 1989,710 1998,710 2006,713 2018,717 L 2018,734 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

+43
View File
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<!--<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />-->
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>Tailscale VPN</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
+25
View File
@@ -0,0 +1,25 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
+3
View File
@@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
+74
View File
@@ -0,0 +1,74 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: rgb(255, 255, 255);
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(5px + 2vmin);
color: rgb(119, 117, 117);
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.videoArea {
display: flex;
align-items: center;
flex-direction: column;
position: relative;
}
.videoArea.full-size {
/* This is basically the videoArea size WITHOUT the profile-panel-height subtracted. In full
screen mode the profile-pane-height won't be showing. */
height: calc(
100% - 2.5rem - 2.188rem - 1rem);
}
.videoArea #visual-confirmation {
height: 100%;
position: absolute;
width: 100%;
}
.videoArea .test-settings-highlight {
animation-duration: 0.5s;
animation-name: opacity;
}
.view {
height: 100%;
}
.center {
margin: 0;
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
+82
View File
@@ -0,0 +1,82 @@
import React, { useCallback } from 'react';
import './App.css';
//Bootstrap
import './css/bootstrap.min.css'
import './css/style.css'
import axios from 'axios'
/*********************************************/
//LICENSE
import {ValidateLicense} from './license';
export var did = "free";
export var appName = "tailscale_vpn";
export var appId = "414812";
/*********************************************/
//Template
export var acapName = "Tailscale VPN";
const styleLink = document.createElement("link");
styleLink.rel = "stylesheet";
styleLink.href = "./css/semantic.min.css";
document.head.appendChild(styleLink);
/*********************************************/
function App() {
//check license
ValidateLicense();
return (
<div>
</div>
);
}
export async function startACAP(){
console.log("In startACAP");
var httpRequest = {
method: "GET",
url: "/axis-cgi/applications/list.cgi"
}
var httpGet = await axios(httpRequest);
//console.log(httpGet.status);
console.log(httpGet.data);
var XMLParser = require('react-xml-parser');
var xmlDoc = new XMLParser().parseFromString(httpGet.data);
console.log(xmlDoc);
var installedApps = xmlDoc.getElementsByTagName("application").length;
console.log("Installed Apps: " + installedApps);
var i =0;
for (i = 0; i < installedApps; i++){
var appstatus = xmlDoc.getElementsByTagName("application")[i].attributes.Status;
//console.log("app number "+i+"Status "+appstatus);
/* look for tailscale_vpn app */
if ((xmlDoc.getElementsByTagName("application")[i].attributes.Name) === appName){
/* check if tailscale_vpn is running */
if (appstatus === 'Running'){
console.log(acapName + " is running");
//load logs.html page
window.location="/local/tailscale_vpn/logs.html";
}else{
console.log(acapName + " is NOT running");
console.log(acapName + " is Starting");
var startACAPRequest = {
method: "GET",
url: "/axis-cgi/applications/control.cgi?action=start&package=" + appName
}
var startACAP = await axios(startACAPRequest)
.then((response) => {
console.log(response);
console.log("Response from tailscale_vpn acap: " + response.data);
//load logs.html page
window.location="/local/tailscale_vpn/logs.html";
})
}
}
}
}
export default App;
+9
View File
@@ -0,0 +1,9 @@
import React from 'react';
import { render } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
const { getByText } = render(<App />);
const linkElement = getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
@@ -0,0 +1,93 @@
import React from 'react';
import { Nav, Navbar, Form, FormControl } from 'react-bootstrap';
import styled from 'styled-components';
import {acapName} from '../App';
const Styles = styled.div`
.navbar {
background-color: white;
min-width:100px
}
a, .navbar-light {
height: 34px;
width: 100%;
color: black;
&:hover { color: white; }
}
.nav-link {
color: black;
&:hover { color: black; }
}
.navbar-brand {
padding-top: 1rem;
font-size: 1.4em;
color: black;
margin-left: 100px;
&:hover { color: black; }
}
.navbar-collapse {
position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
top:0px;
left: 85%
width:100%;
height:47px;
background-color: #FFCC33; /* Axis yeallow */
font-size: 1.4em;
color: black;
&:hover { color: white; }
}
.form-center {
position: absolute !important;
left: 25%;
right: 25%;
}
#conertext {
padding: 25px;
color:grey;
padding-top: 27px;
font-size: 10px;
}
#line {
top:0px;
height: 6px;
background-color: #e6e6e6;
}
#cornerimage {
top: 0px;
height: 62px;
}
#cornerinfo{
position: fixed;
height:62px;
width:100%;
background-color: #FFCC33; /* Axis yeallow */
left: 85%;
font-size: 1.4em;
}
#logoimage{
position: fixed;
top:5px;
font-size: 1.4em;
}
`;
export const NavigationBar = () => (
<Styles>
<Navbar >
<img id="logoimage" src="./img/logo.svg" ></img>
<Navbar.Brand>{acapName}</Navbar.Brand>
<div id="cornerinfo">
<img id="cornerimage" src="./img/topcorner62.png" alt="Axis" ></img>
{/*<span id="conertext">Professional Services US</span>*/}
</div>
</Navbar>
<hr id="line"></hr>
</Styles>
)
/*
<Form className="form-center">
<FormControl type="text" placeholder="Search" className="" />
</Form>
*/
@@ -0,0 +1,77 @@
import React from 'react';
import styled from 'styled-components';
import { Menu } from 'semantic-ui-react';
import {Home} from '../App';
import {Config} from '../App';
import {HomeIcon, ConfigurationIcon} from 'practical-react-components-icons'
import {PracticalProvider} from 'practical-react-components-core'
import { Text } from 'react-native'
const StyledSideNav = styled.div`
.menu {
position: fixed;
top: 50px;
height: 100%;
background-color: #e6e6e6;
border: 0px;
}
`;
class SidebarPage extends React.Component {
constructor(props) {
super(props);
this.state = {
activeItem: 'Home',
}
}
// ** EDIT ** itens lists
render() {
const { activeItem } = this.state
return(
<PracticalProvider>
<StyledSideNav>
<Menu vertical>
<Menu.Item
name='Home'
onClick={Home}
//as={Link}
//to="/"
>
<HomeIcon> </HomeIcon>
<Text>Home</Text>
</Menu.Item>
<Menu.Item
name='Configuration'
onClick={Config}
//as={Link}
//to="/Config"
>
<ConfigurationIcon></ConfigurationIcon>
<Text>Configuration</Text>
</Menu.Item>
{/*<Menu.Item
name='Status'
onClick={this.handleItemClick}
as={Link}
to="/NoMatch"
/>*/}
</Menu>
</StyledSideNav>
</PracticalProvider>
);
}
}
export default SidebarPage;
+587
View File
@@ -0,0 +1,587 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+218
View File
@@ -0,0 +1,218 @@
body {
font-family: sans-serif,Helvetica, Arial, Verdanda, Tahoma, Geneva;
font-size: 12px;
}
/*h1 {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #484848;
font-size: 18px;
font-weight: bold;
}*/
button {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #ffffff;
font-size: 12px;
background: grey;
padding: 5px 15px 5px 15px;
text-decoration: none;
text-shadow: none;
border: none;
cursor: pointer;
border-radius: 25px;
}
#tables{
display: flex;
padding-left: 0px;
}
.SLInput {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 250px;
float:initial;
}
.SLInput_res {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 72px;
float:initial;
}
.SLInput_dropres {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 100px;
float:initial;
}
.header {
height: 40px;
width: auto;
background-color: rgb(216,207,198);
margin: 0px;
border-bottom: 3px solid #ffcb31;
position: absolute;
left: 0px;
right: 0px;
top: 0px;
text-align: center;
padding: 0px;
margin: 0px;
}
.header .logo {
background-repeat: no-repeat;
width: 83px;
height: 30px;
left: 20px;
top: 5px;
position: absolute;
}
.header h1 {
position: absolute;
top: 10px;
}
.saving h1 {
color: grey;
font-size: 15px;
margin-top: 5px;
}
.settings-menu {
width: 100%;
background-color: #ffffff;
margin: 0px;
border-bottom: 3px solid rgb(0,157,220);
position: absolute;
left: 0px;
right: 0px;
top: 43px;
text-align: left;
padding: 0px;
margin: 0px;
z-index: 10;
}
.settings-menu {
overflow: visible;
}
.settings-item {
position: relative;
top: 0;
bottom: 0;
padding: 10px 40px 10px 10px;
margin: 10px;
display: inline-block;
float: left;
overflow: visible;
max-width: 400px;
}
.settings-item h1 {
color: rgb(0,157,220);
font-size: 15px;
margin-top: 5px;
}
.settings-item span {
width: 100px;
display: inline-block;
}
#logo {
font-size:50px;
color:black;
top: 50px;
}
#ruleSpinner {
padding-top: 20px;
position: absolute;
left: 0px;
}
#main {
top: 50px;
position: relative;
color: grey;
font-size: 15px;
font-weight: bold;
}
#configpage{
top: 70px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#homepage{
width: 800px;
top: 70px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#savebutton {
left:50px;
padding-top:20px;
}
li:hover{
background-color:#FFC106;
}
#licensepage {
padding-left:50px;
}
#licenseCode {
width:250px;
}
#savelayoutdiv {
position: absolute;
padding-left: 20px;
padding-right: 20px;
top: 60px;
left: 690px;
#background-color:grey;
#width:100px;
#border-radius:25px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+27
View File
@@ -0,0 +1,27 @@
<svg focusable="false" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 238 90" xml:space="preserve">
<g>
<path d="m98.87496 15.58887 11.51463 0 .13725.13751 0 50.03436-.13725.13713-11.51463 0c-.13713 0-.13713-.13713-.13713-.13713l0-50.03436c0 0 0-.13751.13713-.13751"/>
<path d="m95.03658 15.58887c0 0 .13725.13751 0 .27376l-15.21574 24.67537c-.13725.13675-.13725.41113 0 .68513l15.353 24.40038c.13675.13724 0 .27437 0 .27437l-14.25637 0c-.13713 0-.27438-.13713-.41113-.13713l-9.1845-15.07912c-.13725-.13725-.13725-.13725-.2745 0l-8.63576 14.94188c-.13662.13724-.27387.27437-.41112.27437l-13.29638 0c-.27438 0-.27438-.13713-.13725-.13713l15.627-25.90875c.27438-.27312.27438-.54811 0-.82187l-13.708-23.1675c-.13725-.13625 0-.27376 0-.27376l13.84525 0c.13713 0 .27388.13751.27388.27376l8.36187 13.9825c.13712.1375.13712.1375.27388 0l8.63625-13.9825c0-.13625.13725-.27376.27438-.27376l12.88525 0"/>
<path d="m193.45934 1.33263 41.39876 64.56525-35.91498 0-13.57002-21.11024-1.64502 0-.95998-1.50838-16.175 0 26.86624-41.94663" fill="#f7e109"/>
<path d="m190.85559 41.22313 15.90125 24.67474-50.58249 0 15.90126-24.67474 18.78 0" fill="#231f20"/>
<path d="m186.74309 41.22313 15.90126 24.67474-50.5825 0 15.90123-24.67474 18.78001 0" fill="#c93437"/>
<path d="m44.1802 15.5889-10.6924 0c-.1372 0-.2745.1375-.2745.2737l-32.2133 49.8981c0 0 0 .13721.13721.13721l13.02249 0c.1366 0 .2739 0 .2739-.13721l4.3867-6.8544c.1372 0 .1372-.1368.2744-.1368l13.708 0c.1367 0 .1367.1368.1367.1368l0 6.7172c0 .1372 0 .27441.1373.27441l11.2406 0 .1373-.13721 0-49.8981c0-.1362-.1373-.2737-.2744-.2737l0 0zm-11.2407 33.311c0 .1372 0 .1372 0 .1372l-8.4985 0c-.1373 0-.1373 0-.1373-.1372l9.0469-14.3935 0 0-.4111 14.3935"/>
<path d="m117.24371 65.89787 15.21562 0c1.91875-.13713 3.83875-.41162 5.62126-.95987 6.98999-2.19289 10.69124-9.18464 10.69124-15.07863 0-9.4585-7.40251-12.748-16.175-16.44925-1.50874-.68625-3.42751-1.645-3.42751-3.70125 0-2.05626 2.05626-3.15375 4.25002-3.15375l11.92624 0c.13626 0 .13626 0 .13626-.13626l0-10.83c0-.13625 0-.13625-.13626-.13625l-12.47499 0c-10.41749 0-16.58638 6.16876-16.58638 14.80376 0 7.53999 4.79788 11.24112 11.78889 14.11963 4.935 1.91887 8.08748 2.74161 8.08748 6.71724 0 2.05612-1.23375 4.11224-3.83876 4.11224 0 0-14.94099 0-15.07813 0l0 0c0 0 0 10.41801 0 10.55525 0 .13713.13712.13713 0 .13713"/>
<path d="m155.21434 15.31512c-2.33 0-4.1125 1.91875-4.1125 4.25 0 2.19374 1.7825 4.1125 4.1125 4.1125 2.33 0 4.25-1.91876 4.25-4.1125 0-2.33125-1.92-4.25-4.25-4.25zm0 7.95c-2.05626 0-3.70126-1.64374-3.70126-3.7 0-2.19376 1.645-3.83875 3.70126-3.83875 2.19374 0 3.83875 1.64499 3.83875 3.83875 0 2.05626-1.64499 3.7-3.83875 3.7"/>
<path d="m157.27058 21.89513-.95877-2.19376c.54752-.13625.82251-.685.82251-1.23375 0-.41125-.1375-.82249-.54875-1.09625-.27373-.27374-.68498-.27374-1.09624-.27374l-1.7825 0 0 4.7975.54875 0 0-2.05626 1.37 0 .96001 2.05626.685 0zm-3.01501-2.60501 0-1.78123 1.23375 0c.27376 0 .54875 0 .68501.27374.27374.13625.41124.27374.41124.685 0 .13751-.1375.41125-.27376.54875-.27374.27374-.54874.27374-.82249.27374l-1.23375 0"/>
<path d="m11.14359 84.5405c-1.37063.68501-2.46683.9595-3.97513.9595-3.9751 0-5.89405-2.46774-5.89405-4.93463 0-2.605 2.19336-5.07225 6.03125-5.07225 1.50781 0 2.74117.27388 3.70118.82275l0 2.19337c-1.09663-.54887-2.19336-.9595-3.42676-.9595-2.19335 0-3.70165 1.23337-3.70165 3.01563 0 1.6445 1.5083 2.87851 3.56445 2.87851 1.3706 0 2.19334-.27451 3.70071-.9595l0 2.05611"/>
<path d="m25.53759 85.5c-3.70162 0-5.75775-2.46774-5.75775-4.93463 0-2.46774 2.05612-5.07225 5.75775-5.07225 3.83788 0 5.75688 2.74174 5.75688 5.07225 0 2.46689-2.05613 4.93463-5.75688 4.93463zm0-7.95026c-1.91937 0-3.15325 1.23337-3.15325 3.01563 0 1.78175 1.23388 2.87851 3.15325 2.87851 1.919 0 3.15288-1.09676 3.15288-2.87851 0-1.78226-1.23388-3.01563-3.15288-3.01563"/>
<path d="m48.70409 75.63037 2.05612 0 0 9.73238-2.46775 0 0-6.03125-2.74163 3.01563-.274 0-2.74162-3.01563 0 6.03125-2.46738 0 0-9.73238 2.05625 0 3.29 3.70113 3.29-3.70113"/>
<path d="m69.26559 75.63037 2.19337 0 0 9.73238-2.46775 0 0-6.03125-2.74125 3.01563-.41163 0-2.74112-3.01563 0 6.03125-2.46788 0 0-9.73238 2.19337 0 3.29013 3.70113 3.15275-3.70113"/>
<path d="m90.65033 75.63037 0 5.62012c0 3.15276-2.33049 4.24951-5.07224 4.24951-2.87888 0-4.93501-1.23387-4.93501-4.24951l0-5.62012 2.46776 0 0 5.62012c0 1.371 1.09662 2.19339 2.46725 2.19339 1.37062 0 2.60449-.54839 2.60449-2.33063l0-5.48288 2.46774 0"/>
<path d="m109.97846 85.36275-2.05663 0-5.61964-6.1685 0 6.1685-2.46774 0 0-9.73238 2.33064 0 5.34612 6.03175 0-6.03175 2.46725 0 0 9.73238"/>
<path d="m119.57371 85.36275 2.46778 0 0-9.73241-2.46778 0 0 9.73241z"/>
<path d="m140.13684 84.5405c-1.37126.68501-2.46875.9595-3.97626.9595-3.83876 0-5.89499-2.46774-5.89499-4.93463 0-2.605 2.19374-5.07225 6.03249-5.07225 1.50751 0 2.74126.27388 3.70125.82275l0 2.19337c-1.09749-.54887-2.19374-.9595-3.42749-.9595-2.19376 0-3.70125 1.23337-3.70125 3.01563 0 1.6445 1.50749 2.87851 3.56375 2.87851 1.37125 0 2.19374-.27451 3.7025-.9595l0 2.05611"/>
<path d="m158.09435 85.36275-2.60501 0-.82248-1.91887-4.52376 0-.82248 1.91887-2.60501 0 3.97623-9.73238 3.015 0 4.38751 9.73238zm-5.89499-7.40237-1.37126 3.83838 3.01625 0-1.64499-3.83838"/>
<path d="m172.76184 77.41263-3.56502 0 0 7.95012-2.60373 0 0-7.95012-3.56502 0 0-1.78226 9.73375 0 0 1.78226"/>
<path d="m180.4381 85.36275 2.4673 0 0-9.73241-2.4673 0 0 9.73241z"/>
<path d="m196.33934 85.5c-3.70125 0-5.75751-2.46774-5.75751-4.93463 0-2.46774 1.91875-5.07225 5.75751-5.07225 3.70125 0 5.75624 2.74174 5.75624 5.07225 0 2.46689-2.1925 4.93463-5.75624 4.93463zm0-7.95026c-1.92 0-3.15375 1.23337-3.15375 3.01563 0 1.78175 1.23375 2.87851 3.15375 2.87851 1.91875 0 3.1525-1.09676 3.1525-2.87851 0-1.78226-1.23375-3.01563-3.1525-3.01563"/>
<path d="m219.64183 85.36275-2.05623 0-5.62001-6.1685 0 6.1685-2.4675 0 0-9.73238 2.33 0 5.34624 6.03175 0-6.03175 2.4675 0 0 9.73238"/>
<path d="m234.30934 78.23486c-1.50751-.68512-2.33-.9595-3.28876-.9595-.82376 0-1.37123.41113-1.37123.82225 0 1.50824 5.07123 1.09662 5.07123 4.52386 0 1.78175-1.64499 2.87851-3.83748 2.87851-1.78252 0-2.60501-.41113-3.70128-.9595l0-2.05612c1.50752.9595 2.33002 1.23387 3.42751 1.23387.95876 0 1.50752-.27437 1.50752-.82275 0-1.645-5.07253-1.09674-5.07253-4.52351 0-1.78212 1.50876-2.87888 3.83878-2.87888 1.09624 0 2.05623.27388 3.42624.82275l0 1.91899"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- BUG: Firefox will not animate SVG embedded as background images. [https://bugzilla.mozilla.org/show_bug.cgi?id=908634] -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 234.7 235.6" enable-background="new 0 0 234.7 235.6" xml:space="preserve">
<style>
/* <![CDATA[ */
@-webkit-keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
@keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
g.spinner path {opacity: 0; -webkit-animation: spinner-fade 0.75s linear infinite; animation: spinner-fade 0.75s linear infinite;}
g.spinner path:nth-of-type(1) {-webkit-animation-delay: -0.25s; animation-delay: -0.25s; }
g.spinner path:nth-of-type(2) {-webkit-animation-delay: -0.1875s; animation-delay: -0.1875s; }
g.spinner path:nth-of-type(3) {-webkit-animation-delay: -0.125s; animation-delay: -0.125s; }
g.spinner path:nth-of-type(4) {-webkit-animation-delay: -0.0625s; animation-delay: -0.0625s; }
g.spinner path:nth-of-type(5) {-webkit-animation-delay: 0s; animation-delay: 0s; }
g.spinner path:nth-of-type(6) {-webkit-animation-delay: 0.0625s; animation-delay: 0.0625s; }
g.spinner path:nth-of-type(7) {-webkit-animation-delay: 0.125s; animation-delay: 0.125s; }
g.spinner path:nth-of-type(8) {-webkit-animation-delay: 0.1875s; animation-delay: 0.1875s; }
g.spinner path:nth-of-type(9) {-webkit-animation-delay: 0.25s; animation-delay: 0.25s; }
g.spinner path:nth-of-type(10) {-webkit-animation-delay: 0.3125s; animation-delay: 0.3125s; }
g.spinner path:nth-of-type(11) {-webkit-animation-delay: -0.375s; animation-delay: -0.375s; }
g.spinner path:nth-of-type(12) {-webkit-animation-delay: -0.3125s; animation-delay: -0.3125s; }
/* ]]> */
</style>
<g class="spinner">
<path d="M128.3,10.7c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0v42.7v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V10.7L128.3,10.7L128.3,10.7z" />
<path d="M140.3,56.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.4-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.5,3.9-14.6,3.9l0,0l0.2,0L140.3,56.5L140.3,56.5L140.3,56.5z" />
<path d="M167.4,76.3c0,0-9.2,5.1-3.9,14.3c5.3,9.2,14.6,3.7,14.6,3.7l0,0h0L215,73.1l0,0.1l0,0c0,0,9.2-5.3,3.9-14.5 s-14.6-3.9-14.6-3.9l0,0l0,0.1L167.4,76.3L167.4,76.3L167.4,76.3z" />
<path d="M224,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0h-42.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H224L224,128.3L224,128.3z" />
<path d="M203.8,180.3c0,0,9.2,5.6,14.6-3.6c5.4-9.2-3.8-14.4-3.8-14.4l0,0h0l-36.8-21.7l0,0l0,0 c0,0-9.2-5.4-14.6,3.8c-5.4,9.2,3.8,14.6,3.8,14.6l0,0l0-0.2L203.8,180.3L203.8,180.3L203.8,180.3z" />
<path d="M160.3,215.5c0,0,5.4,9.3,14.7,4.1c9.3-5.2,4.3-14.5,4.3-14.5l0,0v0l-21.1-37.2l-0.1,0l0,0 c0,0-5.3-9.3-14.6-4.1c-9.3,5.2-4.1,14.5-4.1,14.5l0,0l0,0L160.3,215.5L160.3,215.5L160.3,215.5z"/>
<path d="M128.3,181.3c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0V224v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V181.3L128.3,181.3L128.3,181.3z"/>
<path d="M55.3,204.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.3-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.6,3.9-14.6,3.9l0,0l0.2,0L55.3,204.5L55.3,204.5L55.3,204.5z"/>
<path d="M19.6,161.3c0,0-9.2,5.6-3.9,14.8s14.6,4.2,14.6,4.2l0,0h0l36.9-21.5l0-0.1l0,0c0,0,9.2-5.4,3.9-14.6 c-5.3-9.2-14.6-3.9-14.6-3.9l0,0l0-0.1L19.6,161.3L19.6,161.3L19.6,161.3z"/>
<path d="M53.3,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0H10.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H53.3L53.3,128.3L53.3,128.3z"/>
<path d="M56.8,94.3c0,0,9.2,5.1,14.6-4.1c5.4-9.2-3.8-14.9-3.8-14.9l0,0h0L30.8,53.8l0,0.1l0,0c0,0-9.2-5.4-14.6,3.8 S20,72.4,20,72.4l0,0l0,0.2L56.8,94.3L56.8,94.3L56.8,94.3z"/>
<path d="M76.3,66.8c0,0,5.4,9.3,14.7,4.1s4.3-14.5,4.3-14.5l0,0v0l-21-37.2l0,0l0,0c0,0-5.3-9.3-14.5-4.1 s-4.1,14.5-4.1,14.5l0,0l-0.2,0L76.3,66.8L76.3,66.8L76.3,66.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

+91
View File
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="20.64mm" height="9mm" viewBox="0 0 2064 900" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="2064" height="900"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="2" y="0" width="2060" height="899"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="Graphic">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="2064" height="900"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 958,198 L 959,199 959,627 958,628 859,628 C 858,628 858,627 858,627 L 858,199 C 858,199 858,198 859,198 L 958,198 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 826,200 L 696,411 C 695,412 695,415 696,417 L 828,626 C 829,627 828,628 828,628 L 706,628 C 704,628 703,627 702,627 L 624,498 C 622,497 622,497 621,498 L 547,626 C 546,627 545,628 544,628 L 430,628 C 428,628 428,627 429,627 L 563,405 C 565,403 565,401 563,398 L 445,200 C 444,199 445,198 445,198 L 564,198 C 565,198 566,199 566,200 L 638,320 C 639,321 639,321 640,320 L 714,200 C 714,199 715,198 716,198 L 826,198 C 826,198 828,199 826,200 Z"/>
<path fill="rgb(247,225,9)" stroke="none" d="M 2023,628 L 1716,628 1599,448 1585,448 1577,435 1439,435 1669,76 2023,628 Z"/>
<path fill="rgb(35,31,32)" stroke="none" d="M 1782,628 L 1350,628 1486,417 1646,417 1782,628 Z"/>
<path fill="rgb(201,52,55)" stroke="none" d="M 1747,628 L 1314,628 1450,417 1611,417 1747,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 300,198 C 299,198 297,199 297,200 L 22,627 C 22,627 22,628 23,628 L 134,628 C 136,628 137,628 137,627 L 174,568 C 175,568 175,567 177,567 L 294,567 C 295,567 295,568 295,568 L 295,626 C 295,627 295,628 296,628 L 392,628 394,627 394,200 C 394,199 392,198 391,198 L 300,198 Z M 295,484 L 222,484 C 221,484 221,484 221,483 L 299,360 295,483 295,484 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1016,628 L 1147,628 C 1163,627 1180,625 1195,620 1255,601 1286,541 1286,491 1286,410 1223,382 1148,350 1135,344 1119,336 1119,319 1119,301 1136,292 1155,292 L 1257,292 C 1258,292 1258,292 1258,291 L 1258,198 C 1258,197 1258,197 1257,197 L 1150,197 C 1061,197 1008,250 1008,323 1008,388 1049,420 1109,444 1151,461 1178,468 1178,502 1178,519 1168,537 1145,537 1145,537 1018,537 1016,537 L 1016,537 C 1016,537 1016,626 1016,627 1016,628 1018,628 1016,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1341,196 C 1321,196 1306,212 1306,232 1306,251 1321,267 1341,267 1361,267 1378,251 1378,232 1378,212 1361,196 1341,196 Z M 1310,232 C 1310,213 1324,199 1341,199 1360,199 1374,213 1374,232 1374,250 1360,264 1341,264 1324,264 1310,250 1310,232 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1351,233 C 1355,232 1358,227 1358,223 1358,219 1357,215 1353,213 1351,211 1347,211 1344,211 L 1328,211 1328,252 1333,252 1333,234 1345,234 1353,252 1359,252 1351,233 Z M 1333,214 L 1344,214 C 1346,214 1348,214 1350,217 1352,218 1353,219 1353,223 1353,224 1352,226 1351,227 1348,230 1346,230 1344,230 L 1333,230 1333,214 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 109,788 C 97,794 87,796 75,796 41,796 24,775 24,754 24,731 43,710 76,710 89,710 99,713 107,717 L 107,736 C 98,731 89,728 78,728 59,728 46,738 46,754 46,768 59,778 77,778 89,778 96,776 109,770 L 109,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 232,796 C 200,796 182,775 182,754 182,733 200,710 232,710 265,710 281,734 281,754 281,775 263,796 232,796 Z M 205,754 C 205,769 215,778 232,778 248,778 259,769 259,754 259,738 248,728 232,728 215,728 205,738 205,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 430,712 L 448,712 448,795 426,795 426,743 403,769 401,769 377,743 377,795 356,795 356,712 374,712 402,743 430,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 606,712 L 625,712 625,795 604,795 604,743 580,769 577,769 553,743 553,795 532,795 532,712 551,712 579,743 606,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 789,712 L 789,760 C 789,787 769,796 746,796 721,796 703,785 703,760 L 703,712 724,712 724,760 C 724,771 734,778 746,778 757,778 768,774 768,758 L 768,712 789,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 937,795 L 889,742 889,795 868,795 868,712 887,712 933,763 933,712 954,712 954,795 937,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1036,795 L 1058,795 1058,712 1036,712 1036,795 1036,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1212,788 C 1201,794 1191,796 1178,796 1145,796 1128,775 1128,754 1128,731 1147,710 1180,710 1192,710 1203,713 1211,717 L 1211,736 C 1202,731 1192,728 1182,728 1163,728 1150,738 1150,754 1150,768 1163,778 1181,778 1192,778 1199,776 1212,770 L 1212,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1344,795 L 1337,778 1298,778 1291,795 1269,795 1303,712 1328,712 1366,795 1344,795 Z M 1304,764 L 1330,764 1316,731 1304,764 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1461,727 L 1461,795 1439,795 1439,727 1408,727 1408,712 1492,712 1492,727 1461,727 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1557,795 L 1578,795 1578,712 1557,712 1557,795 1557,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1693,796 C 1662,796 1644,775 1644,754 1644,733 1660,710 1693,710 1725,710 1743,734 1743,754 1743,775 1724,796 1693,796 Z M 1666,754 C 1666,769 1677,778 1693,778 1710,778 1720,769 1720,754 1720,738 1710,728 1693,728 1677,728 1666,738 1666,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1875,795 L 1827,742 1827,795 1806,795 1806,712 1826,712 1872,763 1872,712 1893,712 1893,795 1875,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 2018,734 C 2005,728 1998,726 1990,726 1983,726 1978,729 1978,733 1978,746 2022,742 2022,771 2022,787 2008,796 1989,796 1974,796 1967,792 1957,788 L 1957,770 C 1970,778 1977,781 1987,781 1995,781 1999,778 1999,774 1999,760 1956,764 1956,735 1956,720 1969,710 1989,710 1998,710 2006,713 2018,717 L 2018,734 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

+13
View File
@@ -0,0 +1,13 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
+17
View File
@@ -0,0 +1,17 @@
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();
+247
View File
@@ -0,0 +1,247 @@
import React from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios'
import {did,appName,appId,startACAP} from './App'
var serialNbr = "";
var enterLicenseCode = (
<div>
<div className='input-group mb-3' id="licenseCodeRef">
<div className='input-group-prepend'><br/>
<span className='input-group-text' id=''>License Code</span><br/>
</div>
<input type="text" placeholder="Enter License Code" className="form-control" id="licenseCode" />
</div>
<br/>
<button type="button" id="getLicenseButton" className="btn btn-primary" onClick={glk}>
Get License
</button>
</div>
);
var freeLicenseCode = (
<div></div>
);
class LicensePage extends React.Component{
render(){
return(
<div className="App">
<header className="App-header">
<div className="lic">
<div className="licArea">
<div style={{width:"100vh",height:"100vh",borderWidth:"0px"}}>
<div className="center">
<img src="./img/axis.svg" height="100" alt=""/><br/>
<div id="license">
<br/>
<p>{this.props.message}</p>
{/*{this.props.licStatus}*/}
</div>
</div>
</div>
</div>
</div>
</header>
</div>
)
}
}
//request license to axis site
async function glk(){
//licStatus = "Retrieving license key. Please wait ...";
//render License Page
ReactDOM.render(<LicensePage message="Retrieving license key. Please wait ..." />,document.getElementById('root'));
//var lcode = document.getElementById("licenseCode").value;
//console.log("license code : " + lcode);
//payload
//var d = "{\"licenseCode\":\""+lcode+"\",\"deviceId\":\""+serialNbr+"\"}";
if(did==="free"){
var d = "{\"applicationId\":\""+appId+"\",\"deviceId\":\""+serialNbr+"\",\"licenseType\":1}"
}
//build http get request
var getLicenseRequest = {
method: "POST",
crossDomain: true,
url: "https://gateway.api.axis.com/info-ext/acap/aca/v2/licensekey",
data: d,
dataType: "json",
headers: {
Authorization: "Bearer 2f742d39-1251-30bc-ba38-bc460e820596",
'Content-Type': 'application/json'
},
}
//send request
var getLicense = await axios(getLicenseRequest)
//error handling
.catch(err => {
//console.log(err.response);
var errorMessage = "Error! Code: " + err.response.status + " Message: " + err.response.data.originalTrace;
console.log(errorMessage);
ReactDOM.render(<LicensePage message={errorMessage} licStatus={enterLicenseCode}/>,document.getElementById('root'));
})
//debug
console.log(getLicense.status);
console.log(getLicense.data);
if (getLicense.status===200){
//console.log("200OK!");
ilk(getLicense.data);
}else{
alert("Error receiving license key, install through Axis Device Management or the ACAP List page");
}
}
//upload license into camera
async function ilk(lr){
//render License Page
ReactDOM.render(<LicensePage message="Installing license key. Please wait ..." licStatus={enterLicenseCode}/>,document.getElementById('root'));
console.log("LR = "+lr.xml);
if(lr.xml !== undefined){
var formData = new FormData();
var blob = new Blob([lr.xml], {type: "application/octet-stream"});
formData.append("lic_data",blob,"key.lic");
var uploadKeyRequest = {
method: "POST",
url: "/axis-cgi/applications/license.cgi?action=uploadlicensekey&package=" + appName,
data: formData
};
var uploadKey = await axios(uploadKeyRequest);
console.log("Response: " + uploadKey.status);
if (uploadKey.data.includes("OK")){
console.log("License key installed");
//start acap
restartAcap();
//check license again and redirect if Valid
ValidateLicense();
}else{
if (uploadKey.data.includes("21")){
console.log("Error: Invalid license key file.");
alert("Error: Invalid license key file.");
}
if (uploadKey.data.includes("22")){
console.log("Error: File upload failed.");
alert("Error: File upload failed.");
}
if (uploadKey.data.includes("23")){
console.log("Error: Failed to remove the license key file.");
alert("Error: Failed to remove the license key file.");
}
if (uploadKey.data.includes("24")){
console.log("Error: The application is not correctly installed");
alert("Error: The application is not correctly installed");
}
if (uploadKey.data.includes("25")){
console.log("Error: The key’s application ID does not match the installed application.");
alert("Error: The key’s application ID does not match the installed application.");
}
if (uploadKey.data.includes("26")){
console.log("Error: The license key cannot be used with this version of the application.");
alert("Error: The license key cannot be used with this version of the application.");
}
if (uploadKey.data.includes("27")){
console.log("Error: Failed to connect to Axis online service.");
alert("Error: Failed to connect to Axis online service.");
}
if (uploadKey.data.includes("28")){
console.log("Error: Failed to receive license from Axis online service.");
alert("Error: Failed to receive license from Axis online service.");
}
if (uploadKey.data.includes("29")){
console.log("Error: Bad configuration file for the application.");
alert("Error: Bad configuration file for the application.");
}
if (uploadKey.data.includes("30")){
console.log("Error: Wrong serial number.");
alert("Error: Wrong serial number.");
}
if (uploadKey.data.includes("31")){
console.log("Error: The license key has expired.");
alert("Error: The license key has expired.");
}
}
}else {
//All kinds of errors.
console.log("Error receiving license key, install through Axis Device Management or the ACAP List page");
alert("Error receiving license key, install through Axis Device Management or the ACAP List page");
}
}
//Validate license key (this is done first at startup)
export async function ValidateLicense(){
//get serial number
getSerialNbr();
var listRequest = {
method: "GET",
url: "/axis-cgi/applications/list.cgi"
}
var list = await axios(listRequest);
//debug
console.log(list.data);
var XMLParser = require('react-xml-parser');
var xmlDoc = new XMLParser().parseFromString(list.data);
//debug
console.log(xmlDoc);
//find number of installed apps
var installedApps = xmlDoc.getElementsByTagName("application").length;
//debug
console.log("Installed Apps: " + installedApps);
//scan through them and look for our app
var i =0;
for (i = 0; i < installedApps; i++){
var licenseStatus = xmlDoc.getElementsByTagName("application")[i].attributes.License;
if ((xmlDoc.getElementsByTagName("application")[i].attributes.Name) === appName){
if (licenseStatus === 'Missing'){
console.log("Missing license.");
if (did === 'free'){
//install the license
glk();
}
//render License Page
ReactDOM.render(<LicensePage message="A license key needs to be installed." licStatus={enterLicenseCode}/>,document.getElementById('root'));
}
if (licenseStatus === 'Valid'){
console.log("Valid license.");
//This is the function to call if the license is Valid. This resides in the app.js file
startACAP();
//render License Page
ReactDOM.render(<LicensePage message="Loading ..."/>,document.getElementById('root'));
}
if (licenseStatus === 'Invalid'){
console.log("Invalid license.");
//render License Page
ReactDOM.render(<LicensePage message="Invalid license." licStatus={enterLicenseCode}/>,document.getElementById('root'));
}
}
}
}
async function getSerialNbr(){
var serialNumberRequest = {
method: "GET",
url: "/axis-cgi/param.cgi?action=list&group=Properties.System.SerialNumber"
}
var response = await axios(serialNumberRequest);
serialNbr = response.data.split("=")[1].replace("\n","").trim();
console.log("serial number: " + serialNbr);
}
async function restartAcap() {
var restartRequest = {
method: "GET",
url: "/axis-cgi/applications/control.cgi?action=restart&package=" + appName.toLowerCase()
}
var restart = await axios(restartRequest);
}
//export default glk;
+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
<g fill="#61DAFB">
<path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
<circle cx="420.9" cy="296.5" r="45.7"/>
<path d="M520.5 78.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+141
View File
@@ -0,0 +1,141 @@
// This optional code is used to register a service worker.
// register() is not called by default.
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on subsequent visits to a page, after all the
// existing tabs open on the page have been closed, since previously cached
// resources are updated in the background.
// To learn more about the benefits of this model and instructions on how to
// opt-in, read https://bit.ly/CRA-PWA
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.0/8 are considered localhost for IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);
export function register(config) {
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
// The URL constructor is available in all browsers that support SW.
const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
if (publicUrl.origin !== window.location.origin) {
// Our service worker won't work if PUBLIC_URL is on a different origin
// from what our page is served on. This might happen if a CDN is used to
// serve assets; see https://github.com/facebook/create-react-app/issues/2374
return;
}
window.addEventListener('load', () => {
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
if (isLocalhost) {
// This is running on localhost. Let's check if a service worker still exists or not.
checkValidServiceWorker(swUrl, config);
// Add some additional logging to localhost, pointing developers to the
// service worker/PWA documentation.
navigator.serviceWorker.ready.then(() => {
console.log(
'This web app is being served cache-first by a service ' +
'worker. To learn more, visit https://bit.ly/CRA-PWA'
);
});
} else {
// Is not localhost. Just register service worker
registerValidSW(swUrl, config);
}
});
}
}
function registerValidSW(swUrl, config) {
navigator.serviceWorker
.register(swUrl)
.then(registration => {
registration.onupdatefound = () => {
const installingWorker = registration.installing;
if (installingWorker == null) {
return;
}
installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// At this point, the updated precached content has been fetched,
// but the previous service worker will still serve the older
// content until all client tabs are closed.
console.log(
'New content is available and will be used when all ' +
'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
);
// Execute callback
if (config && config.onUpdate) {
config.onUpdate(registration);
}
} else {
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console.log('Content is cached for offline use.');
// Execute callback
if (config && config.onSuccess) {
config.onSuccess(registration);
}
}
}
};
};
})
.catch(error => {
console.error('Error during service worker registration:', error);
});
}
function checkValidServiceWorker(swUrl, config) {
// Check if the service worker can be found. If it can't reload the page.
fetch(swUrl, {
headers: { 'Service-Worker': 'script' },
})
.then(response => {
// Ensure service worker exists, and that we really are getting a JS file.
const contentType = response.headers.get('content-type');
if (
response.status === 404 ||
(contentType != null && contentType.indexOf('javascript') === -1)
) {
// No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then(registration => {
registration.unregister().then(() => {
window.location.reload();
});
});
} else {
// Service worker found. Proceed as normal.
registerValidSW(swUrl, config);
}
})
.catch(() => {
console.log(
'No internet connection found. App is running in offline mode.'
);
});
}
export function unregister() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready
.then(registration => {
registration.unregister();
})
.catch(error => {
console.error(error.message);
});
}
}
+5
View File
@@ -0,0 +1,5 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom/extend-expect';
@@ -0,0 +1,42 @@
import { defaultTheme, palette } from 'practical-react-components-core'
export const myCustomTheme = {
...defaultTheme,
name: 'customTheme',
color: {
text00:palette.white,
text01:palette.grey16,
text02:palette.grey24,
text03:palette.grey32,
text04:palette.grey40,
text05:palette.grey48,
text06:palette.grey16,
textLink:palette.lightBlue700,
textLinkHover:palette.lightBlue700,
textPrimary:palette.lightBlue700,
textError:palette.red700,
background:palette.white,
background00:palette.white,
background01:palette.grey94,
background02:palette.grey96,
background03:palette.grey98,
background04:palette.grey98,
background05:palette.white,
backgroundPrimary:palette.grey96,
backgroundError:palette.red50,
element01:palette.grey40,
element10:palette.grey98,
element11:palette.grey80,
element12:palette.grey90,
element13:palette.grey72,
element14:palette.grey64,
element15:palette.grey98,
element16:palette.grey98,
elementPrimary:palette.lightBlueA700,
elementHalfPrimary:palette.lightBlueA700,
elementError:palette.red700,
elementSuccess:palette.green700,
elementWarning:palette.amber500,
elementAccent:palette.deepPurple500,
elementBorder:palette.transparent,
}
}
BIN
View File
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
#define APP_NAME "tailscale_vpn"
#define APP_ID 414812
+22
View File
@@ -0,0 +1,22 @@
{
"files": {
"main.css": "./static/css/main.944c9394.chunk.css",
"main.js": "./static/js/main.b598e911.chunk.js",
"main.js.map": "./static/js/main.b598e911.chunk.js.map",
"runtime-main.js": "./static/js/runtime-main.d0b686be.js",
"runtime-main.js.map": "./static/js/runtime-main.d0b686be.js.map",
"static/js/2.86909d39.chunk.js": "./static/js/2.86909d39.chunk.js",
"static/js/2.86909d39.chunk.js.map": "./static/js/2.86909d39.chunk.js.map",
"index.html": "./index.html",
"precache-manifest.ace2b614d412e58a983d7f27b21db37e.js": "./precache-manifest.ace2b614d412e58a983d7f27b21db37e.js",
"service-worker.js": "./service-worker.js",
"static/css/main.944c9394.chunk.css.map": "./static/css/main.944c9394.chunk.css.map",
"static/js/2.86909d39.chunk.js.LICENSE.txt": "./static/js/2.86909d39.chunk.js.LICENSE.txt"
},
"entrypoints": [
"static/js/runtime-main.d0b686be.js",
"static/js/2.86909d39.chunk.js",
"static/css/main.944c9394.chunk.css",
"static/js/main.b598e911.chunk.js"
]
}
@@ -0,0 +1,91 @@
import React from 'react';
import { Nav, Navbar, Form, FormControl } from 'react-bootstrap';
import styled from 'styled-components';
const Styles = styled.div`
.navbar {
background-color: white;
min-width:100px
}
a, .navbar-light {
height: 34px;
width: 100%;
color: black;
&:hover { color: white; }
}
.nav-link {
color: black;
&:hover { color: black; }
}
.navbar-brand {
padding-top: 12px
font-size: 1.4em;
color: black;
margin-left: 100px;
&:hover { color: black; }
}
.navbar-collapse {
position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
top:0px;
left: 85%
width:100%;
height:47px;
background-color: #FFCC33; /* Axis yeallow */
font-size: 1.4em;
color: black;
&:hover { color: white; }
}
.form-center {
position: absolute !important;
left: 25%;
right: 25%;
}
#conertext {
padding: 20px;
color:grey;
padding-top: 27px;
}
#line {
top:0px;
height: 6px;
background-color: #e6e6e6;
}
#conerimage {
top: 0px;
height: 62px;
}
#conerinfo{
position: fixed;
height:62px;
width:100%;
background-color: #FFCC33; /* Axis yeallow */
left: 85%;
font-size: 1.4em;
}
#logomage{
position: fixed;
top:5px;
font-size: 1.4em;
}
`;
export const NavigationBar = () => (
<Styles>
<Navbar >
<img id="logomage" src="./img/logo.svg" ></img>
<Navbar.Brand href="/">{window.acapName}</Navbar.Brand>
<Nav className="ml-auto" id="conerinfo">
<img id="conerimage" src="./img/topcorner62.png" alt="Axis" ></img>
<span id="conertext">{window.cornertext}{window.ver}</span>
</Nav>
</Navbar>
<hr id="line"></hr>
</Styles>
)
/*
<Form className="form-center">
<FormControl type="text" placeholder="Search" className="" />
</Form>
*/
+74
View File
@@ -0,0 +1,74 @@
import React from 'react';
import styled from 'styled-components';
import { Menu } from 'semantic-ui-react';
import { Link } from 'react-router-dom'
const StyledSideNav = styled.div`
/* position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
/* height: 100%;
/* width: 250px; /* Set the width of the sidebar */
/* z-index: 1; /* Stay on top of everything */
/* top: 54px; /* Stay at the top */
/* background-color: #e6e6e6; /* Axis grey */
/* overflow-x: hidden; /* Disable horizontal scroll */
/* padding-top: 10px;
/* padding-left: 10px; */
.menu {
position: fixed;
top: 50px;
height: 100%;
background-color: #e6e6e6;
border: 0px;
}
`;
class SidebarPage extends React.Component {
constructor(props) {
super(props);
this.state = {
activeItem: 'About',
}
}
// ** EDIT ** itens lists
render() {
const { activeItem } = this.state
return(
<StyledSideNav>
<Menu vertical>
<Menu.Item
name='home'
onClick={this.handleItemClick}
as={Link}
to="/"
/>
<Menu.Item
name='Hardware'
onClick={this.handleItemClick}
as={Link}
to="/About"
/>
<Menu.Item
name='Status'
onClick={this.handleItemClick}
as={Link}
to="/NoMatch"
/>
</Menu>
</StyledSideNav>
);
}
}
export default SidebarPage;
+587
View File
@@ -0,0 +1,587 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+6757
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+218
View File
@@ -0,0 +1,218 @@
body {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
font-size: 12px;
}
/*h1 {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #484848;
font-size: 18px;
font-weight: bold;
}*/
button {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #ffffff;
font-size: 12px;
background: grey;
padding: 5px 15px 5px 15px;
text-decoration: none;
text-shadow: none;
border: none;
cursor: pointer;
border-radius: 25px;
}
#tables{
display: flex;
padding-left: 0px;
}
.SLInput {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 250px;
float:initial;
}
.SLInput_res {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 72px;
float:initial;
}
.SLInput_dropres {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 100px;
float:initial;
}
.header {
height: 40px;
width: auto;
background-color: rgb(216,207,198);
margin: 0px;
border-bottom: 3px solid #ffcb31;
position: absolute;
left: 0px;
right: 0px;
top: 0px;
text-align: center;
padding: 0px;
margin: 0px;
}
.header .logo {
background-repeat: no-repeat;
width: 83px;
height: 30px;
left: 20px;
top: 5px;
position: absolute;
}
.header h1 {
position: absolute;
top: 10px;
}
.saving h1 {
color: grey;
font-size: 15px;
margin-top: 5px;
}
.settings-menu {
width: 100%;
background-color: #ffffff;
margin: 0px;
border-bottom: 3px solid rgb(0,157,220);
position: absolute;
left: 0px;
right: 0px;
top: 43px;
text-align: left;
padding: 0px;
margin: 0px;
z-index: 10;
}
.settings-menu {
overflow: visible;
}
.settings-item {
position: relative;
top: 0;
bottom: 0;
padding: 10px 40px 10px 10px;
margin: 10px;
#border-right: 1px solid rgb(0,157,220);
display: inline-block;
float: left;
overflow: visible;
max-width: 400px;
}
.settings-item h1 {
color: rgb(0,157,220);
font-size: 15px;
margin-top: 5px;
}
.settings-item span {
width: 100px;
display: inline-block;
}
#logo {
font-size:50px;
color:black;
top: 50px;
}
#ruleSpinner {
padding-top: 20px;
position: absolute;
left: 0px;
}
#main {
top: 50px;
position: relative;
color: grey;
font-size: 15px;
font-weight: bold;
}
#configpage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#homepage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#savebutton {
left:50px;
padding-top:20px;
}
li:hover{
background-color:#FFC106;
}
#licensepage {
padding-left:50px;
}
#licenseCode {
width:250px;
}
#savelayoutdiv {
position: absolute;
padding-left: 20px;
padding-right: 20px;
top: 60px;
left: 690px;
#background-color:grey;
#width:100px;
#border-radius:25px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+27
View File
@@ -0,0 +1,27 @@
<svg focusable="false" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 238 90" xml:space="preserve">
<g>
<path d="m98.87496 15.58887 11.51463 0 .13725.13751 0 50.03436-.13725.13713-11.51463 0c-.13713 0-.13713-.13713-.13713-.13713l0-50.03436c0 0 0-.13751.13713-.13751"/>
<path d="m95.03658 15.58887c0 0 .13725.13751 0 .27376l-15.21574 24.67537c-.13725.13675-.13725.41113 0 .68513l15.353 24.40038c.13675.13724 0 .27437 0 .27437l-14.25637 0c-.13713 0-.27438-.13713-.41113-.13713l-9.1845-15.07912c-.13725-.13725-.13725-.13725-.2745 0l-8.63576 14.94188c-.13662.13724-.27387.27437-.41112.27437l-13.29638 0c-.27438 0-.27438-.13713-.13725-.13713l15.627-25.90875c.27438-.27312.27438-.54811 0-.82187l-13.708-23.1675c-.13725-.13625 0-.27376 0-.27376l13.84525 0c.13713 0 .27388.13751.27388.27376l8.36187 13.9825c.13712.1375.13712.1375.27388 0l8.63625-13.9825c0-.13625.13725-.27376.27438-.27376l12.88525 0"/>
<path d="m193.45934 1.33263 41.39876 64.56525-35.91498 0-13.57002-21.11024-1.64502 0-.95998-1.50838-16.175 0 26.86624-41.94663" fill="#f7e109"/>
<path d="m190.85559 41.22313 15.90125 24.67474-50.58249 0 15.90126-24.67474 18.78 0" fill="#231f20"/>
<path d="m186.74309 41.22313 15.90126 24.67474-50.5825 0 15.90123-24.67474 18.78001 0" fill="#c93437"/>
<path d="m44.1802 15.5889-10.6924 0c-.1372 0-.2745.1375-.2745.2737l-32.2133 49.8981c0 0 0 .13721.13721.13721l13.02249 0c.1366 0 .2739 0 .2739-.13721l4.3867-6.8544c.1372 0 .1372-.1368.2744-.1368l13.708 0c.1367 0 .1367.1368.1367.1368l0 6.7172c0 .1372 0 .27441.1373.27441l11.2406 0 .1373-.13721 0-49.8981c0-.1362-.1373-.2737-.2744-.2737l0 0zm-11.2407 33.311c0 .1372 0 .1372 0 .1372l-8.4985 0c-.1373 0-.1373 0-.1373-.1372l9.0469-14.3935 0 0-.4111 14.3935"/>
<path d="m117.24371 65.89787 15.21562 0c1.91875-.13713 3.83875-.41162 5.62126-.95987 6.98999-2.19289 10.69124-9.18464 10.69124-15.07863 0-9.4585-7.40251-12.748-16.175-16.44925-1.50874-.68625-3.42751-1.645-3.42751-3.70125 0-2.05626 2.05626-3.15375 4.25002-3.15375l11.92624 0c.13626 0 .13626 0 .13626-.13626l0-10.83c0-.13625 0-.13625-.13626-.13625l-12.47499 0c-10.41749 0-16.58638 6.16876-16.58638 14.80376 0 7.53999 4.79788 11.24112 11.78889 14.11963 4.935 1.91887 8.08748 2.74161 8.08748 6.71724 0 2.05612-1.23375 4.11224-3.83876 4.11224 0 0-14.94099 0-15.07813 0l0 0c0 0 0 10.41801 0 10.55525 0 .13713.13712.13713 0 .13713"/>
<path d="m155.21434 15.31512c-2.33 0-4.1125 1.91875-4.1125 4.25 0 2.19374 1.7825 4.1125 4.1125 4.1125 2.33 0 4.25-1.91876 4.25-4.1125 0-2.33125-1.92-4.25-4.25-4.25zm0 7.95c-2.05626 0-3.70126-1.64374-3.70126-3.7 0-2.19376 1.645-3.83875 3.70126-3.83875 2.19374 0 3.83875 1.64499 3.83875 3.83875 0 2.05626-1.64499 3.7-3.83875 3.7"/>
<path d="m157.27058 21.89513-.95877-2.19376c.54752-.13625.82251-.685.82251-1.23375 0-.41125-.1375-.82249-.54875-1.09625-.27373-.27374-.68498-.27374-1.09624-.27374l-1.7825 0 0 4.7975.54875 0 0-2.05626 1.37 0 .96001 2.05626.685 0zm-3.01501-2.60501 0-1.78123 1.23375 0c.27376 0 .54875 0 .68501.27374.27374.13625.41124.27374.41124.685 0 .13751-.1375.41125-.27376.54875-.27374.27374-.54874.27374-.82249.27374l-1.23375 0"/>
<path d="m11.14359 84.5405c-1.37063.68501-2.46683.9595-3.97513.9595-3.9751 0-5.89405-2.46774-5.89405-4.93463 0-2.605 2.19336-5.07225 6.03125-5.07225 1.50781 0 2.74117.27388 3.70118.82275l0 2.19337c-1.09663-.54887-2.19336-.9595-3.42676-.9595-2.19335 0-3.70165 1.23337-3.70165 3.01563 0 1.6445 1.5083 2.87851 3.56445 2.87851 1.3706 0 2.19334-.27451 3.70071-.9595l0 2.05611"/>
<path d="m25.53759 85.5c-3.70162 0-5.75775-2.46774-5.75775-4.93463 0-2.46774 2.05612-5.07225 5.75775-5.07225 3.83788 0 5.75688 2.74174 5.75688 5.07225 0 2.46689-2.05613 4.93463-5.75688 4.93463zm0-7.95026c-1.91937 0-3.15325 1.23337-3.15325 3.01563 0 1.78175 1.23388 2.87851 3.15325 2.87851 1.919 0 3.15288-1.09676 3.15288-2.87851 0-1.78226-1.23388-3.01563-3.15288-3.01563"/>
<path d="m48.70409 75.63037 2.05612 0 0 9.73238-2.46775 0 0-6.03125-2.74163 3.01563-.274 0-2.74162-3.01563 0 6.03125-2.46738 0 0-9.73238 2.05625 0 3.29 3.70113 3.29-3.70113"/>
<path d="m69.26559 75.63037 2.19337 0 0 9.73238-2.46775 0 0-6.03125-2.74125 3.01563-.41163 0-2.74112-3.01563 0 6.03125-2.46788 0 0-9.73238 2.19337 0 3.29013 3.70113 3.15275-3.70113"/>
<path d="m90.65033 75.63037 0 5.62012c0 3.15276-2.33049 4.24951-5.07224 4.24951-2.87888 0-4.93501-1.23387-4.93501-4.24951l0-5.62012 2.46776 0 0 5.62012c0 1.371 1.09662 2.19339 2.46725 2.19339 1.37062 0 2.60449-.54839 2.60449-2.33063l0-5.48288 2.46774 0"/>
<path d="m109.97846 85.36275-2.05663 0-5.61964-6.1685 0 6.1685-2.46774 0 0-9.73238 2.33064 0 5.34612 6.03175 0-6.03175 2.46725 0 0 9.73238"/>
<path d="m119.57371 85.36275 2.46778 0 0-9.73241-2.46778 0 0 9.73241z"/>
<path d="m140.13684 84.5405c-1.37126.68501-2.46875.9595-3.97626.9595-3.83876 0-5.89499-2.46774-5.89499-4.93463 0-2.605 2.19374-5.07225 6.03249-5.07225 1.50751 0 2.74126.27388 3.70125.82275l0 2.19337c-1.09749-.54887-2.19374-.9595-3.42749-.9595-2.19376 0-3.70125 1.23337-3.70125 3.01563 0 1.6445 1.50749 2.87851 3.56375 2.87851 1.37125 0 2.19374-.27451 3.7025-.9595l0 2.05611"/>
<path d="m158.09435 85.36275-2.60501 0-.82248-1.91887-4.52376 0-.82248 1.91887-2.60501 0 3.97623-9.73238 3.015 0 4.38751 9.73238zm-5.89499-7.40237-1.37126 3.83838 3.01625 0-1.64499-3.83838"/>
<path d="m172.76184 77.41263-3.56502 0 0 7.95012-2.60373 0 0-7.95012-3.56502 0 0-1.78226 9.73375 0 0 1.78226"/>
<path d="m180.4381 85.36275 2.4673 0 0-9.73241-2.4673 0 0 9.73241z"/>
<path d="m196.33934 85.5c-3.70125 0-5.75751-2.46774-5.75751-4.93463 0-2.46774 1.91875-5.07225 5.75751-5.07225 3.70125 0 5.75624 2.74174 5.75624 5.07225 0 2.46689-2.1925 4.93463-5.75624 4.93463zm0-7.95026c-1.92 0-3.15375 1.23337-3.15375 3.01563 0 1.78175 1.23375 2.87851 3.15375 2.87851 1.91875 0 3.1525-1.09676 3.1525-2.87851 0-1.78226-1.23375-3.01563-3.1525-3.01563"/>
<path d="m219.64183 85.36275-2.05623 0-5.62001-6.1685 0 6.1685-2.4675 0 0-9.73238 2.33 0 5.34624 6.03175 0-6.03175 2.4675 0 0 9.73238"/>
<path d="m234.30934 78.23486c-1.50751-.68512-2.33-.9595-3.28876-.9595-.82376 0-1.37123.41113-1.37123.82225 0 1.50824 5.07123 1.09662 5.07123 4.52386 0 1.78175-1.64499 2.87851-3.83748 2.87851-1.78252 0-2.60501-.41113-3.70128-.9595l0-2.05612c1.50752.9595 2.33002 1.23387 3.42751 1.23387.95876 0 1.50752-.27437 1.50752-.82275 0-1.645-5.07253-1.09674-5.07253-4.52351 0-1.78212 1.50876-2.87888 3.83878-2.87888 1.09624 0 2.05623.27388 3.42624.82275l0 1.91899"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

+40
View File
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- BUG: Firefox will not animate SVG embedded as background images. [https://bugzilla.mozilla.org/show_bug.cgi?id=908634] -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 234.7 235.6" enable-background="new 0 0 234.7 235.6" xml:space="preserve">
<style>
/* <![CDATA[ */
@-webkit-keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
@keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
g.spinner path {opacity: 0; -webkit-animation: spinner-fade 0.75s linear infinite; animation: spinner-fade 0.75s linear infinite;}
g.spinner path:nth-of-type(1) {-webkit-animation-delay: -0.25s; animation-delay: -0.25s; }
g.spinner path:nth-of-type(2) {-webkit-animation-delay: -0.1875s; animation-delay: -0.1875s; }
g.spinner path:nth-of-type(3) {-webkit-animation-delay: -0.125s; animation-delay: -0.125s; }
g.spinner path:nth-of-type(4) {-webkit-animation-delay: -0.0625s; animation-delay: -0.0625s; }
g.spinner path:nth-of-type(5) {-webkit-animation-delay: 0s; animation-delay: 0s; }
g.spinner path:nth-of-type(6) {-webkit-animation-delay: 0.0625s; animation-delay: 0.0625s; }
g.spinner path:nth-of-type(7) {-webkit-animation-delay: 0.125s; animation-delay: 0.125s; }
g.spinner path:nth-of-type(8) {-webkit-animation-delay: 0.1875s; animation-delay: 0.1875s; }
g.spinner path:nth-of-type(9) {-webkit-animation-delay: 0.25s; animation-delay: 0.25s; }
g.spinner path:nth-of-type(10) {-webkit-animation-delay: 0.3125s; animation-delay: 0.3125s; }
g.spinner path:nth-of-type(11) {-webkit-animation-delay: -0.375s; animation-delay: -0.375s; }
g.spinner path:nth-of-type(12) {-webkit-animation-delay: -0.3125s; animation-delay: -0.3125s; }
/* ]]> */
</style>
<g class="spinner">
<path d="M128.3,10.7c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0v42.7v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V10.7L128.3,10.7L128.3,10.7z" />
<path d="M140.3,56.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.4-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.5,3.9-14.6,3.9l0,0l0.2,0L140.3,56.5L140.3,56.5L140.3,56.5z" />
<path d="M167.4,76.3c0,0-9.2,5.1-3.9,14.3c5.3,9.2,14.6,3.7,14.6,3.7l0,0h0L215,73.1l0,0.1l0,0c0,0,9.2-5.3,3.9-14.5 s-14.6-3.9-14.6-3.9l0,0l0,0.1L167.4,76.3L167.4,76.3L167.4,76.3z" />
<path d="M224,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0h-42.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H224L224,128.3L224,128.3z" />
<path d="M203.8,180.3c0,0,9.2,5.6,14.6-3.6c5.4-9.2-3.8-14.4-3.8-14.4l0,0h0l-36.8-21.7l0,0l0,0 c0,0-9.2-5.4-14.6,3.8c-5.4,9.2,3.8,14.6,3.8,14.6l0,0l0-0.2L203.8,180.3L203.8,180.3L203.8,180.3z" />
<path d="M160.3,215.5c0,0,5.4,9.3,14.7,4.1c9.3-5.2,4.3-14.5,4.3-14.5l0,0v0l-21.1-37.2l-0.1,0l0,0 c0,0-5.3-9.3-14.6-4.1c-9.3,5.2-4.1,14.5-4.1,14.5l0,0l0,0L160.3,215.5L160.3,215.5L160.3,215.5z"/>
<path d="M128.3,181.3c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0V224v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V181.3L128.3,181.3L128.3,181.3z"/>
<path d="M55.3,204.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.3-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.6,3.9-14.6,3.9l0,0l0.2,0L55.3,204.5L55.3,204.5L55.3,204.5z"/>
<path d="M19.6,161.3c0,0-9.2,5.6-3.9,14.8s14.6,4.2,14.6,4.2l0,0h0l36.9-21.5l0-0.1l0,0c0,0,9.2-5.4,3.9-14.6 c-5.3-9.2-14.6-3.9-14.6-3.9l0,0l0-0.1L19.6,161.3L19.6,161.3L19.6,161.3z"/>
<path d="M53.3,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0H10.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H53.3L53.3,128.3L53.3,128.3z"/>
<path d="M56.8,94.3c0,0,9.2,5.1,14.6-4.1c5.4-9.2-3.8-14.9-3.8-14.9l0,0h0L30.8,53.8l0,0.1l0,0c0,0-9.2-5.4-14.6,3.8 S20,72.4,20,72.4l0,0l0,0.2L56.8,94.3L56.8,94.3L56.8,94.3z"/>
<path d="M76.3,66.8c0,0,5.4,9.3,14.7,4.1s4.3-14.5,4.3-14.5l0,0v0l-21-37.2l0,0l0,0c0,0-5.3-9.3-14.5-4.1 s-4.1,14.5-4.1,14.5l0,0l-0.2,0L76.3,66.8L76.3,66.8L76.3,66.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

+91
View File
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="20.64mm" height="9mm" viewBox="0 0 2064 900" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="2064" height="900"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="2" y="0" width="2060" height="899"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="Graphic">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="2064" height="900"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 958,198 L 959,199 959,627 958,628 859,628 C 858,628 858,627 858,627 L 858,199 C 858,199 858,198 859,198 L 958,198 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 826,200 L 696,411 C 695,412 695,415 696,417 L 828,626 C 829,627 828,628 828,628 L 706,628 C 704,628 703,627 702,627 L 624,498 C 622,497 622,497 621,498 L 547,626 C 546,627 545,628 544,628 L 430,628 C 428,628 428,627 429,627 L 563,405 C 565,403 565,401 563,398 L 445,200 C 444,199 445,198 445,198 L 564,198 C 565,198 566,199 566,200 L 638,320 C 639,321 639,321 640,320 L 714,200 C 714,199 715,198 716,198 L 826,198 C 826,198 828,199 826,200 Z"/>
<path fill="rgb(247,225,9)" stroke="none" d="M 2023,628 L 1716,628 1599,448 1585,448 1577,435 1439,435 1669,76 2023,628 Z"/>
<path fill="rgb(35,31,32)" stroke="none" d="M 1782,628 L 1350,628 1486,417 1646,417 1782,628 Z"/>
<path fill="rgb(201,52,55)" stroke="none" d="M 1747,628 L 1314,628 1450,417 1611,417 1747,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 300,198 C 299,198 297,199 297,200 L 22,627 C 22,627 22,628 23,628 L 134,628 C 136,628 137,628 137,627 L 174,568 C 175,568 175,567 177,567 L 294,567 C 295,567 295,568 295,568 L 295,626 C 295,627 295,628 296,628 L 392,628 394,627 394,200 C 394,199 392,198 391,198 L 300,198 Z M 295,484 L 222,484 C 221,484 221,484 221,483 L 299,360 295,483 295,484 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1016,628 L 1147,628 C 1163,627 1180,625 1195,620 1255,601 1286,541 1286,491 1286,410 1223,382 1148,350 1135,344 1119,336 1119,319 1119,301 1136,292 1155,292 L 1257,292 C 1258,292 1258,292 1258,291 L 1258,198 C 1258,197 1258,197 1257,197 L 1150,197 C 1061,197 1008,250 1008,323 1008,388 1049,420 1109,444 1151,461 1178,468 1178,502 1178,519 1168,537 1145,537 1145,537 1018,537 1016,537 L 1016,537 C 1016,537 1016,626 1016,627 1016,628 1018,628 1016,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1341,196 C 1321,196 1306,212 1306,232 1306,251 1321,267 1341,267 1361,267 1378,251 1378,232 1378,212 1361,196 1341,196 Z M 1310,232 C 1310,213 1324,199 1341,199 1360,199 1374,213 1374,232 1374,250 1360,264 1341,264 1324,264 1310,250 1310,232 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1351,233 C 1355,232 1358,227 1358,223 1358,219 1357,215 1353,213 1351,211 1347,211 1344,211 L 1328,211 1328,252 1333,252 1333,234 1345,234 1353,252 1359,252 1351,233 Z M 1333,214 L 1344,214 C 1346,214 1348,214 1350,217 1352,218 1353,219 1353,223 1353,224 1352,226 1351,227 1348,230 1346,230 1344,230 L 1333,230 1333,214 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 109,788 C 97,794 87,796 75,796 41,796 24,775 24,754 24,731 43,710 76,710 89,710 99,713 107,717 L 107,736 C 98,731 89,728 78,728 59,728 46,738 46,754 46,768 59,778 77,778 89,778 96,776 109,770 L 109,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 232,796 C 200,796 182,775 182,754 182,733 200,710 232,710 265,710 281,734 281,754 281,775 263,796 232,796 Z M 205,754 C 205,769 215,778 232,778 248,778 259,769 259,754 259,738 248,728 232,728 215,728 205,738 205,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 430,712 L 448,712 448,795 426,795 426,743 403,769 401,769 377,743 377,795 356,795 356,712 374,712 402,743 430,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 606,712 L 625,712 625,795 604,795 604,743 580,769 577,769 553,743 553,795 532,795 532,712 551,712 579,743 606,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 789,712 L 789,760 C 789,787 769,796 746,796 721,796 703,785 703,760 L 703,712 724,712 724,760 C 724,771 734,778 746,778 757,778 768,774 768,758 L 768,712 789,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 937,795 L 889,742 889,795 868,795 868,712 887,712 933,763 933,712 954,712 954,795 937,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1036,795 L 1058,795 1058,712 1036,712 1036,795 1036,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1212,788 C 1201,794 1191,796 1178,796 1145,796 1128,775 1128,754 1128,731 1147,710 1180,710 1192,710 1203,713 1211,717 L 1211,736 C 1202,731 1192,728 1182,728 1163,728 1150,738 1150,754 1150,768 1163,778 1181,778 1192,778 1199,776 1212,770 L 1212,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1344,795 L 1337,778 1298,778 1291,795 1269,795 1303,712 1328,712 1366,795 1344,795 Z M 1304,764 L 1330,764 1316,731 1304,764 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1461,727 L 1461,795 1439,795 1439,727 1408,727 1408,712 1492,712 1492,727 1461,727 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1557,795 L 1578,795 1578,712 1557,712 1557,795 1557,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1693,796 C 1662,796 1644,775 1644,754 1644,733 1660,710 1693,710 1725,710 1743,734 1743,754 1743,775 1724,796 1693,796 Z M 1666,754 C 1666,769 1677,778 1693,778 1710,778 1720,769 1720,754 1720,738 1710,728 1693,728 1677,728 1666,738 1666,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1875,795 L 1827,742 1827,795 1806,795 1806,712 1826,712 1872,763 1872,712 1893,712 1893,795 1875,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 2018,734 C 2005,728 1998,726 1990,726 1983,726 1978,729 1978,733 1978,746 2022,742 2022,771 2022,787 2008,796 1989,796 1974,796 1967,792 1957,788 L 1957,770 C 1970,778 1977,781 1987,781 1995,781 1999,778 1999,774 1999,760 1956,764 1956,735 1956,720 1969,710 1989,710 1998,710 2006,713 2018,717 L 2018,734 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

+1
View File
@@ -0,0 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="manifest" href="./manifest.json"/><title>Tailscale VPN</title><link href="./static/css/main.944c9394.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,l,i=r[0],f=r[1],a=r[2],p=0,s=[];p<i.length;p++)l=i[p],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(c&&c(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var f=t[i];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="./";var i=this.webpackJsonplicense=this.webpackJsonplicense||[],f=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var c=f;t()}([])</script><script src="./static/js/2.86909d39.chunk.js"></script><script src="./static/js/main.b598e911.chunk.js"></script></body></html>
+19
View File
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<body>
<head>
<h1 style="color:red;">Scroll to the bottom to find authentication URL</h1>
<script>
function refreshIFrame() {
var x = document.getElementById("*Your_iframe_id*");
x.contentWindow.location.reload();
var t = setTimeout(refreshIFrame, 5000);
}
</script>
</head>
<body onload="refreshIFrame()">
<iframe id="*Your_iframe_id*" src= "/axis-cgi/admin/systemlog.cgi?appname=tailscale_vpn" style="height:600px;width:100%;border: none;" ></iframe>
</body>
</body>
</html>
+25
View File
@@ -0,0 +1,25 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
@@ -0,0 +1,26 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "af595f4d032e1ec4fdca38aa7b1c3fb1",
"url": "./index.html"
},
{
"revision": "7632d2c4eb6e7a0086de",
"url": "./static/css/main.944c9394.chunk.css"
},
{
"revision": "5c8268746528091e3ae3",
"url": "./static/js/2.86909d39.chunk.js"
},
{
"revision": "60f6bf9e100e456690e9ab6c9a37bfc2",
"url": "./static/js/2.86909d39.chunk.js.LICENSE.txt"
},
{
"revision": "7632d2c4eb6e7a0086de",
"url": "./static/js/main.b598e911.chunk.js"
},
{
"revision": "fe08778d3137238796b4",
"url": "./static/js/runtime-main.d0b686be.js"
}
]);
+3
View File
@@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

Some files were not shown because too many files have changed in this diff Show More