Compare commits
86 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8cf7f0717 | ||
|
|
29a6b78f27 | ||
|
|
388370b49d | ||
|
|
4d67c25e5a | ||
|
|
eec0dcca82 | ||
|
|
7ea74d0fe3 | ||
|
|
0c635534a1 | ||
|
|
f70a3a4207 | ||
|
|
0fc174b5b3 | ||
|
|
d4eddf042d | ||
|
|
a4210c7e6b | ||
|
|
106438d61d | ||
|
|
94365d2cc9 | ||
|
|
b633c43078 | ||
|
|
84c3f1d786 | ||
|
|
1c963e9aff | ||
|
|
a2fe7f79cc | ||
|
|
8dabdb3f11 | ||
|
|
b9f2957104 | ||
|
|
bdeda87600 | ||
|
|
e98a538f53 | ||
|
|
2e0cb923db | ||
|
|
2e532abf6b | ||
|
|
51e865c98d | ||
|
|
2c27248aa1 | ||
|
|
43c2084e15 | ||
|
|
14cb0f46f3 | ||
|
|
162d507468 | ||
|
|
8624851cf5 | ||
|
|
2d92e93b7b | ||
|
|
78f9018083 | ||
|
|
ecb8a01aaa | ||
|
|
cca2c99f6b | ||
|
|
028d0dd7d8 | ||
|
|
7753e0481c | ||
|
|
5b35e68cf2 | ||
|
|
8b4115fe48 | ||
|
|
8bc1c3e0ed | ||
|
|
69061ed537 | ||
|
|
f151b1268d | ||
|
|
35d9c0e548 | ||
|
|
7baae289d1 | ||
|
|
a33c50361f | ||
|
|
ecc4920b04 | ||
|
|
1f3e28fe83 | ||
|
|
a9132d7b46 | ||
|
|
f54929c6cb | ||
|
|
1a181d08b9 | ||
|
|
94b32f0f73 | ||
|
|
ab98382984 | ||
|
|
5498035ca9 | ||
|
|
a1444659ea | ||
|
|
b9d65ea0e2 | ||
|
|
aac35294b5 | ||
|
|
fef33d652d | ||
|
|
8ef6f420e4 | ||
|
|
7675ebc7d3 | ||
|
|
90e4b36106 | ||
|
|
e7ac2321f2 | ||
|
|
e0d8ade2d0 | ||
|
|
f5546b6a49 | ||
|
|
3c13f82d61 | ||
|
|
121b5cdf32 | ||
|
|
593c03b035 | ||
|
|
3a4e3fa22a | ||
|
|
098b87d09e | ||
|
|
8783b89f21 | ||
|
|
a29d0a6cf6 | ||
|
|
4d0d62a00b | ||
|
|
d951e26fa8 | ||
|
|
52e2c2ccd2 | ||
|
|
87cb5a5c24 | ||
|
|
59967dd1f0 | ||
|
|
46e57af6dd | ||
|
|
9ec69d895c | ||
|
|
c20b239351 | ||
|
|
09d9491354 | ||
|
|
68bc03d6a5 | ||
|
|
95e6b1a59c | ||
|
|
b2fb0b2130 | ||
|
|
b5e90f63a3 | ||
|
|
566a5904a6 | ||
|
|
7678a1a88b | ||
|
|
8490540384 | ||
|
|
2aabae6faa | ||
|
|
d9c841842e |
0
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file → Executable file
0
.github/ISSUE_TEMPLATE/i-have-an-issue.md
vendored
Normal file → Executable file
114
.github/workflows/docker.yml
vendored
@@ -1,114 +0,0 @@
|
|||||||
---
|
|
||||||
name: docker
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- '**'
|
|
||||||
tags:
|
|
||||||
- '*.*.*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
docker:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: contains(github.event.head_commit.message, 'PUSHPROD')
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v2
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- name: Set up dynamic build ARGs
|
|
||||||
id: getargs
|
|
||||||
run: echo "version=$(cat ./stable/VERSION)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Docker meta
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
# list of Docker images to use as base name for tags
|
|
||||||
images: |
|
|
||||||
jokobsk/pi.alert
|
|
||||||
# generate Docker tags based on the following events/attributes
|
|
||||||
tags: |
|
|
||||||
type=raw,value=latest
|
|
||||||
type=schedule
|
|
||||||
type=ref,event=branch
|
|
||||||
type=ref,event=pr
|
|
||||||
type=semver,pattern={{version}}
|
|
||||||
type=semver,pattern={{major}}.{{minor}}
|
|
||||||
type=semver,pattern={{major}}
|
|
||||||
type=sha
|
|
||||||
|
|
||||||
- name: Login to DockerHub
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
docker_dev:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: contains(github.event.head_commit.message, 'PUSHPROD') != 'True'
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v2
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- name: Set up dynamic build ARGs
|
|
||||||
id: getargs
|
|
||||||
run: echo "version=$(cat ./stable/VERSION)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Docker meta
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
# list of Docker images to use as base name for tags
|
|
||||||
images: |
|
|
||||||
jokobsk/pi.alert_dev
|
|
||||||
# generate Docker tags based on the following events/attributes
|
|
||||||
tags: |
|
|
||||||
type=raw,value=latest
|
|
||||||
type=schedule
|
|
||||||
type=ref,event=branch
|
|
||||||
type=ref,event=pr
|
|
||||||
type=semver,pattern={{version}}
|
|
||||||
type=semver,pattern={{major}}.{{minor}}
|
|
||||||
type=semver,pattern={{major}}
|
|
||||||
type=sha
|
|
||||||
|
|
||||||
- name: Login to DockerHub
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
64
.github/workflows/docker_dev.yml
vendored
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
name: docker
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
tags:
|
||||||
|
- '*.*.*'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker_dev:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: contains(github.event.head_commit.message, 'PUSHPROD') != 'True'
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Set up dynamic build ARGs
|
||||||
|
id: getargs
|
||||||
|
run: echo "version=$(cat ./stable/VERSION)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
# list of Docker images to use as base name for tags
|
||||||
|
images: |
|
||||||
|
jokobsk/pi.alert_dev
|
||||||
|
# generate Docker tags based on the following events/attributes
|
||||||
|
tags: |
|
||||||
|
type=raw,value=latest
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
64
.github/workflows/docker_prod.yml
vendored
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
# This workflow uses actions that are not certified by GitHub.
|
||||||
|
# They are provided by a third-party and are governed by
|
||||||
|
# separate terms of service, privacy policy, and support
|
||||||
|
# documentation.
|
||||||
|
|
||||||
|
# GitHub recommends pinning actions to a commit SHA.
|
||||||
|
# To get a newer version, you will need to update the SHA.
|
||||||
|
# You can also reference a tag or branch, but the action may change without warning.
|
||||||
|
|
||||||
|
name: Publish Docker image
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Set up dynamic build ARGs
|
||||||
|
id: getargs
|
||||||
|
run: echo "version=$(cat ./stable/VERSION)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
# list of Docker images to use as base name for tags
|
||||||
|
images: |
|
||||||
|
jokobsk/pi.alert
|
||||||
|
# generate Docker tags based on the following events/attributes
|
||||||
|
tags: |
|
||||||
|
type=raw,value=latest
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
4
.gitignore
vendored
@@ -1,4 +1,8 @@
|
|||||||
|
.vscode
|
||||||
.DS_Store
|
.DS_Store
|
||||||
config/pialert.conf
|
config/pialert.conf
|
||||||
db/*
|
db/*
|
||||||
front/log/*
|
front/log/*
|
||||||
|
front/api/*
|
||||||
|
**/%40eaDir/
|
||||||
|
**/@eaDir/
|
||||||
|
|||||||
0
CONTRIBUTING
Normal file → Executable file
@@ -8,8 +8,7 @@ ENV USER=pi USER_ID=1000 USER_GID=1000 TZ=Europe/London PORT=20211
|
|||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install --no-install-recommends tini ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo nginx-light php php-cgi php-fpm php-sqlite3 php-curl sqlite3 dnsutils net-tools python3 iproute2 nmap python3-pip zip -y \
|
&& apt-get install --no-install-recommends tini ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo nginx-light php php-cgi php-fpm php-sqlite3 php-curl sqlite3 dnsutils net-tools python3 iproute2 nmap python3-pip zip -y \
|
||||||
&& pip3 install requests paho-mqtt scapy cron-converter pytz \
|
&& pip3 install requests paho-mqtt scapy cron-converter pytz json2table \
|
||||||
# && pip3 install requests paho-mqtt ssdpy upnpclient \
|
|
||||||
&& update-alternatives --install /usr/bin/python python /usr/bin/python3 10 \
|
&& update-alternatives --install /usr/bin/python python /usr/bin/python3 10 \
|
||||||
&& apt-get clean autoclean \
|
&& apt-get clean autoclean \
|
||||||
&& apt-get autoremove \
|
&& apt-get autoremove \
|
||||||
@@ -40,7 +39,9 @@ RUN rm /etc/nginx/sites-available/default \
|
|||||||
# Create a backup of the pialert.conf to be used if the user didn't supply a configuration file
|
# Create a backup of the pialert.conf to be used if the user didn't supply a configuration file
|
||||||
&& cp /home/pi/pialert/config/pialert.conf /home/pi/pialert/back/pialert.conf_bak \
|
&& cp /home/pi/pialert/config/pialert.conf /home/pi/pialert/back/pialert.conf_bak \
|
||||||
# Create a backup of the pialert.db to be used if the user didn't supply a database
|
# Create a backup of the pialert.db to be used if the user didn't supply a database
|
||||||
&& cp /home/pi/pialert/db/pialert.db /home/pi/pialert/back/pialert.db_bak
|
&& cp /home/pi/pialert/db/pialert.db /home/pi/pialert/back/pialert.db_bak \
|
||||||
|
# Create a buildtimestamp.txt to later check if a new version was released
|
||||||
|
&& date +%s > /home/pi/pialert/front/buildtimestamp.txt
|
||||||
|
|
||||||
ENTRYPOINT ["tini", "--"]
|
ENTRYPOINT ["tini", "--"]
|
||||||
|
|
||||||
|
|||||||
0
FUNDING.yml
Normal file → Executable file
@@ -9,13 +9,13 @@ Scans for devices connected to your WIFI / LAN and alerts you if new and unknown
|
|||||||
|
|
||||||
|
|
||||||
# 🐳 Docker image
|
# 🐳 Docker image
|
||||||
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker.yml)
|
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker_prod.yml)
|
||||||
[](https://github.com/jokob-sk/Pi.Alert)
|
[](https://github.com/jokob-sk/Pi.Alert)
|
||||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||||
|
|
||||||
🐳 [Docker hub](https://registry.hub.docker.com/r/jokobsk/pi.alert) | 📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) | 📚 [Docker instructions](https://github.com/jokob-sk/Pi.Alert/blob/main//dockerfiles/README.md) | 🆕 [Release notes](https://github.com/jokob-sk/Pi.Alert/issues/138)
|
🐳 [Docker hub](https://registry.hub.docker.com/r/jokobsk/pi.alert) | 📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) | 📚 [Docker instructions](https://github.com/jokob-sk/Pi.Alert/blob/main//dockerfiles/README.md) | 🆕 [Release notes](https://github.com/jokob-sk/Pi.Alert/releases)
|
||||||
|
|
||||||
## 🔍 Scan Methods
|
## 🔍 Scan Methods
|
||||||
The system continuously scans the network for, **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Scanning methods are:
|
The system continuously scans the network for, **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Scanning methods are:
|
||||||
@@ -31,11 +31,12 @@ The system continuously scans the network for, **New devices**, **New connection
|
|||||||
that were not discovered by the other methods.
|
that were not discovered by the other methods.
|
||||||
|
|
||||||
|
|
||||||
## 🧩 Notification Integrations
|
## 🧩 Integrations
|
||||||
- [Apprise](https://hub.docker.com/r/caronc/apprise), [Pushsafer](https://www.pushsafer.com/), [NTFY](https://ntfy.sh/)
|
- [Apprise](https://hub.docker.com/r/caronc/apprise), [Pushsafer](https://www.pushsafer.com/), [NTFY](https://ntfy.sh/)
|
||||||
- Webhooks ([sample JSON](docs/webhook_json_sample.json))
|
- [Webhooks](https://github.com/jokob-sk/Pi.Alert/blob/main/docs/WEBHOOK_N8N.md) ([sample JSON](docs/webhook_json_sample.json))
|
||||||
- Home Assistant via [MQTT](https://www.home-assistant.io/integrations/mqtt/)
|
- Home Assistant via [MQTT](https://www.home-assistant.io/integrations/mqtt/)
|
||||||
- discovery ~10s per device, deleting not supported, use [MQTT Explorer](https://mqtt-explorer.com/) for now
|
- discovery ~10s per device, deleting not supported, use [MQTT Explorer](https://mqtt-explorer.com/) for now
|
||||||
|
- A simple [API endpoint](https://github.com/jokob-sk/Pi.Alert/blob/main/docs/API.md)
|
||||||
|
|
||||||
|
|
||||||
## 🔐 Security
|
## 🔐 Security
|
||||||
|
|||||||
1581
back/pialert.py
173
back/report_sample.html
Executable file
@@ -0,0 +1,173 @@
|
|||||||
|
<!-- ---------------------------------------------------------------------------
|
||||||
|
# Pi.Alert
|
||||||
|
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||||
|
#
|
||||||
|
# repot_template.html - Back module. Template to email reporting in HTML format
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||||
|
#--------------------------------------------------------------------------- -->
|
||||||
|
<html>
|
||||||
|
<head></head>
|
||||||
|
<body>
|
||||||
|
<font face=sans-serif>
|
||||||
|
<table align=center width=100% cellpadding=0 cellspacing=0 style="border-radius: 5px;">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 30px; font-weight: bold; color:#000000; border-top-right-radius: 5px; border-top-left-radius: 5px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||||
|
Pi.Alert Report
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td bgcolor=#2656f1 width=100% align=center style="padding: 20px 10px 10px 10px; font-size: 20px; font-weight: bold; color:#ffffff; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||||
|
<a style="color:#ffffff;cursor:pointer;" href="https://github.com/jokob-sk/Pi.Alert/releases">🆕 New version available 🆕</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 15px; text-align:center; color:#404040">
|
||||||
|
<tr>
|
||||||
|
<td width=100%> Report Date: <b>2023-01-30 22:17</b> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th width='120px' style='color:blue; font-size: 12px;' bgcolor='#909090' >New devices</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Datetime</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >IP</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Event Type</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Device name</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Comments</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||||
|
<td>2023-01-30 22:15:09</td>
|
||||||
|
<td>192.168.1.1</td>
|
||||||
|
<td>New Device</td>
|
||||||
|
<td>(name not found)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||||
|
<td>2023-01-30 22:17:59</td>
|
||||||
|
<td>192.168.1.82</td>
|
||||||
|
<td>New Device</td>
|
||||||
|
<td>(name not found)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th width='120px' style='color:blue; font-size: 12px;' bgcolor='#909090' >Events</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Datetime</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >IP</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Event Type</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Device name</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Comments</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||||
|
<td>2023-01-30 22:15:09</td>
|
||||||
|
<td>192.168.1.92</td>
|
||||||
|
<td>Disconnected</td>
|
||||||
|
<td>(name not found)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th width='120px' style='color:blue; font-size: 12px;' bgcolor='#909090' >Changed or new ports</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th>new</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Name</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Port</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >State</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Service</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Extra</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>New device</td>
|
||||||
|
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||||
|
<td>3263/tcp</td>
|
||||||
|
<td>open</td>
|
||||||
|
<td>ecolor-imager</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||||
|
<tr>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Name</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Port</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >State</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Service</th>
|
||||||
|
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Extra</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>New device</td>
|
||||||
|
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||||
|
<td>3264/tcp</td>
|
||||||
|
<td>open</td>
|
||||||
|
<td>ccmail</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table width=100% bgcolor=#46802e cellpadding=5px cellspacing=0 style="font-size: 13px; font-weight: bold; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px;">
|
||||||
|
<tr>
|
||||||
|
<td width=50% style="text-align:center"> Pi.Alert - Synology-NAS</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</font>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
50
back/report_sample.txt
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
Report Date: 2021-12-08 12:30
|
||||||
|
Server: Synology-NAS
|
||||||
|
|
||||||
|
New Devices
|
||||||
|
----------------------
|
||||||
|
Name: (name not found)
|
||||||
|
MAC: 2c:2c:2c:2c:2c:2c
|
||||||
|
IP: 192.168.1.121
|
||||||
|
Time: 2021-12-08 12:30
|
||||||
|
More Info: Micro-Star INTL CO., LTD.
|
||||||
|
|
||||||
|
Name: (name not found)
|
||||||
|
MAC: 2c:2c:2c:2c:2c:2c
|
||||||
|
IP: 192.168.1.151
|
||||||
|
Time: 2021-12-08 12:30
|
||||||
|
More Info: Espressif Inc.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Events
|
||||||
|
----------------------
|
||||||
|
Name: Samsung
|
||||||
|
MAC: 2c:2c:2c:2c:2c:2c
|
||||||
|
IP: 192.168.1.27
|
||||||
|
Time: 2021-12-08 12:30
|
||||||
|
Event: Connected
|
||||||
|
More Info:
|
||||||
|
|
||||||
|
Name: (name not found)
|
||||||
|
MAC: 2c:2c:2c:2c:2c:2c
|
||||||
|
IP: 192.168.1.6
|
||||||
|
Time: 2021-12-08 12:30
|
||||||
|
Event: Disconnected
|
||||||
|
More Info:
|
||||||
|
|
||||||
|
Name: Google-Home-Mini
|
||||||
|
MAC: 2c:2c:2c:2c:2c:2c
|
||||||
|
IP: 192.168.1.16
|
||||||
|
Time: 2021-12-08 12:30
|
||||||
|
Event: Disconnected
|
||||||
|
More Info:
|
||||||
|
|
||||||
|
Name: (name not found)
|
||||||
|
MAC: 2c:2c:2c:2c:2c:2c
|
||||||
|
IP: 192.168.1.119
|
||||||
|
Time: 2021-12-08 12:30
|
||||||
|
Event: Disconnected
|
||||||
|
More Info:
|
||||||
|
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
Pi.Alert Report
|
Pi.Alert Report
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 15px; text-align:center; color:#404040"> <tr>
|
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 15px; text-align:center; color:#404040"> <tr>
|
||||||
@@ -32,74 +32,16 @@
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
||||||
<SECTION_INTERNET>
|
|
||||||
<p style="font-size: 24px; font-weight: bold; color:#C04040"> Internet: </p>
|
<INTERNET_TABLE>
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070">
|
<NEW_DEVICES_TABLE>
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=140> Event Type </th>
|
<DOWN_DEVICES_TABLE>
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
<EVENTS_TABLE>
|
||||||
<th> Additional Info </th>
|
|
||||||
</tr>
|
<PORTS_TABLE>
|
||||||
|
|
||||||
<TABLE_INTERNET>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
</SECTION_INTERNET>
|
|
||||||
|
|
||||||
<SECTION_NEW_DEVICES>
|
|
||||||
<p style="font-size: 14px; font-weight: bold; color:#C04040"> New Devices: </p>
|
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070">
|
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=150> MAC </th>
|
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
|
||||||
<th width=140> Device Name </th>
|
|
||||||
<th> Vendor </th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<TABLE_NEW_DEVICES>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
</SECTION_NEW_DEVICES>
|
|
||||||
|
|
||||||
<SECTION_DEVICES_DOWN>
|
|
||||||
<p style="font-size: 14px; font-weight: bold; color:#C04040"> Devices Down: </p>
|
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070">
|
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=140> MAC </th>
|
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
|
||||||
<th> Device Name </th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<TABLE_DEVICES_DOWN>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
</SECTION_DEVICES_DOWN>
|
|
||||||
|
|
||||||
<SECTION_EVENTS>
|
|
||||||
<p style="font-size: 14px; font-weight: bold; color:#409040"> Events: </p>
|
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070">
|
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=140> MAC </th>
|
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
|
||||||
<th width=100> Event Type </th>
|
|
||||||
<th width=140> Device Name </th>
|
|
||||||
<th> Additional Info </th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<TABLE_EVENTS>
|
|
||||||
</table>
|
|
||||||
</SECTION_EVENTS>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,8 @@
|
|||||||
Report Date: <REPORT_DATE>
|
Report Date: <REPORT_DATE>
|
||||||
Server: <SERVER_NAME>
|
Server: <SERVER_NAME>
|
||||||
|
|
||||||
<SECTION_NEW_DEVICES>
|
<SECTION_NEW_DEVICES>
|
||||||
New Devices
|
<SECTION_DEVICES_DOWN>
|
||||||
----------------------
|
<SECTION_EVENTS>
|
||||||
<TABLE_NEW_DEVICES>
|
<SECTION_INTERNET>
|
||||||
</SECTION_NEW_DEVICES><SECTION_DEVICES_DOWN>
|
<PORTS_TABLE>
|
||||||
Devices Down
|
|
||||||
----------------------
|
|
||||||
<TABLE_DEVICES_DOWN>
|
|
||||||
</SECTION_DEVICES_DOWN><SECTION_EVENTS>
|
|
||||||
Events
|
|
||||||
----------------------
|
|
||||||
<TABLE_EVENTS>
|
|
||||||
</SECTION_EVENTS><SECTION_INTERNET>
|
|
||||||
Internet
|
|
||||||
----------------------
|
|
||||||
<TABLE_INTERNET>
|
|
||||||
</SECTION_INTERNET>
|
|
||||||
|
|||||||
64
back/report_template_new_version.html
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
<!-- ---------------------------------------------------------------------------
|
||||||
|
# Pi.Alert
|
||||||
|
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||||
|
#
|
||||||
|
# repot_template.html - Back module. Template to email reporting in HTML format
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||||
|
#--------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<font face=sans-serif>
|
||||||
|
<table align=center width=100% cellpadding=0 cellspacing=0 style="border-radius: 5px;">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 30px; font-weight: bold; color:#000000; border-top-right-radius: 5px; border-top-left-radius: 5px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||||
|
Pi.Alert Report
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td bgcolor=#2656f1 width=100% align=center style="padding: 20px 10px 10px 10px; font-size: 20px; font-weight: bold; color:#ffffff; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||||
|
<a style="color:#ffffff;cursor:pointer;" href="https://github.com/jokob-sk/Pi.Alert/releases">🆕 New version available 🆕</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 15px; text-align:center; color:#404040"> <tr>
|
||||||
|
<td width=100%> Report Date: <b><REPORT_DATE></b> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
||||||
|
|
||||||
|
<INTERNET_TABLE>
|
||||||
|
|
||||||
|
<NEW_DEVICES_TABLE>
|
||||||
|
|
||||||
|
<DOWN_DEVICES_TABLE>
|
||||||
|
|
||||||
|
<EVENTS_TABLE>
|
||||||
|
|
||||||
|
<PORTS_TABLE>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table width=100% bgcolor=#46802e cellpadding=5px cellspacing=0 style="font-size: 13px; font-weight: bold; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px;">
|
||||||
|
<tr>
|
||||||
|
<td width=50% style="text-align:center"> Pi.Alert - <SERVER_NAME></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</font>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
87
back/webhook_json_sample.json
Executable file
@@ -0,0 +1,87 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"headers": {
|
||||||
|
"host": "192.168.1.82:5678",
|
||||||
|
"user-agent": "curl/7.74.0",
|
||||||
|
"accept": "*/*",
|
||||||
|
"content-type": "application/json",
|
||||||
|
"content-length": "872"
|
||||||
|
},
|
||||||
|
"params": {},
|
||||||
|
"query": {},
|
||||||
|
"body": {
|
||||||
|
"username": "Pi.Alert",
|
||||||
|
"text": "There are new notifications",
|
||||||
|
"attachments": [
|
||||||
|
{
|
||||||
|
"title": "Pi.Alert Notifications",
|
||||||
|
"title_link": "",
|
||||||
|
"text": {
|
||||||
|
"internet": [],
|
||||||
|
"new_devices": [{
|
||||||
|
"MAC": "74:ac:74:ac:74:ac",
|
||||||
|
"Datetime": "2023-01-30 22:15:09",
|
||||||
|
"IP": "192.168.1.1",
|
||||||
|
"Event Type": "New Device",
|
||||||
|
"Device name": "(name not found)",
|
||||||
|
"Comments": null
|
||||||
|
}],
|
||||||
|
"down_devices": [],
|
||||||
|
"events": [{
|
||||||
|
"MAC": "74:ac:74:ac:74:ac",
|
||||||
|
"Datetime": "2023-01-30 22:15:09",
|
||||||
|
"IP": "192.168.1.92",
|
||||||
|
"Event Type": "Disconnected",
|
||||||
|
"Device name": "(name not found)",
|
||||||
|
"Comments": null
|
||||||
|
}, {
|
||||||
|
"MAC": "74:ac:74:ac:74:ac",
|
||||||
|
"Datetime": "2023-01-30 22:15:09",
|
||||||
|
"IP": "192.168.1.150",
|
||||||
|
"Event Type": "Disconnected",
|
||||||
|
"Device name": "(name not found)",
|
||||||
|
"Comments": null
|
||||||
|
}],
|
||||||
|
"ports": [{
|
||||||
|
"new": {
|
||||||
|
"Name": "New device",
|
||||||
|
"MAC": "74:ac:74:ac:74:ac",
|
||||||
|
"Port": "22/tcp",
|
||||||
|
"State": "open",
|
||||||
|
"Service": "ssh",
|
||||||
|
"Extra": ""
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"new": {
|
||||||
|
"Name": "New device",
|
||||||
|
"MAC": "74:ac:74:ac:74:ac",
|
||||||
|
"Port": "53/tcp",
|
||||||
|
"State": "open",
|
||||||
|
"Service": "domain",
|
||||||
|
"Extra": ""
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"new": {
|
||||||
|
"Name": "New device",
|
||||||
|
"MAC": "74:ac:74:ac:74:ac",
|
||||||
|
"Port": "80/tcp",
|
||||||
|
"State": "open",
|
||||||
|
"Service": "http",
|
||||||
|
"Extra": ""
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"new": {
|
||||||
|
"Name": "New device",
|
||||||
|
"MAC": "74:ac:74:ac:74:ac",
|
||||||
|
"Port": "443/tcp",
|
||||||
|
"State": "open",
|
||||||
|
"Service": "https",
|
||||||
|
"Extra": ""
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -103,15 +103,15 @@ DHCP_ACTIVE=False
|
|||||||
# Pholus
|
# Pholus
|
||||||
#---------------------------
|
#---------------------------
|
||||||
PHOLUS_ACTIVE=False
|
PHOLUS_ACTIVE=False
|
||||||
PHOLUS_TIMEOUT=20
|
PHOLUS_TIMEOUT=120
|
||||||
PHOLUS_FORCE=False
|
PHOLUS_FORCE=False
|
||||||
PHOLUS_DAYS_DATA=7
|
PHOLUS_DAYS_DATA=7
|
||||||
PHOLUS_RUN='once'
|
PHOLUS_RUN='once'
|
||||||
PHOLUS_RUN_TIMEOUT=300
|
PHOLUS_RUN_TIMEOUT=600
|
||||||
PHOLUS_RUN_SCHD='0 4 * * *'
|
PHOLUS_RUN_SCHD='0 4 * * *'
|
||||||
|
|
||||||
|
|
||||||
#-------------------IMPORTANT INFO-------------------#
|
#-------------------IMPORTANT INFO-------------------#
|
||||||
# This file is ingested by a python script, so if #
|
# This file is ingested by a python script, so if #
|
||||||
# modified it needs to use python syntax #
|
# modified it needs to use python syntax #
|
||||||
#-------------------IMPORTANT INFO-------------------#
|
#-------------------IMPORTANT INFO-------------------#
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
version: "3"
|
version: "3"
|
||||||
services:
|
services:
|
||||||
pialert:
|
pialert:
|
||||||
|
privileged: true
|
||||||
build: .
|
build: .
|
||||||
container_name: pialert
|
container_name: pialert
|
||||||
network_mode: "host"
|
network_mode: "host"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config
|
- ${APP_DATA_LOCATION}/pialert/config2:/home/pi/pialert/config
|
||||||
# - ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
# - ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
||||||
- ${APP_DATA_LOCATION}/pialert/db:/home/pi/pialert/db
|
- ${APP_DATA_LOCATION}/pialert/db2:/home/pi/pialert/db
|
||||||
# (optional) map an empty file with the name 'setting_darkmode' if you want to force the dark mode on container rebuilt
|
|
||||||
- ${APP_DATA_LOCATION}/pialert/db/setting_darkmode:/home/pi/pialert/db/setting_darkmode
|
|
||||||
# (optional) useful for debugging if you have issues setting up the container
|
# (optional) useful for debugging if you have issues setting up the container
|
||||||
- ${LOGS_LOCATION}:/home/pi/pialert/front/log
|
- ${LOGS_LOCATION}:/home/pi/pialert/front/log
|
||||||
# DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes
|
# DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes
|
||||||
- ${DEV_LOCATION}/back/pialert.py:/home/pi/pialert/back/pialert.py
|
- ${DEV_LOCATION}/back/pialert.py:/home/pi/pialert/back/pialert.py
|
||||||
- ${DEV_LOCATION}/back/update_vendors.sh:/home/pi/pialert/back/update_vendors.sh
|
|
||||||
- ${DEV_LOCATION}/pholus:/home/pi/pialert/pholus
|
- ${DEV_LOCATION}/pholus:/home/pi/pialert/pholus
|
||||||
- ${DEV_LOCATION}/dockerfiles:/home/pi/pialert/dockerfiles
|
- ${DEV_LOCATION}/dockerfiles:/home/pi/pialert/dockerfiles
|
||||||
- ${APP_DATA_LOCATION}/pialert/php.ini:/etc/php/7.4/fpm/php.ini
|
- ${APP_DATA_LOCATION}/pialert/php.ini:/etc/php/7.4/fpm/php.ini
|
||||||
|
- ${DEV_LOCATION}/front/api:/home/pi/pialert/front/api
|
||||||
- ${DEV_LOCATION}/front/css:/home/pi/pialert/front/css
|
- ${DEV_LOCATION}/front/css:/home/pi/pialert/front/css
|
||||||
|
- ${DEV_LOCATION}/front/lib/AdminLTE:/home/pi/pialert/front/lib/AdminLTE
|
||||||
- ${DEV_LOCATION}/front/js:/home/pi/pialert/front/js
|
- ${DEV_LOCATION}/front/js:/home/pi/pialert/front/js
|
||||||
- ${DEV_LOCATION}/front/php:/home/pi/pialert/front/php
|
- ${DEV_LOCATION}/front/php:/home/pi/pialert/front/php
|
||||||
- ${DEV_LOCATION}/front/deviceDetails.php:/home/pi/pialert/front/deviceDetails.php
|
- ${DEV_LOCATION}/front/deviceDetails.php:/home/pi/pialert/front/deviceDetails.php
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker.yml)
|
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker_prod.yml)
|
||||||
[](https://github.com/jokob-sk/Pi.Alert)
|
[](https://github.com/jokob-sk/Pi.Alert)
|
||||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
# 🐳 A docker image for Pi.Alert
|
# 🐳 A docker image for Pi.Alert
|
||||||
|
|
||||||
🐳 [Docker hub](https://registry.hub.docker.com/r/jokobsk/pi.alert) | 📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) | 📚 [Docker instructions](https://github.com/jokob-sk/Pi.Alert/blob/main//dockerfiles/README.md) | 🆕 [Release notes](https://github.com/jokob-sk/Pi.Alert/issues/138)
|
🐳 [Docker hub](https://registry.hub.docker.com/r/jokobsk/pi.alert) | 📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) | 📚 [Docker instructions](https://github.com/jokob-sk/Pi.Alert/blob/main//dockerfiles/README.md) | 🆕 [Release notes](https://github.com/jokob-sk/Pi.Alert/releases)
|
||||||
|
|
||||||
<a href="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/devices_split.png" target="_blank">
|
<a href="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/devices_split.png" target="_blank">
|
||||||
<img src="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/devices_split.png" width="300px" />
|
<img src="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/devices_split.png" width="300px" />
|
||||||
@@ -45,10 +45,10 @@ docker run -d --rm --network=host \
|
|||||||
| :------------- | :------------- |:-------------|
|
| :------------- | :------------- |:-------------|
|
||||||
| **Required** | `:/home/pi/pialert/config` | Folder which will contain the `pialert.conf` file (see below for details) |
|
| **Required** | `:/home/pi/pialert/config` | Folder which will contain the `pialert.conf` file (see below for details) |
|
||||||
| **Required** | `:/home/pi/pialert/db` | Folder which will contain the `pialert.db` file |
|
| **Required** | `:/home/pi/pialert/db` | Folder which will contain the `pialert.db` file |
|
||||||
|Optional| `:/home/pi/pialert/db/setting_darkmode` | Map an empty file with the name `setting_darkmode` if you want to force the dark mode on container rebuilt |
|
|
||||||
|Optional| `:/home/pi/pialert/front/log` | Logs folder useful for debugging if you have issues setting up the container |
|
|Optional| `:/home/pi/pialert/front/log` | Logs folder useful for debugging if you have issues setting up the container |
|
||||||
|Optional| `:/etc/pihole/pihole-FTL.db` | PiHole's `pihole-FTL.db` database file. Required if you want to use PiHole |
|
|Optional| `:/etc/pihole/pihole-FTL.db` | PiHole's `pihole-FTL.db` database file. Required if you want to use PiHole |
|
||||||
|Optional| `:/etc/pihole/dhcp.leases` | PiHole's `dhcp.leases` file. Required if you want to use PiHole |
|
|Optional| `:/etc/pihole/dhcp.leases` | PiHole's `dhcp.leases` file. Required if you want to use PiHole |
|
||||||
|
|Optional| `:/home/pi/pialert/front/api` | A simple [API endpoint](https://github.com/jokob-sk/Pi.Alert/blob/main/docs/API.md) containing static (but regularly updated) json and other files. |
|
||||||
|
|
||||||
|
|
||||||
### Config (`pialert.conf`)
|
### Config (`pialert.conf`)
|
||||||
@@ -57,7 +57,7 @@ docker run -d --rm --network=host \
|
|||||||
- ❗ Set the `SCAN_SUBNETS` variable.
|
- ❗ Set the `SCAN_SUBNETS` variable.
|
||||||
* The adapter will probably be `eth0` or `eth1`. (Run `iwconfig` to find your interface name(s))
|
* The adapter will probably be `eth0` or `eth1`. (Run `iwconfig` to find your interface name(s))
|
||||||
* Specify the network filter (which **significantly** speeds up the scan process). For example, the filter `192.168.1.0/24` covers IP ranges 192.168.1.0 to 192.168.1.255.
|
* Specify the network filter (which **significantly** speeds up the scan process). For example, the filter `192.168.1.0/24` covers IP ranges 192.168.1.0 to 192.168.1.255.
|
||||||
* Examples for one and two subnets (❗ Note the `['...', '...']` format for two or more subnets):
|
* Examples for one and two subnets (❗ Note the `['...', '...']` format):
|
||||||
* One subnet: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0']`
|
* One subnet: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0']`
|
||||||
* Two subnets: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0', '192.168.1.0/24 --interface=eth1']`
|
* Two subnets: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0', '192.168.1.0/24 --interface=eth1']`
|
||||||
|
|
||||||
@@ -99,9 +99,7 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- local/path/pialert/config:/home/pi/pialert/config
|
- local/path/pialert/config:/home/pi/pialert/config
|
||||||
- local/path/pialert/db:/home/pi/pialert/db
|
- local/path/pialert/db:/home/pi/pialert/db
|
||||||
# (optional) map an empty file with the name 'setting_darkmode' if you want to force the dark mode on container rebuilt
|
|
||||||
- local/path/pialert/db/setting_darkmode:/home/pi/pialert/db/setting_darkmode
|
|
||||||
# (optional) useful for debugging if you have issues setting up the container
|
# (optional) useful for debugging if you have issues setting up the container
|
||||||
- local/path/logs:/home/pi/pialert/front/log
|
- local/path/logs:/home/pi/pialert/front/log
|
||||||
environment:
|
environment:
|
||||||
@@ -127,9 +125,7 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config
|
- ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config
|
||||||
- ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
- ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
||||||
# (optional) map an empty file with the name 'setting_darkmode' if you want to force the dark mode on container rebuilt
|
|
||||||
- ${APP_DATA_LOCATION}/pialert/db/setting_darkmode:/home/pi/pialert/db/setting_darkmode
|
|
||||||
# (optional) useful for debugging if you have issues setting up the container
|
# (optional) useful for debugging if you have issues setting up the container
|
||||||
- ${LOGS_LOCATION}:/home/pi/pialert/front/log
|
- ${LOGS_LOCATION}:/home/pi/pialert/front/log
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
99
docs/API.md
Executable file
@@ -0,0 +1,99 @@
|
|||||||
|
## API endpoints
|
||||||
|
|
||||||
|
PiAlert comes with a simple API. These API endpoints are static files, that are periodically updated based on your settings.
|
||||||
|
|
||||||
|
|
||||||
|
### When are the endpoints updated
|
||||||
|
|
||||||
|
Once you enable the API (`ENABLE_API` setting), the endpoints are updated during these events:
|
||||||
|
|
||||||
|
1) Always during a notification event.
|
||||||
|
2) (optional) If `API_RUN` is set to `schedule` on a specified cron-like schedule specified by the `API_RUN_SCHD` setting.
|
||||||
|
3) (optional) If `API_RUN` is set to `interval` every N seconds specified by the `API_RUN_INTERVAL` setting (minimum 5).
|
||||||
|
|
||||||
|
|
||||||
|
### Location of the endpoints
|
||||||
|
|
||||||
|
In the container, these files are located under the `/home/pi/pialert/front/api/` folder and thus on the `<pialert_url>/api/<File name>` url.
|
||||||
|
|
||||||
|
### Available endpoints
|
||||||
|
|
||||||
|
You can access the following files:
|
||||||
|
|
||||||
|
| File name | Description |
|
||||||
|
|----------------------|----------------------|
|
||||||
|
| `notification_text.txt` | The plain text version of the last notification. |
|
||||||
|
| `notification_text.html` | The full HTML of the last email notification. |
|
||||||
|
| `notification_json_final.json` | The json version of the last notification (e.g. used for webhooks - [sample JSON](https://github.com/jokob-sk/Pi.Alert/blob/main/back/webhook_json_sample.json)). |
|
||||||
|
| `table_devices.json` | The current (at the time of the last update as mentioned above on this page) state of all of the available Devices detected by the app. |
|
||||||
|
| `table_nmap_scan.json` | The current state of the discovered ports by the regular NMAP scans. |
|
||||||
|
| `table_pholus_scan.json` | The latest state of the [pholus](https://github.com/jokob-sk/Pi.Alert/tree/main/pholus) (A multicast DNS and DNS Service Discovery Security Assessment Tool) scan results. |
|
||||||
|
| `table_events_pending_alert.json` | The list of the unprocessed (pending) notification events. |
|
||||||
|
| `table_custom_endpoint.json` | A custom endpoint generated by the SQL query specified by the `API_CUSTOM_SQL` setting. |
|
||||||
|
|
||||||
|
Current/latest state of the aforementioned files depends on your settings.
|
||||||
|
|
||||||
|
### JSON Data format
|
||||||
|
|
||||||
|
The endpoints starting with the `table_` prefix contain most, if not all, data contained in the corresponding database table. The common format for those is:
|
||||||
|
|
||||||
|
```JSON
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"db_column_name": "data",
|
||||||
|
"db_column_name2": "data2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"db_column_name": "data3",
|
||||||
|
"db_column_name2": "data4"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Example JSON of the `table_devices.json` endpoint with two Devices (database rows):
|
||||||
|
|
||||||
|
```JSON
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"dev_MAC": "Internet",
|
||||||
|
"dev_Name": "Net - Huawei",
|
||||||
|
"dev_DeviceType": "Router",
|
||||||
|
"dev_Vendor": null,
|
||||||
|
"dev_Group": "Always on",
|
||||||
|
"dev_FirstConnection": "2021-01-01 00:00:00",
|
||||||
|
"dev_LastConnection": "2021-01-28 22:22:11",
|
||||||
|
"dev_LastIP": "192.168.1.24",
|
||||||
|
"dev_StaticIP": 0,
|
||||||
|
"dev_PresentLastScan": 1,
|
||||||
|
"dev_LastNotification": "2023-01-28 22:22:28.998715",
|
||||||
|
"dev_NewDevice": 0,
|
||||||
|
"dev_Network_Node_MAC_ADDR": "",
|
||||||
|
"dev_Network_Node_port": "",
|
||||||
|
"dev_Icon": "globe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_MAC": "a4:8f:ff:aa:ba:1f",
|
||||||
|
"dev_Name": "Net - USG",
|
||||||
|
"dev_DeviceType": "Firewall",
|
||||||
|
"dev_Vendor": "Ubiquiti Inc",
|
||||||
|
"dev_Group": "",
|
||||||
|
"dev_FirstConnection": "2021-02-12 22:05:00",
|
||||||
|
"dev_LastConnection": "2021-07-17 15:40:00",
|
||||||
|
"dev_LastIP": "192.168.1.1",
|
||||||
|
"dev_StaticIP": 1,
|
||||||
|
"dev_PresentLastScan": 1,
|
||||||
|
"dev_LastNotification": "2021-07-17 15:40:10.667717",
|
||||||
|
"dev_NewDevice": 0,
|
||||||
|
"dev_Network_Node_MAC_ADDR": "Internet",
|
||||||
|
"dev_Network_Node_port": 1,
|
||||||
|
"dev_Icon": "shield-halved"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
43
docs/NETWORK_TREE.md
Executable file
@@ -0,0 +1,43 @@
|
|||||||
|
## How to setup your Network page
|
||||||
|
|
||||||
|
Make sure you have a root device with the MAC `Internet` (No other MAC addresses are currently support as root)
|
||||||
|
|
||||||
|
To setup a device named `rapberrypi` as a `Switch` in our network.
|
||||||
|
|
||||||
|
### 1) Device details page
|
||||||
|
|
||||||
|
- Go to the `Devices` (1) page:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- In the (2) `Details` tab navigate to the the `Type` (3) dropdown and select the type `Switch` (4).
|
||||||
|
|
||||||
|
> Note: Only the following device types will show up as selectable Network nodes ( = devices you can connect other devices to):
|
||||||
|
> AP, Firewall, Gateway, PLC, Powerline, Router, Switch, USB LAN Adapter, USB WIFI Adapter and WLAN.
|
||||||
|
|
||||||
|
- Assign a device to your root device from the `Node` (5) dropdown whitch has the MAC `Internet` (6) (Your name may differ, but the MAC needs to be set to `Internet` - this is done by default).
|
||||||
|
|
||||||
|
- Save your changes (7)
|
||||||
|
|
||||||
|
### 1) Network page
|
||||||
|
|
||||||
|
- Navigate to your `Network` (1) page:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Notice the newly added `raspberrypi` (2) tab which now represents a network node, also showing up in the tree (3).
|
||||||
|
- As we asssigned the `raspberrypi` in the previous 1) Device details page section to the `Internet` parent network node in step (6), the link is also showing up in the tree diagram (4)
|
||||||
|
- We can now assign the device `(AppleTV)` (5) to this `raspberrypi` node, representing a network Switch in this example
|
||||||
|
|
||||||
|
### 1) Network page with 2 levels
|
||||||
|
|
||||||
|
- After clicking the `Assign` button in the previous section, the `(AppleTV)` (1) device is now connected to our `raspberrypi` (2).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- You can see the `raspberrypi` represents the Network node type `Switch` (3)
|
||||||
|
- The `(AppleTV)` to `raspberrypi` connection is also displayed in the table of `Connected devices` (4).
|
||||||
|
- You can also see that our `raspberrypi` node is connected to it's Parent network device node with the MAC `Internet` (5). This connection again shows up in the tree (6) as well.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
15
docs/SMTP_GMAIL.md
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
## Use the Gmail SMTP server
|
||||||
|
|
||||||
|
1) Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
|
||||||
|
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
|
||||||
|
|
||||||
|
2) Specify the following settings:
|
||||||
|
|
||||||
|
```python
|
||||||
|
SMTP_SKIP_TLS=True
|
||||||
|
SMTP_FORCE_SSL=True
|
||||||
|
SMTP_PORT=465
|
||||||
|
SMTP_SERVER='smtp.gmail.com'
|
||||||
|
SMTP_PASS='16-digit passcode from google'
|
||||||
|
```
|
||||||
|
|
||||||
18
docs/WEBHOOK_N8N.md
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
### Create a simple n8n workflow
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Specify your email template
|
||||||
|
See [sample JSON](https://github.com/jokob-sk/Pi.Alert/blob/main/back/webhook_json_sample.json) if you want to see the JSON paths used in the email template below
|
||||||
|

|
||||||
|
|
||||||
|
```
|
||||||
|
Events count: {{ $json["body"]["attachments"][0]["text"]["events"].length }}
|
||||||
|
New devices count: {{ $json["body"]["attachments"][0]["text"]["new_devices"].length }}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Get your webhook in n8n
|
||||||
|

|
||||||
|
|
||||||
|
### Configure PiAlert to point to the above URL
|
||||||
|

|
||||||
BIN
docs/img/NETWORK_TREE/Device_Details_Network_Type.png
Executable file
|
After Width: | Height: | Size: 100 KiB |
BIN
docs/img/NETWORK_TREE/Network_Page.png
Executable file
|
After Width: | Height: | Size: 185 KiB |
BIN
docs/img/NETWORK_TREE/Network_Page_2_Levels.png
Executable file
|
After Width: | Height: | Size: 89 KiB |
BIN
docs/img/WEBHOOK_N8N/Webhook_settings.png
Executable file
|
After Width: | Height: | Size: 61 KiB |
BIN
docs/img/WEBHOOK_N8N/n8n_send_email_settings.png
Executable file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/img/WEBHOOK_N8N/n8n_webhook_settings.png
Executable file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/img/WEBHOOK_N8N/n8n_workflow.png
Executable file
|
After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 141 KiB |
0
docs/img/size_h_1250_w_1000.txt
Normal file → Executable file
@@ -1,80 +0,0 @@
|
|||||||
<!-- ---------------------------------------------------------------------------
|
|
||||||
# Pi.Alert
|
|
||||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
|
||||||
#
|
|
||||||
# repot_sample.html - Back module. Sample email reporting in HTML format
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
|
||||||
#--------------------------------------------------------------------------- -->
|
|
||||||
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<font face=sans-serif>
|
|
||||||
<table align=center width=80% border=1 bordercolor=#909090 cellpadding=0 cellspacing=0 style="border-collapse: collapse; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.5)">
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 36px; font-weight: bold; color:#7F6000; text-shadow: 4px 4px 6px #909090">
|
|
||||||
Pi.Alert Report
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 16px; text-align:center; color:#5F5000">
|
|
||||||
<tr>
|
|
||||||
<td width=33%> Report Date: <b>2021-01-01 08:00</b> </td>
|
|
||||||
<td width=34%> Scan Cycle: <b>Internet</b> </td>
|
|
||||||
<td width=33%> Server: <b>pi4</b> </td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=#F5F5F5 valign=top height=400 style="padding: 20px">
|
|
||||||
|
|
||||||
<p style="font-size: 24px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Internet: </p>
|
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=140> Event Type </th>
|
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
|
||||||
<th> Additional Info </th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td> Internet IP Changed </td>
|
|
||||||
<td> 2021-01-01 08:00:00 </td>
|
|
||||||
<td style="font-size: 24px; color:#D02020"> 1.1.1.0 </td>
|
|
||||||
<td> Previous Internet IP: 1.1.0.0 </td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<table width=100% border=0 bgcolor=#70AD47 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 12px; font-weight: bold; color:#385723">
|
|
||||||
<tr>
|
|
||||||
<td width=25% style="text-align:Left"> Puche 2021</td>
|
|
||||||
<td width=50% style="text-align:center"> Pi.Alert 2.50 / 2021-01-01 </td>
|
|
||||||
<td width=25% style="text-align:right"> GNU GPLv3</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</font>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,143 +0,0 @@
|
|||||||
<!-- ---------------------------------------------------------------------------
|
|
||||||
# Pi.Alert
|
|
||||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
|
||||||
#
|
|
||||||
# repot_sample.html - Back module. Sample email reporting in HTML format
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
|
||||||
#--------------------------------------------------------------------------- -->
|
|
||||||
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<font face=sans-serif>
|
|
||||||
<table align=center width=80% border=1 bordercolor=#909090 cellpadding=0 cellspacing=0 style="border-collapse: collapse; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.5)">
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 36px; font-weight: bold; color:#7F6000; text-shadow: 4px 4px 6px #909090">
|
|
||||||
Pi.Alert Report
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 16px; text-align:center; color:#5F5000">
|
|
||||||
<tr>
|
|
||||||
<td width=33%> Report Date: <b>2021-01-01 08:00</b> </td>
|
|
||||||
<td width=34%> Scan Cycle: <b>1</b> </td>
|
|
||||||
<td width=33%> Server: <b>pi4</b> </td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=#F5F5F5 height=400 valign=top style="padding: 20px">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> New Devices: </p>
|
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=140> MAC </th>
|
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
|
||||||
<th> Vendor </th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td> f8:d0:27:00:00:00 </td>
|
|
||||||
<td> 2021-01-01 08:00:00 </td>
|
|
||||||
<td> 192.168.1.20 </td>
|
|
||||||
<td> Seiko Epson Corporation </td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td> c8:6c:3d:00:00:00 </td>
|
|
||||||
<td> 2021-01-01 08:00:00 </td>
|
|
||||||
<td> 192.168.1.181 </td>
|
|
||||||
<td> Amazon Technologies Inc. </td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Devices Down: </p>
|
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=140> MAC </th>
|
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
|
||||||
<th> Device Name </th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td> 0c:ee:99:00:00:00 </td>
|
|
||||||
<td> 2021-01-01 08:00:00 </td>
|
|
||||||
<td> 192.168.1.171 </td>
|
|
||||||
<td> Alexa - Echo </td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p style="font-size: 14px; font-weight: bold; color:#409040; text-shadow: 2px 2px 4px #A0A0A0"> Events: </p>
|
|
||||||
|
|
||||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
|
||||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
|
||||||
<th width=140> MAC </th>
|
|
||||||
<th width=130> Datetime </th>
|
|
||||||
<th width=100> IP </th>
|
|
||||||
<th width=100> Event Type </th>
|
|
||||||
<th width=140> Device Name </th>
|
|
||||||
<th> Additional Info </th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td> 94:0c:98:00:00:00 </td>
|
|
||||||
<td> 2021-01-01 08:00:00 </td>
|
|
||||||
<td> 192.168.1.132 </td>
|
|
||||||
<td> Connected </td>
|
|
||||||
<td> Person 1 - iPhone 11 </td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td> 5c:41:5a:00:00:00 </td>
|
|
||||||
<td> 2021-01-01 08:00:00 </td>
|
|
||||||
<td> 192.168.1.170 </td>
|
|
||||||
<td> IP Changed </td>
|
|
||||||
<td> Alexa Dot </td>
|
|
||||||
<td> Previous IP: 192.168.1.243 </td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<table width=100% border=0 bgcolor=#70AD47 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 12px; font-weight: bold; color:#385723">
|
|
||||||
<tr>
|
|
||||||
<td width=25% style="text-align:Left"> Puche 2021</td>
|
|
||||||
<td width=50% style="text-align:center"> Pi.Alert 2.50 / 2021-01-01 </td>
|
|
||||||
<td width=25% style="text-align:right"> GNU GPLv3</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</font>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"headers": {
|
|
||||||
"host": "192.168.1.82:5678",
|
|
||||||
"user-agent": "curl/7.74.0",
|
|
||||||
"accept": "*/*",
|
|
||||||
"content-type": "application/json",
|
|
||||||
"content-length": "872"
|
|
||||||
},
|
|
||||||
"params": {},
|
|
||||||
"query": {},
|
|
||||||
"body": {
|
|
||||||
"username": "Pi.Alert",
|
|
||||||
"text": "There are new notifications",
|
|
||||||
"attachments": [
|
|
||||||
{
|
|
||||||
"title": "Pi.Alert Notifications",
|
|
||||||
"title_link": "",
|
|
||||||
"text": {
|
|
||||||
"internet": [],
|
|
||||||
"new_devices": [],
|
|
||||||
"down_devices": [],
|
|
||||||
"events": [
|
|
||||||
[
|
|
||||||
"aa:77:aa:77:aa:77",
|
|
||||||
"192.168.1.151",
|
|
||||||
"2022-08-12 21:48:00",
|
|
||||||
"Connected",
|
|
||||||
"",
|
|
||||||
1,
|
|
||||||
null,
|
|
||||||
"aa:77:aa:77:aa:77",
|
|
||||||
"ESP32 - display",
|
|
||||||
"House",
|
|
||||||
"",
|
|
||||||
"Espressif Inc.",
|
|
||||||
0,
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"2022-07-21 20:35:00",
|
|
||||||
"2022-08-12 21:48:00",
|
|
||||||
"192.168.1.151",
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
"2022-08-12 21:42:47.937413",
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
"",
|
|
||||||
0,
|
|
||||||
"aa:77:aa:77:aa:77",
|
|
||||||
""
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"aa:77:aa:77:aa:77",
|
|
||||||
"192.168.1.149",
|
|
||||||
"2022-08-12 21:48:00",
|
|
||||||
"Connected",
|
|
||||||
"",
|
|
||||||
1,
|
|
||||||
null,
|
|
||||||
"aa:77:aa:77:aa:77",
|
|
||||||
"ESP32 - 1",
|
|
||||||
"House",
|
|
||||||
"Singleboard Computer (SBC)",
|
|
||||||
"Espressif Inc.",
|
|
||||||
0,
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"2022-07-15 05:30:00",
|
|
||||||
"2022-08-12 21:48:00",
|
|
||||||
"192.168.1.149",
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
"2022-08-12 21:42:47.937413",
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
"",
|
|
||||||
0,
|
|
||||||
"aa:77:aa:77:aa:77",
|
|
||||||
""
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -666,10 +666,10 @@ height: 50px;
|
|||||||
width:46%;
|
width:46%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .setting_input
|
.myhidden
|
||||||
{
|
{
|
||||||
width:35%;
|
display:none;
|
||||||
} */
|
}
|
||||||
|
|
||||||
.center
|
.center
|
||||||
{
|
{
|
||||||
@@ -690,6 +690,16 @@ height: 50px;
|
|||||||
/* background-color: #272c30; */
|
/* background-color: #272c30; */
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
#settingsPage .panel-heading:hover{
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-expand-icon {
|
||||||
|
font-size: medium;
|
||||||
|
/* background-color: #272c30; */
|
||||||
|
margin: 10px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings_content input[type=checkbox]
|
.settings_content input[type=checkbox]
|
||||||
@@ -702,4 +712,92 @@ height: 50px;
|
|||||||
.drp-edit
|
.drp-edit
|
||||||
{
|
{
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.new-version
|
||||||
|
{
|
||||||
|
top: -6px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
font-size: large;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pointer
|
||||||
|
{
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
.db_info_table_row .select2-container--default .select2-selection--multiple .select2-selection__choice
|
||||||
|
{
|
||||||
|
background-color:#258744;
|
||||||
|
}
|
||||||
|
.db_info_table_row .select2-container--default .select2-selection--multiple
|
||||||
|
{
|
||||||
|
background-color:#606060;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-dropdown
|
||||||
|
{
|
||||||
|
background-color:#606060;
|
||||||
|
}
|
||||||
|
|
||||||
|
.networkPageHelp{
|
||||||
|
position: absolute;
|
||||||
|
font-size: x-small;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#networkTree .box
|
||||||
|
{
|
||||||
|
padding:2px;
|
||||||
|
margin:2px;
|
||||||
|
}
|
||||||
|
#networkTree .netNodeText
|
||||||
|
{
|
||||||
|
top: 2px;
|
||||||
|
margin: 2px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
#networkTree
|
||||||
|
{
|
||||||
|
margin-left: 16px;
|
||||||
|
/* border: solid;
|
||||||
|
border-color:#606060; */
|
||||||
|
position: relative;
|
||||||
|
font-size: 0.75em;
|
||||||
|
}
|
||||||
|
#networkTree .netIcon
|
||||||
|
{
|
||||||
|
width: 25px;;
|
||||||
|
float:left;
|
||||||
|
display:inline;
|
||||||
|
}
|
||||||
|
#networkTree .netCollapse
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
margin-left: 156px;
|
||||||
|
top: -3px;
|
||||||
|
font-size: large;
|
||||||
|
left: -15px;
|
||||||
|
}
|
||||||
|
#networkTree .highlightedNode
|
||||||
|
{
|
||||||
|
border: solid;
|
||||||
|
border-color:cyan;
|
||||||
|
}
|
||||||
|
#networkTree .netStatus-Off-line i
|
||||||
|
{
|
||||||
|
color: #dd4b39;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spanNetworkTree {
|
||||||
|
display: inline-block;
|
||||||
|
width: 120px;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden !important;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
require 'php/templates/header.php';
|
require 'php/templates/header.php';
|
||||||
require 'php/templates/graph.php';
|
require 'php/templates/graph.php';
|
||||||
require 'php/server/util.php';
|
|
||||||
|
|
||||||
|
|
||||||
// check permissions
|
// check permissions
|
||||||
@@ -27,7 +26,7 @@
|
|||||||
<!-- Content header--------------------------------------------------------- -->
|
<!-- Content header--------------------------------------------------------- -->
|
||||||
<section class="content-header">
|
<section class="content-header">
|
||||||
<h1 id="pageTitle">
|
<h1 id="pageTitle">
|
||||||
<?php echo lang('Device_Title');?>
|
<?= lang('Device_Title');?>
|
||||||
</h1>
|
</h1>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -40,7 +39,7 @@
|
|||||||
<a href="#" onclick="javascript: getDevicesList('all');">
|
<a href="#" onclick="javascript: getDevicesList('all');">
|
||||||
<div class="small-box bg-aqua">
|
<div class="small-box bg-aqua">
|
||||||
<div class="inner"><h3 id="devicesAll"> -- </h3>
|
<div class="inner"><h3 id="devicesAll"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Device_Shortcut_AllDevices');?></p>
|
<p class="infobox_label"><?= lang('Device_Shortcut_AllDevices');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"><i class="fa fa-laptop text-aqua-40"></i></div>
|
<div class="icon"><i class="fa fa-laptop text-aqua-40"></i></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -52,7 +51,7 @@
|
|||||||
<a href="#" onclick="javascript: getDevicesList('connected');">
|
<a href="#" onclick="javascript: getDevicesList('connected');">
|
||||||
<div class="small-box bg-green">
|
<div class="small-box bg-green">
|
||||||
<div class="inner"><h3 id="devicesConnected"> -- </h3>
|
<div class="inner"><h3 id="devicesConnected"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Device_Shortcut_Connected');?></p>
|
<p class="infobox_label"><?= lang('Device_Shortcut_Connected');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"><i class="fa fa-plug text-green-40"></i></div>
|
<div class="icon"><i class="fa fa-plug text-green-40"></i></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -64,7 +63,7 @@
|
|||||||
<a href="#" onclick="javascript: getDevicesList('favorites');">
|
<a href="#" onclick="javascript: getDevicesList('favorites');">
|
||||||
<div class="small-box bg-yellow">
|
<div class="small-box bg-yellow">
|
||||||
<div class="inner"><h3 id="devicesFavorites"> -- </h3>
|
<div class="inner"><h3 id="devicesFavorites"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Device_Shortcut_Favorites');?></p>
|
<p class="infobox_label"><?= lang('Device_Shortcut_Favorites');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"><i class="fa fa-star text-yellow-40"></i></div>
|
<div class="icon"><i class="fa fa-star text-yellow-40"></i></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -76,7 +75,7 @@
|
|||||||
<a href="#" onclick="javascript: getDevicesList('new');">
|
<a href="#" onclick="javascript: getDevicesList('new');">
|
||||||
<div class="small-box bg-yellow">
|
<div class="small-box bg-yellow">
|
||||||
<div class="inner"><h3 id="devicesNew"> -- </h3>
|
<div class="inner"><h3 id="devicesNew"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Device_Shortcut_NewDevices');?></p>
|
<p class="infobox_label"><?= lang('Device_Shortcut_NewDevices');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"><i class="ion ion-plus-round text-yellow-40"></i></div>
|
<div class="icon"><i class="ion ion-plus-round text-yellow-40"></i></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -88,7 +87,7 @@
|
|||||||
<a href="#" onclick="javascript: getDevicesList('down');">
|
<a href="#" onclick="javascript: getDevicesList('down');">
|
||||||
<div class="small-box bg-red">
|
<div class="small-box bg-red">
|
||||||
<div class="inner"><h3 id="devicesDown"> -- </h3>
|
<div class="inner"><h3 id="devicesDown"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Device_Shortcut_DownAlerts');?></p>
|
<p class="infobox_label"><?= lang('Device_Shortcut_DownAlerts');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"><i class="fa fa-warning text-red-40"></i></div>
|
<div class="icon"><i class="fa fa-warning text-red-40"></i></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -100,7 +99,7 @@
|
|||||||
<a href="#" onclick="javascript: getDevicesList('archived');">
|
<a href="#" onclick="javascript: getDevicesList('archived');">
|
||||||
<div class="small-box bg-gray top_small_box_gray_text">
|
<div class="small-box bg-gray top_small_box_gray_text">
|
||||||
<div class="inner"><h3 id="devicesArchived"> -- </h3>
|
<div class="inner"><h3 id="devicesArchived"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Device_Shortcut_Archived');?></p>
|
<p class="infobox_label"><?= lang('Device_Shortcut_Archived');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"><i class="fa fa-eye-slash text-gray-40"></i></div>
|
<div class="icon"><i class="fa fa-eye-slash text-gray-40"></i></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -115,7 +114,7 @@
|
|||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="box" id="clients">
|
<div class="box" id="clients">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
<h3 class="box-title"><?php echo lang('Device_Shortcut_OnlineChart');?> </h3>
|
<h3 class="box-title"><?= lang('Device_Shortcut_OnlineChart');?> </h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<div class="chart">
|
<div class="chart">
|
||||||
@@ -150,20 +149,8 @@
|
|||||||
<div class="box-body table-responsive">
|
<div class="box-body table-responsive">
|
||||||
<table id="tableDevices" class="table table-bordered table-hover table-striped">
|
<table id="tableDevices" class="table table-bordered table-hover table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><?php echo lang('Device_TableHead_Name');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_Owner');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_Type');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_Favorite');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_Group');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_FirstSession');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_LastSession');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_LastIP');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_MAC');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_Status');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_MAC');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_LastIPOrder');?></th>
|
|
||||||
<th><?php echo lang('Device_TableHead_Rowid');?></th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
</table>
|
</table>
|
||||||
@@ -204,6 +191,10 @@
|
|||||||
var parTableOrder = 'Front_Devices_Order';
|
var parTableOrder = 'Front_Devices_Order';
|
||||||
var tableRows = 10;
|
var tableRows = 10;
|
||||||
var tableOrder = [[3,'desc'], [0,'asc']];
|
var tableOrder = [[3,'desc'], [0,'asc']];
|
||||||
|
|
||||||
|
var columnsStr = '[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]';
|
||||||
|
var tableColumnOrder = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] ;
|
||||||
|
var tableColumnVisible = tableColumnOrder;
|
||||||
|
|
||||||
// Read parameters & Initialize components
|
// Read parameters & Initialize components
|
||||||
main();
|
main();
|
||||||
@@ -211,48 +202,132 @@
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function main () {
|
function main () {
|
||||||
|
|
||||||
// get parameter value
|
|
||||||
$.get('php/server/parameters.php?action=get¶meter='+ parTableRows, function(data) {
|
|
||||||
var result = JSON.parse(data);
|
|
||||||
|
|
||||||
result = parseInt(result, 10)
|
// get from cookie if available (need to use decodeURI as saved as part of URI in PHP)
|
||||||
|
cookieColumnsVisibleStr = decodeURI(getCookie("Front_Devices_Columns_Visible")).replaceAll('%2C',',')
|
||||||
|
|
||||||
if (Number.isInteger (result) ) {
|
defaultValue = cookieColumnsVisibleStr == "" ? columnsStr : cookieColumnsVisibleStr;
|
||||||
tableRows = result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get parameter value
|
// get visible columns
|
||||||
$.get('php/server/parameters.php?action=get¶meter='+ parTableOrder, function(data) {
|
$.get('php/server/parameters.php?action=get&expireMinutes=525600&defaultValue='+defaultValue+'¶meter=Front_Devices_Columns_Visible&skipcache', function(data) {
|
||||||
var result = JSON.parse(data);
|
|
||||||
result = JSON.parse(result);
|
// save which columns are in the Devices page visible
|
||||||
if (Array.isArray (result) ) {
|
tableColumnVisible = numberArrayFromString(data);
|
||||||
tableOrder = result;
|
|
||||||
|
// get from cookie if available (need to use decodeURI as saved as part of URI in PHP)
|
||||||
|
cookieColumnsOrderStr = decodeURI(getCookie("Front_Devices_Columns_Order")).replaceAll('%2C',',')
|
||||||
|
|
||||||
|
defaultValue = cookieColumnsOrderStr == "" ? columnsStr : cookieColumnsOrderStr;
|
||||||
|
|
||||||
|
// get the custom order specified by the user
|
||||||
|
$.get('php/server/parameters.php?action=get&expireMinutes=525600&defaultValue='+defaultValue+'¶meter=Front_Devices_Columns_Order&skipcache', function(data) {
|
||||||
|
|
||||||
|
// save the columns order in the Devices page
|
||||||
|
tableColumnOrder = numberArrayFromString(data);
|
||||||
|
|
||||||
|
//initialize the table headers in the correct order
|
||||||
|
var headersDefaultOrder = [ '<?= lang('Device_TableHead_Name');?>',
|
||||||
|
'<?= lang('Device_TableHead_Owner');?>',
|
||||||
|
'<?= lang('Device_TableHead_Type');?>',
|
||||||
|
'<?= lang('Device_TableHead_Icon');?>',
|
||||||
|
'<?= lang('Device_TableHead_Favorite');?>',
|
||||||
|
'<?= lang('Device_TableHead_Group');?>',
|
||||||
|
'<?= lang('Device_TableHead_FirstSession');?>',
|
||||||
|
'<?= lang('Device_TableHead_LastSession');?>',
|
||||||
|
'<?= lang('Device_TableHead_LastIP');?>',
|
||||||
|
'<?= lang('Device_TableHead_MAC');?>',
|
||||||
|
'<?= lang('Device_TableHead_Status');?>',
|
||||||
|
'<?= lang('Device_TableHead_MAC_full');?>',
|
||||||
|
'<?= lang('Device_TableHead_LastIPOrder');?>',
|
||||||
|
'<?= lang('Device_TableHead_Rowid');?>',
|
||||||
|
'<?= lang('Device_TableHead_Parent_MAC');?>',
|
||||||
|
'<?= lang('Device_TableHead_Connected_Devices');?>',
|
||||||
|
'<?= lang('Device_TableHead_Location');?>',
|
||||||
|
'<?= lang('Device_TableHead_Vendor');?>'
|
||||||
|
];
|
||||||
|
|
||||||
|
html = '';
|
||||||
|
|
||||||
|
for(index = 0; index < tableColumnOrder.length; index++)
|
||||||
|
{
|
||||||
|
html += '<th>' + headersDefaultOrder[tableColumnOrder[index]] + '</th>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize components with parameters
|
$('#tableDevices tr').html(html);
|
||||||
initializeDatatable();
|
|
||||||
|
|
||||||
// query data
|
// get parameter value
|
||||||
getDevicesTotals();
|
$.get('php/server/parameters.php?action=get&defaultValue=50¶meter='+ parTableRows, function(data) {
|
||||||
getDevicesList (deviceStatus);
|
var result = JSON.parse(data);
|
||||||
});
|
|
||||||
|
result = parseInt(result, 10)
|
||||||
|
|
||||||
|
if (Number.isInteger (result) ) {
|
||||||
|
tableRows = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get parameter value
|
||||||
|
$.get('php/server/parameters.php?action=get&defaultValue=[[3,"desc"],[0,"asc"]]¶meter='+ parTableOrder, function(data) {
|
||||||
|
var result = JSON.parse(data);
|
||||||
|
result = JSON.parse(result);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (Array.isArray (result) ) {
|
||||||
|
tableOrder = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize components with parameters
|
||||||
|
initializeDatatable();
|
||||||
|
|
||||||
|
// query data
|
||||||
|
getDevicesTotals();
|
||||||
|
getDevicesList (deviceStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
var tableColumnHide = [];
|
||||||
|
|
||||||
|
// mapping the default order to the user specified one
|
||||||
|
function mapIndx(oldIndex)
|
||||||
|
{
|
||||||
|
for(i=0;i<tableColumnOrder.length;i++)
|
||||||
|
{
|
||||||
|
if(tableColumnOrder[i] == oldIndex)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
function initializeDatatable () {
|
function initializeDatatable () {
|
||||||
|
for(i = 0; i < tableColumnOrder.length; i++)
|
||||||
|
{
|
||||||
|
// hide this column if not in the tableColumnVisible variable
|
||||||
|
if(tableColumnVisible.includes(tableColumnOrder[i]) == false)
|
||||||
|
{
|
||||||
|
tableColumnHide.push(mapIndx(tableColumnOrder[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If the device has a small width (mobile) only show name, ip, and status columns.
|
// If the device has a small width (mobile) only show name, ip, and status columns.
|
||||||
if (window.screen.width < 400) {
|
if (window.screen.width < 400) {
|
||||||
var tableColumnShow = [10,11,12,1,2,3,4,5,6,8];
|
tableColumnHide = [11,12,13,1,2,4,5,6,7,9];
|
||||||
} else {
|
}
|
||||||
var tableColumnShow = [10, 11, 12];
|
// else {
|
||||||
};
|
// // var tableColumnHide = [11, 12, 13];
|
||||||
|
// tableColumnHide = [11, 12, 13];
|
||||||
|
// };
|
||||||
var table=
|
var table=
|
||||||
$('#tableDevices').DataTable({
|
$('#tableDevices').DataTable({
|
||||||
'paging' : true,
|
'paging' : true,
|
||||||
'lengthChange' : true,
|
'lengthChange' : true,
|
||||||
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, '<?php echo lang('Device_Tablelenght_all');?>']],
|
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, '<?= lang('Device_Tablelenght_all');?>']],
|
||||||
'searching' : true,
|
'searching' : true,
|
||||||
|
|
||||||
'ordering' : true,
|
'ordering' : true,
|
||||||
@@ -265,20 +340,56 @@ function initializeDatatable () {
|
|||||||
// 'order' : [[3,'desc'], [0,'asc']],
|
// 'order' : [[3,'desc'], [0,'asc']],
|
||||||
|
|
||||||
'columnDefs' : [
|
'columnDefs' : [
|
||||||
{visible: false, targets: tableColumnShow },
|
{visible: false, targets: tableColumnHide },
|
||||||
{className: 'text-center', targets: [3, 8, 9] },
|
{className: 'text-center', targets: [mapIndx(3), mapIndx(4), mapIndx(9), mapIndx(10), mapIndx(15)] },
|
||||||
{width: '80px', targets: [5, 6] },
|
{width: '80px', targets: [mapIndx(6), mapIndx(7), mapIndx(15)] },
|
||||||
{width: '0px', targets: 9 },
|
{width: '30px', targets: [mapIndx(10), mapIndx(13)] },
|
||||||
{orderData: [11], targets: 7 },
|
{orderData: [mapIndx(12)], targets: mapIndx(8) },
|
||||||
|
|
||||||
// Device Name
|
// Device Name
|
||||||
{targets: [0],
|
{targets: [mapIndx(0)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
$(td).html ('<b><a href="deviceDetails.php?mac='+ rowData[10] +'" class="">'+ cellData +'</a></b>');
|
$(td).html ('<b class="anonymizeDev"><a href="deviceDetails.php?mac='+ rowData[mapIndx(11)] +'" class="">'+ cellData +'</a></b>');
|
||||||
} },
|
} },
|
||||||
|
|
||||||
// Favorite
|
// Connected Devices
|
||||||
{targets: [3],
|
{targets: [mapIndx(15)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
$(td).html ('<b><a href="./network.php?mac='+ rowData[mapIndx(11)] +'" class="">'+ cellData +'</a></b>');
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Icon
|
||||||
|
{targets: [mapIndx(3)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (!emptyArr.includes(cellData)){
|
||||||
|
$(td).html ('<i class="fa fa-'+cellData+' " style="font-size:16px"></i>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Full MAC
|
||||||
|
{targets: [mapIndx(11)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (!emptyArr.includes(cellData)){
|
||||||
|
$(td).html ('<span class="anonymizeMac">'+cellData+'</span>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
|
// IP address
|
||||||
|
{targets: [mapIndx(12)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (!emptyArr.includes(cellData)){
|
||||||
|
$(td).html ('<span class="anonymizeIp">'+cellData+'</span>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Favorite
|
||||||
|
{targets: [mapIndx(4)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
if (cellData == 1){
|
if (cellData == 1){
|
||||||
$(td).html ('<i class="fa fa-star text-yellow" style="font-size:16px"></i>');
|
$(td).html ('<i class="fa fa-star text-yellow" style="font-size:16px"></i>');
|
||||||
@@ -287,14 +398,14 @@ function initializeDatatable () {
|
|||||||
}
|
}
|
||||||
} },
|
} },
|
||||||
|
|
||||||
// Dates
|
// Dates
|
||||||
{targets: [5, 6],
|
{targets: [mapIndx(6), mapIndx(7)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
$(td).html (translateHTMLcodes (cellData));
|
$(td).html (translateHTMLcodes (cellData));
|
||||||
} },
|
} },
|
||||||
|
|
||||||
// Random MAC
|
// Random MAC
|
||||||
{targets: [8],
|
{targets: [mapIndx(9)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
if (cellData == 1){
|
if (cellData == 1){
|
||||||
$(td).html ('<i data-toggle="tooltip" data-placement="right" title="Random MAC" style="font-size: 16px;" class="text-yellow glyphicon glyphicon-random"></i>');
|
$(td).html ('<i data-toggle="tooltip" data-placement="right" title="Random MAC" style="font-size: 16px;" class="text-yellow glyphicon glyphicon-random"></i>');
|
||||||
@@ -303,8 +414,8 @@ function initializeDatatable () {
|
|||||||
}
|
}
|
||||||
} },
|
} },
|
||||||
|
|
||||||
// Status color
|
// Status color
|
||||||
{targets: [9],
|
{targets: [mapIndx(10)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
switch (cellData) {
|
switch (cellData) {
|
||||||
case 'Down': color='red'; break;
|
case 'Down': color='red'; break;
|
||||||
@@ -324,13 +435,13 @@ function initializeDatatable () {
|
|||||||
'language' : {
|
'language' : {
|
||||||
processing: '<table> <td width="130px" align="middle">Loading...</td><td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td> </table>',
|
processing: '<table> <td width="130px" align="middle">Loading...</td><td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td> </table>',
|
||||||
emptyTable: 'No data',
|
emptyTable: 'No data',
|
||||||
"lengthMenu": "<?php echo lang('Device_Tablelenght');?>",
|
"lengthMenu": "<?= lang('Device_Tablelenght');?>",
|
||||||
"search": "<?php echo lang('Device_Searchbox');?>: ",
|
"search": "<?= lang('Device_Searchbox');?>: ",
|
||||||
"paginate": {
|
"paginate": {
|
||||||
"next": "<?php echo lang('Device_Table_nav_next');?>",
|
"next": "<?= lang('Device_Table_nav_next');?>",
|
||||||
"previous": "<?php echo lang('Device_Table_nav_prev');?>"
|
"previous": "<?= lang('Device_Table_nav_prev');?>"
|
||||||
},
|
},
|
||||||
"info": "<?php echo lang('Device_Table_info');?>",
|
"info": "<?= lang('Device_Table_info');?>",
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -341,11 +452,11 @@ function initializeDatatable () {
|
|||||||
|
|
||||||
$('#tableDevices').on( 'order.dt', function () {
|
$('#tableDevices').on( 'order.dt', function () {
|
||||||
setParameter (parTableOrder, JSON.stringify (table.order()) );
|
setParameter (parTableOrder, JSON.stringify (table.order()) );
|
||||||
setCookie ('devicesList', getDevicesFromTable(table) );
|
setCache ('devicesList', getDevicesFromTable(table) );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
$('#tableDevices').on( 'search.dt', function () {
|
$('#tableDevices').on( 'search.dt', function () {
|
||||||
setCookie ('devicesList', getDevicesFromTable(table) );
|
setCache ('devicesList', getDevicesFromTable(table) );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -354,18 +465,27 @@ function initializeDatatable () {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Gets a JSON list of rowID and mac from the displayed table in the UI
|
// Gets a JSON list of rowID and mac from the displayed table in the UI
|
||||||
function getDevicesFromTable(table)
|
function getDevicesFromTable(table)
|
||||||
{
|
{
|
||||||
rowIDs = table.column(12, { 'search': 'applied' }).data().toArray() // rowID is in hidden column 12
|
rowIDs = table.column(mapIndx(13), { 'search': 'applied' }).data().toArray() //
|
||||||
rowMACs = table.column(10, { 'search': 'applied' }).data().toArray() // MAC is in hidden column 10
|
rowMACs = table.column(mapIndx(11), { 'search': 'applied' }).data().toArray() //
|
||||||
|
rowNames = table.column(mapIndx(0), { 'search': 'applied' }).data().toArray() //
|
||||||
|
rowTypes = table.column(mapIndx(2), { 'search': 'applied' }).data().toArray() //
|
||||||
|
rowIcons = table.column(mapIndx(3), { 'search': 'applied' }).data().toArray() //
|
||||||
|
rowParentMAC = table.column(mapIndx(14), { 'search': 'applied' }).data().toArray() //
|
||||||
|
rowStatus = table.column(mapIndx(10), { 'search': 'applied' }).data().toArray() //
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
|
|
||||||
rowIDs.map(function(rowID, index){
|
rowIDs.map(function(rowID, index){
|
||||||
result.push({"rowid": rowID, "mac":rowMACs[index]})
|
result.push({
|
||||||
|
"rowid": rowID,
|
||||||
|
"mac" : rowMACs[index],
|
||||||
|
"name" : rowNames[index],
|
||||||
|
"type" : rowTypes[index],
|
||||||
|
"icon" : rowIcons[index],
|
||||||
|
"parentMac" : rowParentMAC[index],
|
||||||
|
"status" : rowStatus[index] })
|
||||||
})
|
})
|
||||||
|
|
||||||
// console.log(rowIDs)
|
|
||||||
// console.log(result)
|
|
||||||
|
|
||||||
return JSON.stringify (result)
|
return JSON.stringify (result)
|
||||||
}
|
}
|
||||||
@@ -392,6 +512,10 @@ function getDevicesTotals () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function getDeviceColumns () {
|
||||||
|
|
||||||
|
}
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function getDevicesList (status) {
|
function getDevicesList (status) {
|
||||||
// Save status selected
|
// Save status selected
|
||||||
@@ -399,13 +523,13 @@ function getDevicesList (status) {
|
|||||||
|
|
||||||
// Define color & title for the status selected
|
// Define color & title for the status selected
|
||||||
switch (deviceStatus) {
|
switch (deviceStatus) {
|
||||||
case 'all': tableTitle = '<?php echo lang('Device_Shortcut_AllDevices');?>'; color = 'aqua'; break;
|
case 'all': tableTitle = '<?= lang('Device_Shortcut_AllDevices');?>'; color = 'aqua'; break;
|
||||||
case 'connected': tableTitle = '<?php echo lang('Device_Shortcut_Connected');?>'; color = 'green'; break;
|
case 'connected': tableTitle = '<?= lang('Device_Shortcut_Connected');?>'; color = 'green'; break;
|
||||||
case 'favorites': tableTitle = '<?php echo lang('Device_Shortcut_Favorites');?>'; color = 'yellow'; break;
|
case 'favorites': tableTitle = '<?= lang('Device_Shortcut_Favorites');?>'; color = 'yellow'; break;
|
||||||
case 'new': tableTitle = '<?php echo lang('Device_Shortcut_NewDevices');?>'; color = 'yellow'; break;
|
case 'new': tableTitle = '<?= lang('Device_Shortcut_NewDevices');?>'; color = 'yellow'; break;
|
||||||
case 'down': tableTitle = '<?php echo lang('Device_Shortcut_DownAlerts');?>'; color = 'red'; break;
|
case 'down': tableTitle = '<?= lang('Device_Shortcut_DownAlerts');?>'; color = 'red'; break;
|
||||||
case 'archived': tableTitle = '<?php echo lang('Device_Shortcut_Archived');?>'; color = 'gray'; break;
|
case 'archived': tableTitle = '<?= lang('Device_Shortcut_Archived');?>'; color = 'gray'; break;
|
||||||
default: tableTitle = '<?php echo lang('Device_Shortcut_Devices');?>'; color = 'gray'; break;
|
default: tableTitle = '<?= lang('Device_Shortcut_Devices');?>'; color = 'gray'; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set title and color
|
// Set title and color
|
||||||
@@ -419,3 +543,5 @@ function getDevicesList (status) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script src="js/pialert_common.js"></script>
|
||||||
|
|||||||
@@ -17,17 +17,17 @@
|
|||||||
<!-- Content header--------------------------------------------------------- -->
|
<!-- Content header--------------------------------------------------------- -->
|
||||||
<section class="content-header">
|
<section class="content-header">
|
||||||
<h1 id="pageTitle">
|
<h1 id="pageTitle">
|
||||||
<?php echo lang('Events_Title');?>
|
<?= lang('Events_Title');?>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<!-- period selector -->
|
<!-- period selector -->
|
||||||
<span class="breadcrumb" style="top: 0px;">
|
<span class="breadcrumb" style="top: 0px;">
|
||||||
<select class="form-control" id="period" onchange="javascript: periodChanged();">
|
<select class="form-control" id="period" onchange="javascript: periodChanged();">
|
||||||
<option value="1 day"><?php echo lang('Events_Periodselect_today');?></option>
|
<option value="1 day"><?= lang('Events_Periodselect_today');?></option>
|
||||||
<option value="7 days"><?php echo lang('Events_Periodselect_LastWeek');?></option>
|
<option value="7 days"><?= lang('Events_Periodselect_LastWeek');?></option>
|
||||||
<option value="1 month" selected><?php echo lang('Events_Periodselect_LastMonth');?></option>
|
<option value="1 month" selected><?= lang('Events_Periodselect_LastMonth');?></option>
|
||||||
<option value="1 year"><?php echo lang('Events_Periodselect_LastYear');?></option>
|
<option value="1 year"><?= lang('Events_Periodselect_LastYear');?></option>
|
||||||
<option value="100 years"><?php echo lang('Events_Periodselect_All');?></option>
|
<option value="100 years"><?= lang('Events_Periodselect_All');?></option>
|
||||||
</select>
|
</select>
|
||||||
</span>
|
</span>
|
||||||
</section>
|
</section>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<a href="#" onclick="javascript: getEvents('all');">
|
<a href="#" onclick="javascript: getEvents('all');">
|
||||||
<div class="small-box bg-aqua">
|
<div class="small-box bg-aqua">
|
||||||
<div class="inner"> <h3 id="eventsAll"> -- </h3>
|
<div class="inner"> <h3 id="eventsAll"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Events_Shortcut_AllEvents');?></p>
|
<p class="infobox_label"><?= lang('Events_Shortcut_AllEvents');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"> <i class="fa fa-bolt text-aqua-40"></i> </div>
|
<div class="icon"> <i class="fa fa-bolt text-aqua-40"></i> </div>
|
||||||
</div>
|
</div>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
<a href="#" onclick="javascript: getEvents('sessions');">
|
<a href="#" onclick="javascript: getEvents('sessions');">
|
||||||
<div class="small-box bg-green">
|
<div class="small-box bg-green">
|
||||||
<div class="inner"> <h3 id="eventsSessions"> -- </h3>
|
<div class="inner"> <h3 id="eventsSessions"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Events_Shortcut_Sessions');?></p>
|
<p class="infobox_label"><?= lang('Events_Shortcut_Sessions');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"> <i class="fa fa-plug text-green-40"></i> </div>
|
<div class="icon"> <i class="fa fa-plug text-green-40"></i> </div>
|
||||||
</div>
|
</div>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
<a href="#" onclick="javascript: getEvents('missing');">
|
<a href="#" onclick="javascript: getEvents('missing');">
|
||||||
<div class="small-box bg-yellow">
|
<div class="small-box bg-yellow">
|
||||||
<div class="inner"> <h3 id="eventsMissing"> -- </h3>
|
<div class="inner"> <h3 id="eventsMissing"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Events_Shortcut_MissSessions');?></p>
|
<p class="infobox_label"><?= lang('Events_Shortcut_MissSessions');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"> <i class="fa fa-exchange text-yellow-40"></i> </div>
|
<div class="icon"> <i class="fa fa-exchange text-yellow-40"></i> </div>
|
||||||
</div>
|
</div>
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
<a href="#" onclick="javascript: getEvents('voided');">
|
<a href="#" onclick="javascript: getEvents('voided');">
|
||||||
<div class="small-box bg-yellow">
|
<div class="small-box bg-yellow">
|
||||||
<div class="inner"> <h3 id="eventsVoided"> -- </h3>
|
<div class="inner"> <h3 id="eventsVoided"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Events_Shortcut_VoidSessions');?></p>
|
<p class="infobox_label"><?= lang('Events_Shortcut_VoidSessions');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"> <i class="fa fa-exclamation-circle text-yellow-40"></i> </div>
|
<div class="icon"> <i class="fa fa-exclamation-circle text-yellow-40"></i> </div>
|
||||||
</div>
|
</div>
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
<a href="#" onclick="javascript: getEvents('new');">
|
<a href="#" onclick="javascript: getEvents('new');">
|
||||||
<div class="small-box bg-yellow">
|
<div class="small-box bg-yellow">
|
||||||
<div class="inner"> <h3 id="eventsNewDevices"> -- </h3>
|
<div class="inner"> <h3 id="eventsNewDevices"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Events_Shortcut_NewDevices');?></p>
|
<p class="infobox_label"><?= lang('Events_Shortcut_NewDevices');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"> <i class="ion ion-plus-round text-yellow-40"></i> </div>
|
<div class="icon"> <i class="ion ion-plus-round text-yellow-40"></i> </div>
|
||||||
</div>
|
</div>
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
<a href="#" onclick="javascript: getEvents('down');">
|
<a href="#" onclick="javascript: getEvents('down');">
|
||||||
<div class="small-box bg-red">
|
<div class="small-box bg-red">
|
||||||
<div class="inner"> <h3 id="eventsDown"> -- </h3>
|
<div class="inner"> <h3 id="eventsDown"> -- </h3>
|
||||||
<p class="infobox_label"><?php echo lang('Events_Shortcut_DownAlerts');?></p>
|
<p class="infobox_label"><?= lang('Events_Shortcut_DownAlerts');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"> <i class="fa fa-warning text-red-40"></i> </div>
|
<div class="icon"> <i class="fa fa-warning text-red-40"></i> </div>
|
||||||
</div>
|
</div>
|
||||||
@@ -127,18 +127,18 @@
|
|||||||
<table id="tableEvents" class="table table-bordered table-hover table-striped ">
|
<table id="tableEvents" class="table table-bordered table-hover table-striped ">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><?php echo lang('Events_TableHead_Order');?></th>
|
<th><?= lang('Events_TableHead_Order');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_Device');?></th>
|
<th><?= lang('Events_TableHead_Device');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_Owner');?></th>
|
<th><?= lang('Events_TableHead_Owner');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_Date');?></th>
|
<th><?= lang('Events_TableHead_Date');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_EventType');?></th>
|
<th><?= lang('Events_TableHead_EventType');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_Connection');?></th>
|
<th><?= lang('Events_TableHead_Connection');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_Disconnection');?></th>
|
<th><?= lang('Events_TableHead_Disconnection');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_Duration');?></th>
|
<th><?= lang('Events_TableHead_Duration');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_DurationOrder');?></th>
|
<th><?= lang('Events_TableHead_DurationOrder');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_IP');?></th>
|
<th><?= lang('Events_TableHead_IP');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_IPOrder');?></th>
|
<th><?= lang('Events_TableHead_IPOrder');?></th>
|
||||||
<th><?php echo lang('Events_TableHead_AdditionalInfo');?></th>
|
<th><?= lang('Events_TableHead_AdditionalInfo');?></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
</table>
|
</table>
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function main () {
|
function main () {
|
||||||
// get parameter value
|
// get parameter value
|
||||||
$.get('php/server/parameters.php?action=get¶meter='+ parPeriod, function(data) {
|
$.get('php/server/parameters.php?action=get&defaultValue=1 day¶meter='+ parPeriod, function(data) {
|
||||||
var result = JSON.parse(data);
|
var result = JSON.parse(data);
|
||||||
if (result) {
|
if (result) {
|
||||||
period = result;
|
period = result;
|
||||||
@@ -196,7 +196,7 @@ function main () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get parameter value
|
// get parameter value
|
||||||
$.get('php/server/parameters.php?action=get¶meter='+ parTableRows, function(data) {
|
$.get('php/server/parameters.php?action=get&defaultValue=50¶meter='+ parTableRows, function(data) {
|
||||||
var result = JSON.parse(data);
|
var result = JSON.parse(data);
|
||||||
result = parseInt(result, 10)
|
result = parseInt(result, 10)
|
||||||
if (Number.isInteger (result) ) {
|
if (Number.isInteger (result) ) {
|
||||||
@@ -253,13 +253,13 @@ function initializeDatatable () {
|
|||||||
'language' : {
|
'language' : {
|
||||||
processing: '<table><td width="130px" align="middle">Loading...</td><td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td></table>',
|
processing: '<table><td width="130px" align="middle">Loading...</td><td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td></table>',
|
||||||
emptyTable: 'No data',
|
emptyTable: 'No data',
|
||||||
"lengthMenu": "<?php echo lang('Events_Tablelenght');?>",
|
"lengthMenu": "<?= lang('Events_Tablelenght');?>",
|
||||||
"search": "<?php echo lang('Events_Searchbox');?>: ",
|
"search": "<?= lang('Events_Searchbox');?>: ",
|
||||||
"paginate": {
|
"paginate": {
|
||||||
"next": "<?php echo lang('Events_Table_nav_next');?>",
|
"next": "<?= lang('Events_Table_nav_next');?>",
|
||||||
"previous": "<?php echo lang('Events_Table_nav_prev');?>"
|
"previous": "<?= lang('Events_Table_nav_prev');?>"
|
||||||
},
|
},
|
||||||
"info": "<?php echo lang('Events_Table_info');?>",
|
"info": "<?= lang('Events_Table_info');?>",
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -311,13 +311,13 @@ function getEvents (p_eventsType) {
|
|||||||
|
|
||||||
// Define color & title for the status selected
|
// Define color & title for the status selected
|
||||||
switch (eventsType) {
|
switch (eventsType) {
|
||||||
case 'all': tableTitle = '<?php echo lang('Events_Shortcut_AllEvents');?>'; color = 'aqua'; sesionCols = false; break;
|
case 'all': tableTitle = '<?= lang('Events_Shortcut_AllEvents');?>'; color = 'aqua'; sesionCols = false; break;
|
||||||
case 'sessions': tableTitle = '<?php echo lang('Events_Shortcut_Sessions');?>'; color = 'green'; sesionCols = true; break;
|
case 'sessions': tableTitle = '<?= lang('Events_Shortcut_Sessions');?>'; color = 'green'; sesionCols = true; break;
|
||||||
case 'missing': tableTitle = '<?php echo lang('Events_Shortcut_MissSessions');?>'; color = 'yellow'; sesionCols = true; break;
|
case 'missing': tableTitle = '<?= lang('Events_Shortcut_MissSessions');?>'; color = 'yellow'; sesionCols = true; break;
|
||||||
case 'voided': tableTitle = '<?php echo lang('Events_Shortcut_VoidSessions');?>'; color = 'yellow'; sesionCols = false; break;
|
case 'voided': tableTitle = '<?= lang('Events_Shortcut_VoidSessions');?>'; color = 'yellow'; sesionCols = false; break;
|
||||||
case 'new': tableTitle = '<?php echo lang('Events_Shortcut_NewDevices');?>'; color = 'yellow'; sesionCols = false; break;
|
case 'new': tableTitle = '<?= lang('Events_Shortcut_NewDevices');?>'; color = 'yellow'; sesionCols = false; break;
|
||||||
case 'down': tableTitle = '<?php echo lang('Events_Shortcut_DownAlerts');?>'; color = 'red'; sesionCols = false; break;
|
case 'down': tableTitle = '<?= lang('Events_Shortcut_DownAlerts');?>'; color = 'red'; sesionCols = false; break;
|
||||||
default: tableTitle = '<?php echo lang('Events_Shortcut_Events');?>'; boxClass = ''; sesionCols = false; break;
|
default: tableTitle = '<?= lang('Events_Shortcut_Events');?>'; boxClass = ''; sesionCols = false; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set title and color
|
// Set title and color
|
||||||
|
|||||||
@@ -8,39 +8,46 @@
|
|||||||
<section class="content-header">
|
<section class="content-header">
|
||||||
<?php require 'php/templates/notification.php'; ?>
|
<?php require 'php/templates/notification.php'; ?>
|
||||||
<h1 id="pageTitle">
|
<h1 id="pageTitle">
|
||||||
<?php echo lang('HelpFAQ_Title');?>
|
<?= lang('HelpFAQ_Title');?>
|
||||||
</h1>
|
</h1>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Main content ---------------------------------------------------------- -->
|
<!-- Main content ---------------------------------------------------------- -->
|
||||||
<section class="content">
|
<section class="content">
|
||||||
<h4><?php echo lang('HelpFAQ_Cat_General');?></h4>
|
<h4><?= lang('HelpFAQ_Cat_General');?></h4>
|
||||||
|
|
||||||
<div class="panel-group" id="accordion_gen">
|
<div class="panel-group" id="accordion_gen">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
|
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse100">
|
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse100">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_100_head');?></a>
|
<?= lang('HelpFAQ_Cat_General_100_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="collapse100" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse100" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body"><?php echo lang('HelpFAQ_Cat_General_100_text_a');?>
|
<div class="panel-body"><?= lang('HelpFAQ_Cat_General_100_text_a');?>
|
||||||
<span class="text-danger help_faq_code"><?php echo date_default_timezone_get(); ?></span><br>
|
<span class="text-danger help_faq_code"><?php echo date_default_timezone_get(); ?></span><br>
|
||||||
<?php echo lang('HelpFAQ_Cat_General_100_text_b');?>
|
<?= lang('HelpFAQ_Cat_General_100_text_b');?>
|
||||||
<span class="text-danger help_faq_code"><?php echo php_ini_loaded_file(); ?></span><br>
|
<span class="text-danger help_faq_code"><?php echo php_ini_loaded_file(); ?></span><br>
|
||||||
<?php echo lang('HelpFAQ_Cat_General_100_text_c');?></div>
|
<?= lang('HelpFAQ_Cat_General_100_text_c');?>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse101">
|
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse101">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_101_head');?></a>
|
<?= lang('HelpFAQ_Cat_General_101_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse101" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse101" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_101_text');?>
|
<?= lang('HelpFAQ_Cat_General_101_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -48,12 +55,12 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse102">
|
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse102">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_102_head');?></a>
|
<?= lang('HelpFAQ_Cat_General_102_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse102" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse102" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_102_text');?>
|
<?= lang('HelpFAQ_Cat_General_102_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -61,12 +68,12 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse102docker">
|
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse102docker">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_102docker_head');?></a>
|
<?= lang('HelpFAQ_Cat_General_102docker_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse102docker" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse102docker" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_102docker_text');?>
|
<?= lang('HelpFAQ_Cat_General_102docker_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -74,48 +81,48 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse103">
|
<a data-toggle="collapse" data-parent="#accordion_gen" href="#collapse103">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_103_head');?></a>
|
<?= lang('HelpFAQ_Cat_General_103_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse103" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse103" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_General_103_text');?>
|
<?= lang('HelpFAQ_Cat_General_103_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4><?php echo lang('Navigation_Devices');?></h4>
|
<h4><?= lang('Navigation_Devices');?></h4>
|
||||||
<div class="panel-group" id="accordion_dev">
|
<div class="panel-group" id="accordion_dev">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_dev" href="#collapse200">
|
<a data-toggle="collapse" data-parent="#accordion_dev" href="#collapse200">
|
||||||
<?php echo lang('HelpFAQ_Cat_Device_200_head');?></a>
|
<?= lang('HelpFAQ_Cat_Device_200_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse200" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse200" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_Device_200_text');?>
|
<?= lang('HelpFAQ_Cat_Device_200_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<h4><?php echo lang('HelpFAQ_Cat_Detail');?></h4>
|
<h4><?= lang('HelpFAQ_Cat_Detail');?></h4>
|
||||||
<div class="panel-group" id="accordion_det">
|
<div class="panel-group" id="accordion_det">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse300">
|
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse300">
|
||||||
<?php echo lang('HelpFAQ_Cat_Detail_300_head');?> "<?php echo lang('DevDetail_MainInfo_Network');?>" / "<?php echo lang('DevDetail_MainInfo_Network_Port');?>"?</a>
|
<?= lang('HelpFAQ_Cat_Detail_300_head');?> "<?= lang('DevDetail_MainInfo_Network');?>" / "<?= lang('DevDetail_MainInfo_Network_Port');?>"?</a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse300" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse300" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
"<?php echo lang('DevDetail_MainInfo_Network');?>" <?php echo lang('HelpFAQ_Cat_Detail_300_text_a');?><br>
|
"<?= lang('DevDetail_MainInfo_Network');?>" <?= lang('HelpFAQ_Cat_Detail_300_text_a');?><br>
|
||||||
"<?php echo lang('DevDetail_MainInfo_Network_Port');?>" <?php echo lang('HelpFAQ_Cat_Detail_300_text_b');?>
|
"<?= lang('DevDetail_MainInfo_Network_Port');?>" <?= lang('HelpFAQ_Cat_Detail_300_text_b');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -123,12 +130,12 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse301">
|
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse301">
|
||||||
<?php echo lang('HelpFAQ_Cat_Detail_301_head_a');?> "<?php echo lang('DevDetail_EveandAl_ScanCycle');?>" <?php echo lang('HelpFAQ_Cat_Detail_301_head_b');?></a>
|
<?= lang('HelpFAQ_Cat_Detail_301_head_a');?> "<?= lang('DevDetail_EveandAl_ScanCycle');?>" <?= lang('HelpFAQ_Cat_Detail_301_head_b');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse301" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse301" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_Detail_301_text');?>
|
<?= lang('HelpFAQ_Cat_Detail_301_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -136,12 +143,12 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse302">
|
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse302">
|
||||||
<?php echo lang('HelpFAQ_Cat_Detail_302_head_a');?> "<?php echo lang('DevDetail_EveandAl_RandomMAC');?>" <?php echo lang('HelpFAQ_Cat_Detail_302_head_b');?></a>
|
<?= lang('HelpFAQ_Cat_Detail_302_head_a');?> "<?= lang('DevDetail_EveandAl_RandomMAC');?>" <?= lang('HelpFAQ_Cat_Detail_302_head_b');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse302" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse302" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_Detail_302_text');?>
|
<?= lang('HelpFAQ_Cat_Detail_302_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -149,29 +156,29 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse303">
|
<a data-toggle="collapse" data-parent="#accordion_det" href="#collapse303">
|
||||||
<?php echo lang('HelpFAQ_Cat_Detail_303_head');?></a>
|
<?= lang('HelpFAQ_Cat_Detail_303_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse303" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse303" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_Detail_303_text');?>
|
<?= lang('HelpFAQ_Cat_Detail_303_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4><?php echo lang('Navigation_Presence');?></h4>
|
<h4><?= lang('Navigation_Presence');?></h4>
|
||||||
<div class="panel-group" id="accordion_pre">
|
<div class="panel-group" id="accordion_pre">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_pre" href="#collapse400">
|
<a data-toggle="collapse" data-parent="#accordion_pre" href="#collapse400">
|
||||||
<?php echo lang('HelpFAQ_Cat_Presence_400_head');?></a>
|
<?= lang('HelpFAQ_Cat_Presence_400_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse400" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse400" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_Presence_400_text');?>
|
<?= lang('HelpFAQ_Cat_Presence_400_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -179,29 +186,29 @@
|
|||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_pre" href="#collapse401">
|
<a data-toggle="collapse" data-parent="#accordion_pre" href="#collapse401">
|
||||||
<?php echo lang('HelpFAQ_Cat_Presence_401_head');?></a>
|
<?= lang('HelpFAQ_Cat_Presence_401_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse401" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse401" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_Presence_401_text');?>
|
<?= lang('HelpFAQ_Cat_Presence_401_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4><?php echo lang('Navigation_Network');?></h4>
|
<h4><?= lang('Navigation_Network');?></h4>
|
||||||
<div class="panel-group" id="accordion_net">
|
<div class="panel-group" id="accordion_net">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion_net" href="#collapse600">
|
<a data-toggle="collapse" data-parent="#accordion_net" href="#collapse600">
|
||||||
<?php echo lang('HelpFAQ_Cat_Network_600_head');?></a>
|
<?= lang('HelpFAQ_Cat_Network_600_head');?></a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse600" class="panel-collapse collapse" style="font-size: 16px;">
|
<div id="collapse600" class="panel-collapse collapse" style="font-size: 16px;">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php echo lang('HelpFAQ_Cat_Network_600_text');?>
|
<?= lang('HelpFAQ_Cat_Network_600_text');?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
require dirname(__FILE__).'/php/server/init.php';
|
||||||
|
|
||||||
require 'php/templates/language/lang.php';
|
|
||||||
require 'php/templates/skinUI.php';
|
|
||||||
require 'php/templates/security.php';
|
require 'php/templates/security.php';
|
||||||
|
|
||||||
if ($Pia_WebProtection != 'true')
|
if ($Pia_WebProtection != 'true')
|
||||||
@@ -98,10 +95,10 @@ if ($ENABLED_DARKMODE === True) {
|
|||||||
</div>
|
</div>
|
||||||
<!-- /.login-logo -->
|
<!-- /.login-logo -->
|
||||||
<div class="login-box-body">
|
<div class="login-box-body">
|
||||||
<p class="login-box-msg"><?php echo lang('Login_Box');?></p>
|
<p class="login-box-msg"><?= lang('Login_Box');?></p>
|
||||||
<form action="index.php" method="post">
|
<form action="index.php" method="post">
|
||||||
<div class="form-group has-feedback">
|
<div class="form-group has-feedback">
|
||||||
<input type="password" class="form-control" placeholder="<?php echo lang('Login_Psw-box');?>" name="loginpassword">
|
<input type="password" class="form-control" placeholder="<?= lang('Login_Psw-box');?>" name="loginpassword">
|
||||||
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -110,21 +107,21 @@ if ($ENABLED_DARKMODE === True) {
|
|||||||
<label>
|
<label>
|
||||||
<input type="checkbox" name="PWRemember">
|
<input type="checkbox" name="PWRemember">
|
||||||
<div style="margin-left: 10px; display: inline-block; vertical-align: top;">
|
<div style="margin-left: 10px; display: inline-block; vertical-align: top;">
|
||||||
<?php echo lang('Login_Remember');?><br><span style="font-size: smaller"><?php echo lang('Login_Remember_small');?></span>
|
<?= lang('Login_Remember');?><br><span style="font-size: smaller"><?= lang('Login_Remember_small');?></span>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.col -->
|
<!-- /.col -->
|
||||||
<div class="col-xs-4" style="padding-top: 10px;">
|
<div class="col-xs-4" style="padding-top: 10px;">
|
||||||
<button type="submit" class="btn btn-primary btn-block btn-flat"><?php echo lang('Login_Submit');?></button>
|
<button type="submit" class="btn btn-primary btn-block btn-flat"><?= lang('Login_Submit');?></button>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.col -->
|
<!-- /.col -->
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div style="padding-top: 10px;">
|
<div style="padding-top: 10px;">
|
||||||
<button class="btn btn-xs btn-primary btn-block btn-flat" onclick="Passwordhinfo()"><?php echo lang('Login_Toggle_Info');?></button>
|
<button class="btn btn-xs btn-primary btn-block btn-flat" onclick="Passwordhinfo()"><?= lang('Login_Toggle_Info');?></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -137,7 +134,7 @@ if ($ENABLED_DARKMODE === True) {
|
|||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true"><3E></button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true"><3E></button>
|
||||||
<h4><i class="icon fa <?php echo $login_icon;?>"></i><?php echo $login_headline;?></h4>
|
<h4><i class="icon fa <?php echo $login_icon;?>"></i><?php echo $login_headline;?></h4>
|
||||||
<p><?php echo $login_info;?></p>
|
<p><?php echo $login_info;?></p>
|
||||||
<p><?php echo lang('Login_Psw_run');?><br><span style="border: solid 1px yellow; padding: 2px;">./reset_password.sh <?php echo lang('Login_Psw_new');?></span><br><?php echo lang('Login_Psw_folder');?></p>
|
<p><?= lang('Login_Psw_run');?><br><span style="border: solid 1px yellow; padding: 2px;">./reset_password.sh <?= lang('Login_Psw_new');?></span><br><?= lang('Login_Psw_folder');?></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
68
front/js/handle_version.js
Executable file
@@ -0,0 +1,68 @@
|
|||||||
|
function handleVersion(){
|
||||||
|
|
||||||
|
release_timestamp = getCookie("release_timestamp")
|
||||||
|
|
||||||
|
if(release_timestamp != "")
|
||||||
|
{
|
||||||
|
|
||||||
|
build_timestamp = parseInt($('#version').attr("data-build-time").match( /\d+/g ).join(''))
|
||||||
|
|
||||||
|
// if the release_timestamp is older by 10 min or more as the build timestamp then there is a new release available
|
||||||
|
if(release_timestamp > build_timestamp + 600 )
|
||||||
|
{
|
||||||
|
console.log("New release!")
|
||||||
|
// handling the navigation menu icon
|
||||||
|
$('#version').attr("class", $('#version').attr("class").replace("myhidden", ""))
|
||||||
|
|
||||||
|
maintenanceDiv = $('#new-version-text')
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
console.log("All up-to-date!")
|
||||||
|
|
||||||
|
maintenanceDiv = $('#current-version-text')
|
||||||
|
}
|
||||||
|
|
||||||
|
// handling the maintenance section message
|
||||||
|
if(emptyArr.includes(maintenanceDiv) == false && $(maintenanceDiv).length != 0)
|
||||||
|
{
|
||||||
|
$(maintenanceDiv).attr("class", $(maintenanceDiv).attr("class").replace("myhidden", ""))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
function getVersion()
|
||||||
|
{
|
||||||
|
release_timestamp = getCookie("release_timestamp")
|
||||||
|
|
||||||
|
// no cached value available
|
||||||
|
if(release_timestamp == "")
|
||||||
|
{
|
||||||
|
// get parameter value
|
||||||
|
$.get('https://api.github.com/repos/jokob-sk/Pi.Alert/releases', function(data) {
|
||||||
|
|
||||||
|
var releases = data;
|
||||||
|
|
||||||
|
if(releases.length > 0)
|
||||||
|
{
|
||||||
|
release_datetime = releases[0].published_at;
|
||||||
|
release_timestamp = new Date(release_datetime).getTime() / 1000;
|
||||||
|
|
||||||
|
// cache value
|
||||||
|
setCookie("release_timestamp", release_timestamp, 30);
|
||||||
|
|
||||||
|
handleVersion();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
// cache is available, just call the handler
|
||||||
|
handleVersion()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// handle the dispaly of the NEW icon
|
||||||
|
getVersion()
|
||||||
@@ -10,36 +10,46 @@
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
var timerRefreshData = ''
|
var timerRefreshData = ''
|
||||||
var modalCallbackFunction = '';
|
var modalCallbackFunction = '';
|
||||||
|
var emptyArr = ['undefined', "", undefined, null, 'null'];
|
||||||
|
|
||||||
// urlParams = new Proxy(new URLSearchParams(window.location.search), {
|
// urlParams = new Proxy(new URLSearchParams(window.location.search), {
|
||||||
// get: (searchParams, prop) => searchParams.get(prop.toString()),
|
// get: (searchParams, prop) => searchParams.get(prop.toString()),
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Simple session cache withe expiration managed via cookies
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
function getCache(key)
|
function getCache(key)
|
||||||
{
|
{
|
||||||
// check cache
|
// check cache
|
||||||
if(sessionStorage.getItem(key))
|
if(sessionStorage.getItem(key))
|
||||||
{
|
{
|
||||||
return sessionStorage.getItem(key);
|
// check if not expired
|
||||||
} else
|
if(getCookie(key + '_session_expiry') != "")
|
||||||
{
|
{
|
||||||
return "";
|
return sessionStorage.getItem(key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function setCache(key, data)
|
// -----------------------------------------------------------------------------
|
||||||
|
function setCache(key, data, expirationMinutes='')
|
||||||
{
|
{
|
||||||
sessionStorage.setItem(key, data);
|
sessionStorage.setItem(key, data);
|
||||||
|
setCookie (key + '_session_expiry', 'OK', expirationMinutes='')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function setCookie (cookie, value, expirationHours='') {
|
function setCookie (cookie, value, expirationMinutes='') {
|
||||||
// Calc expiration date
|
// Calc expiration date
|
||||||
var expires = '';
|
var expires = '';
|
||||||
if (typeof expirationHours === 'number') {
|
if (typeof expirationMinutes === 'number') {
|
||||||
expires = ';expires=' + new Date(Date.now() + expirationHours *60*60*1000).toUTCString();
|
expires = ';expires=' + new Date(Date.now() + expirationMinutes *60*1000).toUTCString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save Cookie
|
// Save Cookie
|
||||||
document.cookie = cookie + "=" + value + expires;
|
document.cookie = cookie + "=" + value + expires;
|
||||||
@@ -86,7 +96,8 @@ function deleteAllCookies() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Modal dialog handling
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function showModalOk (title, message, callbackFunction = null) {
|
function showModalOk (title, message, callbackFunction = null) {
|
||||||
// set captions
|
// set captions
|
||||||
@@ -116,6 +127,24 @@ function showModalDefault (title, message, btnCancel, btnOK, callbackFunction) {
|
|||||||
$('#modal-default').modal('show');
|
$('#modal-default').modal('show');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function showModalDefaultStrParam (title, message, btnCancel, btnOK, callbackFunction, param='') {
|
||||||
|
// set captions
|
||||||
|
$('#modal-str-title').html (title);
|
||||||
|
$('#modal-str-message').html (message);
|
||||||
|
$('#modal-str-cancel').html (btnCancel);
|
||||||
|
$('#modal-str-OK').html (btnOK);
|
||||||
|
$("#modal-str-OK").off("click"); //remove existing handlers
|
||||||
|
$('#modal-str-OK').on('click', function (){
|
||||||
|
$('#modal-str').modal('hide');
|
||||||
|
callbackFunction(param)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Show modal
|
||||||
|
$('#modal-str').modal('show');
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function showModalWarning (title, message, btnCancel, btnOK, callbackFunction) {
|
function showModalWarning (title, message, btnCancel, btnOK, callbackFunction) {
|
||||||
// set captions
|
// set captions
|
||||||
@@ -151,13 +180,6 @@ function modalWarningOK () {
|
|||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function sanitize(data)
|
|
||||||
{
|
|
||||||
return data.replace(/(\r\n|\n|\r)/gm,"").replace(/[^\x00-\x7F]/g, "")
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function showMessage (textMessage="") {
|
function showMessage (textMessage="") {
|
||||||
if (textMessage.toLowerCase().includes("error") ) {
|
if (textMessage.toLowerCase().includes("error") ) {
|
||||||
@@ -175,6 +197,22 @@ function showMessage (textMessage="") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// General utilities
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// remove unnecessary lines from the result
|
||||||
|
function sanitize(data)
|
||||||
|
{
|
||||||
|
return data.replace(/(\r\n|\n|\r)/gm,"").replace(/[^\x00-\x7F]/g, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function numberArrayFromString(data)
|
||||||
|
{
|
||||||
|
data = JSON.parse(sanitize(data));
|
||||||
|
return data.replace(/\[|\]/g, '').split(',').map(Number);
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function setParameter (parameter, value) {
|
function setParameter (parameter, value) {
|
||||||
// Retry
|
// Retry
|
||||||
@@ -186,18 +224,52 @@ function setParameter (parameter, value) {
|
|||||||
sleep (200);
|
sleep (200);
|
||||||
$.get('php/server/parameters.php?action=set¶meter=' + parameter +
|
$.get('php/server/parameters.php?action=set¶meter=' + parameter +
|
||||||
'&value='+ value,
|
'&value='+ value,
|
||||||
function(data) {
|
function(data) {
|
||||||
if (data != "OK") {
|
if (data != "OK") {
|
||||||
// alert (data);
|
// alert (data);
|
||||||
} else {
|
} else {
|
||||||
// alert ("OK. Second attempt");
|
// alert ("OK. Second attempt");
|
||||||
};
|
};
|
||||||
} );
|
} );
|
||||||
};
|
};
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function saveData(functionName, id, value) {
|
||||||
|
$.ajax({
|
||||||
|
method: "GET",
|
||||||
|
url: "php/server/devices.php",
|
||||||
|
data: { action: functionName, id: id, value:value },
|
||||||
|
success: function(data) {
|
||||||
|
|
||||||
|
if(sanitize(data) == 'OK')
|
||||||
|
{
|
||||||
|
showMessage("Saved")
|
||||||
|
// Remove navigation prompt "Are you sure you want to leave..."
|
||||||
|
window.onbeforeunload = null;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
showMessage("ERROR")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// remove an item from an array
|
||||||
|
function removeItemFromArray(arr, value) {
|
||||||
|
var index = arr.indexOf(value);
|
||||||
|
if (index > -1) {
|
||||||
|
arr.splice(index, 1);
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function sleep(milliseconds) {
|
function sleep(milliseconds) {
|
||||||
const date = Date.now();
|
const date = Date.now();
|
||||||
@@ -207,15 +279,41 @@ function sleep(milliseconds) {
|
|||||||
} while (currentDate - date < milliseconds);
|
} while (currentDate - date < milliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
somethingChanged = false;
|
||||||
|
function settingsChanged()
|
||||||
|
{
|
||||||
|
somethingChanged = true;
|
||||||
|
// Enable navigation prompt ... "Are you sure you want to leave..."
|
||||||
|
window.onbeforeunload = function() {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function getQueryString(key){
|
||||||
|
params = new Proxy(new URLSearchParams(window.location.search), {
|
||||||
|
get: (searchParams, prop) => searchParams.get(prop),
|
||||||
|
});
|
||||||
|
|
||||||
|
tmp = params[key]
|
||||||
|
|
||||||
|
result = emptyArr.includes(tmp) ? "" : tmp;
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function translateHTMLcodes (text) {
|
function translateHTMLcodes (text) {
|
||||||
if (text == null) {
|
if (text == null || emptyArr.includes(text)) {
|
||||||
return null;
|
return null;
|
||||||
|
} else if (typeof text === 'string' || text instanceof String)
|
||||||
|
{
|
||||||
|
var text2 = text.replace(new RegExp(' ', 'g'), " ");
|
||||||
|
text2 = text2.replace(new RegExp('<', 'g'), "<");
|
||||||
|
return text2;
|
||||||
}
|
}
|
||||||
var text2 = text.replace(new RegExp(' ', 'g'), " ");
|
|
||||||
text2 = text2.replace(new RegExp('<', 'g'), "<");
|
return "";
|
||||||
return text2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "font-awesome",
|
|
||||||
"description": "Font Awesome",
|
|
||||||
"keywords": [],
|
|
||||||
"homepage": "http://fontawesome.io",
|
|
||||||
"dependencies": {},
|
|
||||||
"devDependencies": {},
|
|
||||||
"license": [
|
|
||||||
"OFL-1.1",
|
|
||||||
"MIT",
|
|
||||||
"CC-BY-3.0"
|
|
||||||
],
|
|
||||||
"main": [
|
|
||||||
"less/font-awesome.less",
|
|
||||||
"scss/font-awesome.scss"
|
|
||||||
],
|
|
||||||
"ignore": [
|
|
||||||
"*/.*",
|
|
||||||
"*.json",
|
|
||||||
"src",
|
|
||||||
"*.yml",
|
|
||||||
"Gemfile",
|
|
||||||
"Gemfile.lock",
|
|
||||||
"*.md"
|
|
||||||
],
|
|
||||||
"version": "4.7.0",
|
|
||||||
"_release": "4.7.0",
|
|
||||||
"_resolution": {
|
|
||||||
"type": "version",
|
|
||||||
"tag": "v4.7.0",
|
|
||||||
"commit": "a3fe90fa5f6fac55d197f9cbd18e3f57dafb716c"
|
|
||||||
},
|
|
||||||
"_source": "https://github.com/FortAwesome/Font-Awesome.git",
|
|
||||||
"_target": "^4.7",
|
|
||||||
"_originalSource": "font-awesome"
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
*.pyc
|
|
||||||
*.egg-info
|
|
||||||
*.db
|
|
||||||
*.db.old
|
|
||||||
*.swp
|
|
||||||
*.db-journal
|
|
||||||
|
|
||||||
.coverage
|
|
||||||
.DS_Store
|
|
||||||
.installed.cfg
|
|
||||||
_gh_pages/*
|
|
||||||
|
|
||||||
.idea/*
|
|
||||||
.svn/*
|
|
||||||
src/website/static/*
|
|
||||||
src/website/media/*
|
|
||||||
|
|
||||||
bin
|
|
||||||
cfcache
|
|
||||||
develop-eggs
|
|
||||||
dist
|
|
||||||
downloads
|
|
||||||
eggs
|
|
||||||
parts
|
|
||||||
tmp
|
|
||||||
.sass-cache
|
|
||||||
node_modules
|
|
||||||
|
|
||||||
src/website/settingslocal.py
|
|
||||||
stunnel.log
|
|
||||||
|
|
||||||
.ruby-version
|
|
||||||
|
|
||||||
# don't need these in the npm package.
|
|
||||||
src/
|
|
||||||
_config.yml
|
|
||||||
bower.json
|
|
||||||
component.json
|
|
||||||
composer.json
|
|
||||||
CONTRIBUTING.md
|
|
||||||
Gemfile
|
|
||||||
Gemfile.lock
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
|
|
||||||
Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
|
|
||||||
comprehensive icon sets or copy and paste your own.
|
|
||||||
|
|
||||||
Please. Check it out.
|
|
||||||
|
|
||||||
-Dave Gandy
|
|
||||||
165
front/lib/AdminLTE/bower_components/font-awesome/LICENSE.txt
vendored
Executable file
@@ -0,0 +1,165 @@
|
|||||||
|
Fonticons, Inc. (https://fontawesome.com)
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Font Awesome Free License
|
||||||
|
|
||||||
|
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||||
|
commercial projects, open source projects, or really almost whatever you want.
|
||||||
|
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
||||||
|
|
||||||
|
The Font Awesome Free download is licensed under a Creative Commons
|
||||||
|
Attribution 4.0 International License and applies to all icons packaged
|
||||||
|
as SVG and JS file types.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Fonts: SIL OFL 1.1 License
|
||||||
|
|
||||||
|
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||||
|
packaged as web and desktop font files.
|
||||||
|
|
||||||
|
Copyright (c) 2022 Fonticons, Inc. (https://fontawesome.com)
|
||||||
|
with Reserved Font Name: "Font Awesome".
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
SIL OPEN FONT LICENSE
|
||||||
|
Version 1.1 - 26 February 2007
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting — in part or in whole — any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Code: MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
|
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||||
|
non-icon files.
|
||||||
|
|
||||||
|
Copyright 2022 Fonticons, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in the
|
||||||
|
Software without restriction, including without limitation the rights to use, copy,
|
||||||
|
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
and to permit persons to whom the Software is furnished to do so, subject to the
|
||||||
|
following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Attribution
|
||||||
|
|
||||||
|
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
||||||
|
Awesome Free files already contain embedded comments with sufficient
|
||||||
|
attribution, so you shouldn't need to do anything additional when using these
|
||||||
|
files normally.
|
||||||
|
|
||||||
|
We've kept attribution comments terse, so we ask that you do not actively work
|
||||||
|
to remove them from files, especially code. They're a great way for folks to
|
||||||
|
learn about Font Awesome.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Brand Icons
|
||||||
|
|
||||||
|
All brand icons are trademarks of their respective owners. The use of these
|
||||||
|
trademarks does not indicate endorsement of the trademark holder by Font
|
||||||
|
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||||
|
to represent the company, product, or service to which they refer.**
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "font-awesome",
|
|
||||||
"description": "Font Awesome",
|
|
||||||
"keywords": [],
|
|
||||||
"homepage": "http://fontawesome.io",
|
|
||||||
"dependencies": {},
|
|
||||||
"devDependencies": {},
|
|
||||||
"license": ["OFL-1.1", "MIT", "CC-BY-3.0"],
|
|
||||||
"main": [
|
|
||||||
"less/font-awesome.less",
|
|
||||||
"scss/font-awesome.scss"
|
|
||||||
],
|
|
||||||
"ignore": [
|
|
||||||
"*/.*",
|
|
||||||
"*.json",
|
|
||||||
"src",
|
|
||||||
"*.yml",
|
|
||||||
"Gemfile",
|
|
||||||
"Gemfile.lock",
|
|
||||||
"*.md"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
7946
front/lib/AdminLTE/bower_components/font-awesome/css/all.css
vendored
Executable file
6
front/lib/AdminLTE/bower_components/font-awesome/css/all.min.css
vendored
Executable file
1516
front/lib/AdminLTE/bower_components/font-awesome/css/brands.css
vendored
Executable file
6
front/lib/AdminLTE/bower_components/font-awesome/css/brands.min.css
vendored
Executable file
6369
front/lib/AdminLTE/bower_components/font-awesome/css/fontawesome.css
vendored
Executable file
6
front/lib/AdminLTE/bower_components/font-awesome/css/fontawesome.min.css
vendored
Executable file
19
front/lib/AdminLTE/bower_components/font-awesome/css/regular.css
vendored
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:root, :host {
|
||||||
|
--fa-style-family-classic: 'Font Awesome 6 Free';
|
||||||
|
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
.far,
|
||||||
|
.fa-regular {
|
||||||
|
font-weight: 400; }
|
||||||
6
front/lib/AdminLTE/bower_components/font-awesome/css/regular.min.css
vendored
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
|
||||||
19
front/lib/AdminLTE/bower_components/font-awesome/css/solid.css
vendored
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:root, :host {
|
||||||
|
--fa-style-family-classic: 'Font Awesome 6 Free';
|
||||||
|
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 900;
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
.fas,
|
||||||
|
.fa-solid {
|
||||||
|
font-weight: 900; }
|
||||||
6
front/lib/AdminLTE/bower_components/font-awesome/css/solid.min.css
vendored
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
|
||||||
635
front/lib/AdminLTE/bower_components/font-awesome/css/svg-with-js.css
vendored
Executable file
@@ -0,0 +1,635 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:root, :host {
|
||||||
|
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid';
|
||||||
|
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular';
|
||||||
|
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Light';
|
||||||
|
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin';
|
||||||
|
--fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
|
||||||
|
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
|
||||||
|
--fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
|
||||||
|
|
||||||
|
svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
|
||||||
|
overflow: visible;
|
||||||
|
box-sizing: content-box; }
|
||||||
|
|
||||||
|
.svg-inline--fa {
|
||||||
|
display: var(--fa-display, inline-block);
|
||||||
|
height: 1em;
|
||||||
|
overflow: visible;
|
||||||
|
vertical-align: -.125em; }
|
||||||
|
.svg-inline--fa.fa-2xs {
|
||||||
|
vertical-align: 0.1em; }
|
||||||
|
.svg-inline--fa.fa-xs {
|
||||||
|
vertical-align: 0em; }
|
||||||
|
.svg-inline--fa.fa-sm {
|
||||||
|
vertical-align: -0.07143em; }
|
||||||
|
.svg-inline--fa.fa-lg {
|
||||||
|
vertical-align: -0.2em; }
|
||||||
|
.svg-inline--fa.fa-xl {
|
||||||
|
vertical-align: -0.25em; }
|
||||||
|
.svg-inline--fa.fa-2xl {
|
||||||
|
vertical-align: -0.3125em; }
|
||||||
|
.svg-inline--fa.fa-pull-left {
|
||||||
|
margin-right: var(--fa-pull-margin, 0.3em);
|
||||||
|
width: auto; }
|
||||||
|
.svg-inline--fa.fa-pull-right {
|
||||||
|
margin-left: var(--fa-pull-margin, 0.3em);
|
||||||
|
width: auto; }
|
||||||
|
.svg-inline--fa.fa-li {
|
||||||
|
width: var(--fa-li-width, 2em);
|
||||||
|
top: 0.25em; }
|
||||||
|
.svg-inline--fa.fa-fw {
|
||||||
|
width: var(--fa-fw-width, 1.25em); }
|
||||||
|
|
||||||
|
.fa-layers svg.svg-inline--fa {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: auto;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0; }
|
||||||
|
|
||||||
|
.fa-layers-text, .fa-layers-counter {
|
||||||
|
display: inline-block;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center; }
|
||||||
|
|
||||||
|
.fa-layers {
|
||||||
|
display: inline-block;
|
||||||
|
height: 1em;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: -.125em;
|
||||||
|
width: 1em; }
|
||||||
|
.fa-layers svg.svg-inline--fa {
|
||||||
|
-webkit-transform-origin: center center;
|
||||||
|
transform-origin: center center; }
|
||||||
|
|
||||||
|
.fa-layers-text {
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
-webkit-transform: translate(-50%, -50%);
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
-webkit-transform-origin: center center;
|
||||||
|
transform-origin: center center; }
|
||||||
|
|
||||||
|
.fa-layers-counter {
|
||||||
|
background-color: var(--fa-counter-background-color, #ff253a);
|
||||||
|
border-radius: var(--fa-counter-border-radius, 1em);
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: var(--fa-inverse, #fff);
|
||||||
|
line-height: var(--fa-counter-line-height, 1);
|
||||||
|
max-width: var(--fa-counter-max-width, 5em);
|
||||||
|
min-width: var(--fa-counter-min-width, 1.5em);
|
||||||
|
overflow: hidden;
|
||||||
|
padding: var(--fa-counter-padding, 0.25em 0.5em);
|
||||||
|
right: var(--fa-right, 0);
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
top: var(--fa-top, 0);
|
||||||
|
-webkit-transform: scale(var(--fa-counter-scale, 0.25));
|
||||||
|
transform: scale(var(--fa-counter-scale, 0.25));
|
||||||
|
-webkit-transform-origin: top right;
|
||||||
|
transform-origin: top right; }
|
||||||
|
|
||||||
|
.fa-layers-bottom-right {
|
||||||
|
bottom: var(--fa-bottom, 0);
|
||||||
|
right: var(--fa-right, 0);
|
||||||
|
top: auto;
|
||||||
|
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
-webkit-transform-origin: bottom right;
|
||||||
|
transform-origin: bottom right; }
|
||||||
|
|
||||||
|
.fa-layers-bottom-left {
|
||||||
|
bottom: var(--fa-bottom, 0);
|
||||||
|
left: var(--fa-left, 0);
|
||||||
|
right: auto;
|
||||||
|
top: auto;
|
||||||
|
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
-webkit-transform-origin: bottom left;
|
||||||
|
transform-origin: bottom left; }
|
||||||
|
|
||||||
|
.fa-layers-top-right {
|
||||||
|
top: var(--fa-top, 0);
|
||||||
|
right: var(--fa-right, 0);
|
||||||
|
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
-webkit-transform-origin: top right;
|
||||||
|
transform-origin: top right; }
|
||||||
|
|
||||||
|
.fa-layers-top-left {
|
||||||
|
left: var(--fa-left, 0);
|
||||||
|
right: auto;
|
||||||
|
top: var(--fa-top, 0);
|
||||||
|
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
transform: scale(var(--fa-layers-scale, 0.25));
|
||||||
|
-webkit-transform-origin: top left;
|
||||||
|
transform-origin: top left; }
|
||||||
|
|
||||||
|
.fa-1x {
|
||||||
|
font-size: 1em; }
|
||||||
|
|
||||||
|
.fa-2x {
|
||||||
|
font-size: 2em; }
|
||||||
|
|
||||||
|
.fa-3x {
|
||||||
|
font-size: 3em; }
|
||||||
|
|
||||||
|
.fa-4x {
|
||||||
|
font-size: 4em; }
|
||||||
|
|
||||||
|
.fa-5x {
|
||||||
|
font-size: 5em; }
|
||||||
|
|
||||||
|
.fa-6x {
|
||||||
|
font-size: 6em; }
|
||||||
|
|
||||||
|
.fa-7x {
|
||||||
|
font-size: 7em; }
|
||||||
|
|
||||||
|
.fa-8x {
|
||||||
|
font-size: 8em; }
|
||||||
|
|
||||||
|
.fa-9x {
|
||||||
|
font-size: 9em; }
|
||||||
|
|
||||||
|
.fa-10x {
|
||||||
|
font-size: 10em; }
|
||||||
|
|
||||||
|
.fa-2xs {
|
||||||
|
font-size: 0.625em;
|
||||||
|
line-height: 0.1em;
|
||||||
|
vertical-align: 0.225em; }
|
||||||
|
|
||||||
|
.fa-xs {
|
||||||
|
font-size: 0.75em;
|
||||||
|
line-height: 0.08333em;
|
||||||
|
vertical-align: 0.125em; }
|
||||||
|
|
||||||
|
.fa-sm {
|
||||||
|
font-size: 0.875em;
|
||||||
|
line-height: 0.07143em;
|
||||||
|
vertical-align: 0.05357em; }
|
||||||
|
|
||||||
|
.fa-lg {
|
||||||
|
font-size: 1.25em;
|
||||||
|
line-height: 0.05em;
|
||||||
|
vertical-align: -0.075em; }
|
||||||
|
|
||||||
|
.fa-xl {
|
||||||
|
font-size: 1.5em;
|
||||||
|
line-height: 0.04167em;
|
||||||
|
vertical-align: -0.125em; }
|
||||||
|
|
||||||
|
.fa-2xl {
|
||||||
|
font-size: 2em;
|
||||||
|
line-height: 0.03125em;
|
||||||
|
vertical-align: -0.1875em; }
|
||||||
|
|
||||||
|
.fa-fw {
|
||||||
|
text-align: center;
|
||||||
|
width: 1.25em; }
|
||||||
|
|
||||||
|
.fa-ul {
|
||||||
|
list-style-type: none;
|
||||||
|
margin-left: var(--fa-li-margin, 2.5em);
|
||||||
|
padding-left: 0; }
|
||||||
|
.fa-ul > li {
|
||||||
|
position: relative; }
|
||||||
|
|
||||||
|
.fa-li {
|
||||||
|
left: calc(var(--fa-li-width, 2em) * -1);
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
width: var(--fa-li-width, 2em);
|
||||||
|
line-height: inherit; }
|
||||||
|
|
||||||
|
.fa-border {
|
||||||
|
border-color: var(--fa-border-color, #eee);
|
||||||
|
border-radius: var(--fa-border-radius, 0.1em);
|
||||||
|
border-style: var(--fa-border-style, solid);
|
||||||
|
border-width: var(--fa-border-width, 0.08em);
|
||||||
|
padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
|
||||||
|
|
||||||
|
.fa-pull-left {
|
||||||
|
float: left;
|
||||||
|
margin-right: var(--fa-pull-margin, 0.3em); }
|
||||||
|
|
||||||
|
.fa-pull-right {
|
||||||
|
float: right;
|
||||||
|
margin-left: var(--fa-pull-margin, 0.3em); }
|
||||||
|
|
||||||
|
.fa-beat {
|
||||||
|
-webkit-animation-name: fa-beat;
|
||||||
|
animation-name: fa-beat;
|
||||||
|
-webkit-animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
|
||||||
|
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
|
||||||
|
|
||||||
|
.fa-bounce {
|
||||||
|
-webkit-animation-name: fa-bounce;
|
||||||
|
animation-name: fa-bounce;
|
||||||
|
-webkit-animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
|
||||||
|
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
|
||||||
|
|
||||||
|
.fa-fade {
|
||||||
|
-webkit-animation-name: fa-fade;
|
||||||
|
animation-name: fa-fade;
|
||||||
|
-webkit-animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
|
||||||
|
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
|
||||||
|
|
||||||
|
.fa-beat-fade {
|
||||||
|
-webkit-animation-name: fa-beat-fade;
|
||||||
|
animation-name: fa-beat-fade;
|
||||||
|
-webkit-animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
|
||||||
|
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
|
||||||
|
|
||||||
|
.fa-flip {
|
||||||
|
-webkit-animation-name: fa-flip;
|
||||||
|
animation-name: fa-flip;
|
||||||
|
-webkit-animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
|
||||||
|
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
|
||||||
|
|
||||||
|
.fa-shake {
|
||||||
|
-webkit-animation-name: fa-shake;
|
||||||
|
animation-name: fa-shake;
|
||||||
|
-webkit-animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
|
||||||
|
animation-timing-function: var(--fa-animation-timing, linear); }
|
||||||
|
|
||||||
|
.fa-spin {
|
||||||
|
-webkit-animation-name: fa-spin;
|
||||||
|
animation-name: fa-spin;
|
||||||
|
-webkit-animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
animation-delay: var(--fa-animation-delay, 0s);
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 2s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 2s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
|
||||||
|
animation-timing-function: var(--fa-animation-timing, linear); }
|
||||||
|
|
||||||
|
.fa-spin-reverse {
|
||||||
|
--fa-animation-direction: reverse; }
|
||||||
|
|
||||||
|
.fa-pulse,
|
||||||
|
.fa-spin-pulse {
|
||||||
|
-webkit-animation-name: fa-spin;
|
||||||
|
animation-name: fa-spin;
|
||||||
|
-webkit-animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
animation-direction: var(--fa-animation-direction, normal);
|
||||||
|
-webkit-animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
animation-duration: var(--fa-animation-duration, 1s);
|
||||||
|
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
|
||||||
|
-webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
|
||||||
|
animation-timing-function: var(--fa-animation-timing, steps(8)); }
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.fa-beat,
|
||||||
|
.fa-bounce,
|
||||||
|
.fa-fade,
|
||||||
|
.fa-beat-fade,
|
||||||
|
.fa-flip,
|
||||||
|
.fa-pulse,
|
||||||
|
.fa-shake,
|
||||||
|
.fa-spin,
|
||||||
|
.fa-spin-pulse {
|
||||||
|
-webkit-animation-delay: -1ms;
|
||||||
|
animation-delay: -1ms;
|
||||||
|
-webkit-animation-duration: 1ms;
|
||||||
|
animation-duration: 1ms;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
transition-delay: 0s;
|
||||||
|
transition-duration: 0s; } }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-beat {
|
||||||
|
0%, 90% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
transform: scale(1); }
|
||||||
|
45% {
|
||||||
|
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
|
||||||
|
transform: scale(var(--fa-beat-scale, 1.25)); } }
|
||||||
|
|
||||||
|
@keyframes fa-beat {
|
||||||
|
0%, 90% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
transform: scale(1); }
|
||||||
|
45% {
|
||||||
|
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
|
||||||
|
transform: scale(var(--fa-beat-scale, 1.25)); } }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-bounce {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(0);
|
||||||
|
transform: scale(1, 1) translateY(0); }
|
||||||
|
10% {
|
||||||
|
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
|
||||||
|
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
|
||||||
|
30% {
|
||||||
|
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
|
||||||
|
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
|
||||||
|
50% {
|
||||||
|
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
|
||||||
|
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
|
||||||
|
57% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
|
||||||
|
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
|
||||||
|
64% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(0);
|
||||||
|
transform: scale(1, 1) translateY(0); }
|
||||||
|
100% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(0);
|
||||||
|
transform: scale(1, 1) translateY(0); } }
|
||||||
|
|
||||||
|
@keyframes fa-bounce {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(0);
|
||||||
|
transform: scale(1, 1) translateY(0); }
|
||||||
|
10% {
|
||||||
|
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
|
||||||
|
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
|
||||||
|
30% {
|
||||||
|
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
|
||||||
|
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
|
||||||
|
50% {
|
||||||
|
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
|
||||||
|
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
|
||||||
|
57% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
|
||||||
|
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
|
||||||
|
64% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(0);
|
||||||
|
transform: scale(1, 1) translateY(0); }
|
||||||
|
100% {
|
||||||
|
-webkit-transform: scale(1, 1) translateY(0);
|
||||||
|
transform: scale(1, 1) translateY(0); } }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-fade {
|
||||||
|
50% {
|
||||||
|
opacity: var(--fa-fade-opacity, 0.4); } }
|
||||||
|
|
||||||
|
@keyframes fa-fade {
|
||||||
|
50% {
|
||||||
|
opacity: var(--fa-fade-opacity, 0.4); } }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-beat-fade {
|
||||||
|
0%, 100% {
|
||||||
|
opacity: var(--fa-beat-fade-opacity, 0.4);
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
transform: scale(1); }
|
||||||
|
50% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
|
||||||
|
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
|
||||||
|
|
||||||
|
@keyframes fa-beat-fade {
|
||||||
|
0%, 100% {
|
||||||
|
opacity: var(--fa-beat-fade-opacity, 0.4);
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
transform: scale(1); }
|
||||||
|
50% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
|
||||||
|
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-flip {
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
|
||||||
|
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
|
||||||
|
|
||||||
|
@keyframes fa-flip {
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
|
||||||
|
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-shake {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(-15deg);
|
||||||
|
transform: rotate(-15deg); }
|
||||||
|
4% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg); }
|
||||||
|
8%, 24% {
|
||||||
|
-webkit-transform: rotate(-18deg);
|
||||||
|
transform: rotate(-18deg); }
|
||||||
|
12%, 28% {
|
||||||
|
-webkit-transform: rotate(18deg);
|
||||||
|
transform: rotate(18deg); }
|
||||||
|
16% {
|
||||||
|
-webkit-transform: rotate(-22deg);
|
||||||
|
transform: rotate(-22deg); }
|
||||||
|
20% {
|
||||||
|
-webkit-transform: rotate(22deg);
|
||||||
|
transform: rotate(22deg); }
|
||||||
|
32% {
|
||||||
|
-webkit-transform: rotate(-12deg);
|
||||||
|
transform: rotate(-12deg); }
|
||||||
|
36% {
|
||||||
|
-webkit-transform: rotate(12deg);
|
||||||
|
transform: rotate(12deg); }
|
||||||
|
40%, 100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg); } }
|
||||||
|
|
||||||
|
@keyframes fa-shake {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(-15deg);
|
||||||
|
transform: rotate(-15deg); }
|
||||||
|
4% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg); }
|
||||||
|
8%, 24% {
|
||||||
|
-webkit-transform: rotate(-18deg);
|
||||||
|
transform: rotate(-18deg); }
|
||||||
|
12%, 28% {
|
||||||
|
-webkit-transform: rotate(18deg);
|
||||||
|
transform: rotate(18deg); }
|
||||||
|
16% {
|
||||||
|
-webkit-transform: rotate(-22deg);
|
||||||
|
transform: rotate(-22deg); }
|
||||||
|
20% {
|
||||||
|
-webkit-transform: rotate(22deg);
|
||||||
|
transform: rotate(22deg); }
|
||||||
|
32% {
|
||||||
|
-webkit-transform: rotate(-12deg);
|
||||||
|
transform: rotate(-12deg); }
|
||||||
|
36% {
|
||||||
|
-webkit-transform: rotate(12deg);
|
||||||
|
transform: rotate(12deg); }
|
||||||
|
40%, 100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg); } }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg); }
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg); } }
|
||||||
|
|
||||||
|
@keyframes fa-spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg); }
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg); } }
|
||||||
|
|
||||||
|
.fa-rotate-90 {
|
||||||
|
-webkit-transform: rotate(90deg);
|
||||||
|
transform: rotate(90deg); }
|
||||||
|
|
||||||
|
.fa-rotate-180 {
|
||||||
|
-webkit-transform: rotate(180deg);
|
||||||
|
transform: rotate(180deg); }
|
||||||
|
|
||||||
|
.fa-rotate-270 {
|
||||||
|
-webkit-transform: rotate(270deg);
|
||||||
|
transform: rotate(270deg); }
|
||||||
|
|
||||||
|
.fa-flip-horizontal {
|
||||||
|
-webkit-transform: scale(-1, 1);
|
||||||
|
transform: scale(-1, 1); }
|
||||||
|
|
||||||
|
.fa-flip-vertical {
|
||||||
|
-webkit-transform: scale(1, -1);
|
||||||
|
transform: scale(1, -1); }
|
||||||
|
|
||||||
|
.fa-flip-both,
|
||||||
|
.fa-flip-horizontal.fa-flip-vertical {
|
||||||
|
-webkit-transform: scale(-1, -1);
|
||||||
|
transform: scale(-1, -1); }
|
||||||
|
|
||||||
|
.fa-rotate-by {
|
||||||
|
-webkit-transform: rotate(var(--fa-rotate-angle, none));
|
||||||
|
transform: rotate(var(--fa-rotate-angle, none)); }
|
||||||
|
|
||||||
|
.fa-stack {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 2em;
|
||||||
|
position: relative;
|
||||||
|
width: 2.5em; }
|
||||||
|
|
||||||
|
.fa-stack-1x,
|
||||||
|
.fa-stack-2x {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: auto;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
z-index: var(--fa-stack-z-index, auto); }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-stack-1x {
|
||||||
|
height: 1em;
|
||||||
|
width: 1.25em; }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-stack-2x {
|
||||||
|
height: 2em;
|
||||||
|
width: 2.5em; }
|
||||||
|
|
||||||
|
.fa-inverse {
|
||||||
|
color: var(--fa-inverse, #fff); }
|
||||||
|
|
||||||
|
.sr-only,
|
||||||
|
.fa-sr-only {
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
padding: 0;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
white-space: nowrap;
|
||||||
|
border-width: 0; }
|
||||||
|
|
||||||
|
.sr-only-focusable:not(:focus),
|
||||||
|
.fa-sr-only-focusable:not(:focus) {
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
padding: 0;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
white-space: nowrap;
|
||||||
|
border-width: 0; }
|
||||||
|
|
||||||
|
.svg-inline--fa .fa-primary {
|
||||||
|
fill: var(--fa-primary-color, currentColor);
|
||||||
|
opacity: var(--fa-primary-opacity, 1); }
|
||||||
|
|
||||||
|
.svg-inline--fa .fa-secondary {
|
||||||
|
fill: var(--fa-secondary-color, currentColor);
|
||||||
|
opacity: var(--fa-secondary-opacity, 0.4); }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-swap-opacity .fa-primary {
|
||||||
|
opacity: var(--fa-secondary-opacity, 0.4); }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-swap-opacity .fa-secondary {
|
||||||
|
opacity: var(--fa-primary-opacity, 1); }
|
||||||
|
|
||||||
|
.svg-inline--fa mask .fa-primary,
|
||||||
|
.svg-inline--fa mask .fa-secondary {
|
||||||
|
fill: black; }
|
||||||
|
|
||||||
|
.fad.fa-inverse,
|
||||||
|
.fa-duotone.fa-inverse {
|
||||||
|
color: var(--fa-inverse, #fff); }
|
||||||
6
front/lib/AdminLTE/bower_components/font-awesome/css/svg-with-js.min.css
vendored
Executable file
26
front/lib/AdminLTE/bower_components/font-awesome/css/v4-font-face.css
vendored
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: 'FontAwesome';
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'FontAwesome';
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'FontAwesome';
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
|
||||||
|
unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'FontAwesome';
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
|
||||||
|
unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }
|
||||||
6
front/lib/AdminLTE/bower_components/font-awesome/css/v4-font-face.min.css
vendored
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}
|
||||||
2194
front/lib/AdminLTE/bower_components/font-awesome/css/v4-shims.css
vendored
Executable file
6
front/lib/AdminLTE/bower_components/font-awesome/css/v4-shims.min.css
vendored
Executable file
22
front/lib/AdminLTE/bower_components/font-awesome/css/v5-font-face.css
vendored
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 5 Brands';
|
||||||
|
font-display: block;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 5 Free';
|
||||||
|
font-display: block;
|
||||||
|
font-weight: 900;
|
||||||
|
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 5 Free';
|
||||||
|
font-display: block;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
|
||||||
6
front/lib/AdminLTE/bower_components/font-awesome/css/v5-font-face.min.css
vendored
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}
|
||||||
|
Before Width: | Height: | Size: 434 KiB |
152
front/lib/AdminLTE/bower_components/font-awesome/less/_animated.less
vendored
Executable file
@@ -0,0 +1,152 @@
|
|||||||
|
// animating icons
|
||||||
|
// --------------------------
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-beat {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-beat';
|
||||||
|
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-bounce {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-beat';
|
||||||
|
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1))';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-fade {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-fade';
|
||||||
|
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-beat-fade {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-beat-fade';
|
||||||
|
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-flip {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-flip';
|
||||||
|
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-shake {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-shake';
|
||||||
|
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-spin {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-spin';
|
||||||
|
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 2s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-spin-reverse {
|
||||||
|
--@{fa-css-prefix}-animation-direction: reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-pulse,
|
||||||
|
.@{fa-css-prefix}-spin-pulse {
|
||||||
|
animation-name: ~'@{fa-css-prefix}-spin';
|
||||||
|
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
|
||||||
|
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
|
||||||
|
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
|
||||||
|
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, steps(8));';
|
||||||
|
}
|
||||||
|
|
||||||
|
// if agent or operating system prefers reduced motion, disable animations
|
||||||
|
// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
|
||||||
|
// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.@{fa-css-prefix}-beat,
|
||||||
|
.@{fa-css-prefix}-bounce,
|
||||||
|
.@{fa-css-prefix}-fade,
|
||||||
|
.@{fa-css-prefix}-beat-fade,
|
||||||
|
.@{fa-css-prefix}-flip,
|
||||||
|
.@{fa-css-prefix}-pulse,
|
||||||
|
.@{fa-css-prefix}-shake,
|
||||||
|
.@{fa-css-prefix}-spin,
|
||||||
|
.@{fa-css-prefix}-spin-pulse {
|
||||||
|
animation-delay: -1ms;
|
||||||
|
animation-duration: 1ms;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
transition-delay: 0s;
|
||||||
|
transition-duration: 0s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ~'@{fa-css-prefix}-beat' {
|
||||||
|
0%, 90% { transform: scale(1); }
|
||||||
|
45% { transform: ~'scale(var(--@{fa-css-prefix}-beat-scale, 1.25))'; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ~'@{fa-css-prefix}-bounce' {
|
||||||
|
0% { transform: scale(1,1) translateY(0); }
|
||||||
|
10% { transform: ~'scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9))' translateY(0); }
|
||||||
|
30% { transform: ~'scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1))' ~'translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em))'; }
|
||||||
|
50% { transform: ~'scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95))' translateY(0); }
|
||||||
|
57% { transform: ~'scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em))'; }
|
||||||
|
64% { transform: scale(1,1) translateY(0); }
|
||||||
|
100% { transform: scale(1,1) translateY(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ~'@{fa-css-prefix}-fade' {
|
||||||
|
50% { opacity: ~'var(--@{fa-css-prefix}-fade-opacity, 0.4)'; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ~'@{fa-css-prefix}-beat-fade' {
|
||||||
|
0%, 100% {
|
||||||
|
opacity: ~'var(--@{fa-css-prefix}-beat-fade-opacity, 0.4)';
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 1;
|
||||||
|
transform: ~'scale(var(--@{fa-css-prefix}-beat-fade-scale, 1.125))';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ~'@{fa-css-prefix}-flip' {
|
||||||
|
50% {
|
||||||
|
transform: ~'rotate3d(var(--@{fa-css-prefix}-flip-x, 0), var(--@{fa-css-prefix}-flip-y, 1), var(--@{fa-css-prefix}-flip-z, 0), var(--@{fa-css-prefix}-flip-angle, -180deg))';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ~'@{fa-css-prefix}-shake' {
|
||||||
|
0% { transform: rotate(-15deg); }
|
||||||
|
4% { transform: rotate(15deg); }
|
||||||
|
8%, 24% { transform: rotate(-18deg); }
|
||||||
|
12%, 28% { transform: rotate(18deg); }
|
||||||
|
16% { transform: rotate(-22deg); }
|
||||||
|
20% { transform: rotate(22deg); }
|
||||||
|
32% { transform: rotate(-12deg); }
|
||||||
|
36% { transform: rotate(12deg); }
|
||||||
|
40%, 100% { transform: rotate(0deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ~'@{fa-css-prefix}-spin' {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
20
front/lib/AdminLTE/bower_components/font-awesome/less/_bordered-pulled.less
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
// bordered + pulled icons
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-border {
|
||||||
|
border-color: ~'var(--@{fa-css-prefix}-border-color, @{fa-border-color})';
|
||||||
|
border-radius: ~'var(--@{fa-css-prefix}-border-radius, @{fa-border-radius})';
|
||||||
|
border-style: ~'var(--@{fa-css-prefix}-border-style, @{fa-border-style})';
|
||||||
|
border-width: ~'var(--@{fa-css-prefix}-border-width, @{fa-border-width})';
|
||||||
|
padding: ~'var(--@{fa-css-prefix}-border-padding, @{fa-border-padding})';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-pull-left {
|
||||||
|
float: left;
|
||||||
|
margin-right: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-pull-right {
|
||||||
|
float: right;
|
||||||
|
margin-left: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
|
||||||
|
}
|
||||||
38
front/lib/AdminLTE/bower_components/font-awesome/less/_core.less
vendored
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
// base icon class definition
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
.@{fa-css-prefix} {
|
||||||
|
font-family: ~"var(--@{fa-css-prefix}-style-family, '@{fa-style-family}')";
|
||||||
|
font-weight: ~'var(--@{fa-css-prefix}-style, @{fa-style})';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix},
|
||||||
|
.fas,
|
||||||
|
.@{fa-css-prefix}-solid,
|
||||||
|
.fass,
|
||||||
|
.@{fa-css-prefix}-sharp,
|
||||||
|
.far,
|
||||||
|
.@{fa-css-prefix}-regular,
|
||||||
|
.fab,
|
||||||
|
.@{fa-css-prefix}-brands {
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
display: ~'var(--@{fa-css-prefix}-display, @{fa-display})';
|
||||||
|
font-style: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
text-rendering: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fas,
|
||||||
|
.@{fa-css-prefix}-classic,
|
||||||
|
.@{fa-css-prefix}-solid,
|
||||||
|
.far,
|
||||||
|
.@{fa-css-prefix}-regular {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
}
|
||||||
|
|
||||||
|
.fab,
|
||||||
|
.@{fa-css-prefix}-brands {
|
||||||
|
font-family: 'Font Awesome 6 Brands';
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
// Fixed Width Icons
|
// fixed-width icons
|
||||||
// -------------------------
|
// -------------------------
|
||||||
|
|
||||||
.@{fa-css-prefix}-fw {
|
.@{fa-css-prefix}-fw {
|
||||||
width: (18em / 14);
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
width: @fa-fw-width;
|
||||||
}
|
}
|
||||||
9
front/lib/AdminLTE/bower_components/font-awesome/less/_icons.less
vendored
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
// specific icon class definition
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
|
||||||
|
readers do not read off random characters that represent icons */
|
||||||
|
|
||||||
|
each(.fa-icons(), {
|
||||||
|
.@{fa-css-prefix}-@{key}::before { content: @value; }
|
||||||
|
});
|
||||||
18
front/lib/AdminLTE/bower_components/font-awesome/less/_list.less
vendored
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
// icons in a list
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-ul {
|
||||||
|
list-style-type: none;
|
||||||
|
margin-left: ~'var(--@{fa-css-prefix}-li-margin, @{fa-li-margin})';
|
||||||
|
padding-left: 0;
|
||||||
|
|
||||||
|
> li { position: relative; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-li {
|
||||||
|
left: calc(~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})' * -1);
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
width: ~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})';
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
78
front/lib/AdminLTE/bower_components/font-awesome/less/_mixins.less
vendored
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
// mixins
|
||||||
|
// --------------------------
|
||||||
|
|
||||||
|
// base rendering for an icon
|
||||||
|
.fa-icon() {
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
display: inline-block;
|
||||||
|
font-style: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets relative font-sizing and alignment (in _sizing)
|
||||||
|
.fa-size(@font-size) {
|
||||||
|
font-size: (@font-size / @fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
|
||||||
|
line-height: (1 / @font-size) * 1em; // sets the line-height of the icon back to that of it's parent
|
||||||
|
vertical-align: ((6 / @font-size) - (3 / 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
|
||||||
|
}
|
||||||
|
|
||||||
|
// only display content to screen readers
|
||||||
|
// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
|
||||||
|
// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
|
||||||
|
.fa-sr-only() {
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
padding: 0;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
white-space: nowrap;
|
||||||
|
border-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// use in conjunction with .sr-only to only display content when it's focused
|
||||||
|
.fa-sr-only-focusable() {
|
||||||
|
&:not(:focus) {
|
||||||
|
.fa-sr-only();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets a specific icon family to use alongside style + icon mixins
|
||||||
|
.fa-family-classic() {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
}
|
||||||
|
|
||||||
|
// convenience mixins for declaring pseudo-elements by CSS variable,
|
||||||
|
// including all style-specific font properties, and both the ::before
|
||||||
|
// and ::after elements in the duotone case.
|
||||||
|
.fa-icon-solid(@fa-var) {
|
||||||
|
.fa-icon;
|
||||||
|
.fa-solid;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: @fa-var;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-icon-regular(@fa-var) {
|
||||||
|
.fa-icon;
|
||||||
|
.fa-regular;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: @fa-var;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-icon-brands(@fa-var) {
|
||||||
|
.fa-icon;
|
||||||
|
.fa-brands;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: @fa-var;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
31
front/lib/AdminLTE/bower_components/font-awesome/less/_rotated-flipped.less
vendored
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
// rotating + flipping icons
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-rotate-90 {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-rotate-180 {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-rotate-270 {
|
||||||
|
transform: rotate(270deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-flip-horizontal {
|
||||||
|
transform: scale(-1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-flip-vertical {
|
||||||
|
transform: scale(1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-flip-both,
|
||||||
|
.@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical {
|
||||||
|
transform: scale(-1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-rotate-by {
|
||||||
|
transform: rotate(~'var(--@{fa-css-prefix}-rotate-angle, none)');
|
||||||
|
}
|
||||||
14
front/lib/AdminLTE/bower_components/font-awesome/less/_screen-reader.less
vendored
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
// screen-reader utilities
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
// only display content to screen readers
|
||||||
|
.sr-only,
|
||||||
|
.@{fa-css-prefix}-sr-only {
|
||||||
|
.fa-sr-only();
|
||||||
|
}
|
||||||
|
|
||||||
|
// use in conjunction with .sr-only to only display content when it's focused
|
||||||
|
.sr-only-focusable,
|
||||||
|
.@{fa-css-prefix}-sr-only-focusable {
|
||||||
|
.fa-sr-only-focusable();
|
||||||
|
}
|
||||||
2042
front/lib/AdminLTE/bower_components/font-awesome/less/_shims.less
vendored
Executable file
19
front/lib/AdminLTE/bower_components/font-awesome/less/_sizing.less
vendored
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
// sizing icons
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
// literal magnification scale
|
||||||
|
.sizes-literal(@factor) when (@factor > 0) {
|
||||||
|
.sizes-literal((@factor - 1));
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-@{factor}x {
|
||||||
|
font-size: (@factor * 1em);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.sizes-literal(10);
|
||||||
|
|
||||||
|
// step-based scale (with alignment)
|
||||||
|
each(.fa-sizes(), {
|
||||||
|
.@{fa-css-prefix}-@{key} {
|
||||||
|
.fa-size(@value);
|
||||||
|
}
|
||||||
|
});
|
||||||
31
front/lib/AdminLTE/bower_components/font-awesome/less/_stacked.less
vendored
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
// stacking icons
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-stack {
|
||||||
|
display: inline-block;
|
||||||
|
height: 2em;
|
||||||
|
line-height: 2em;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: @fa-stack-vertical-align;
|
||||||
|
width: @fa-stack-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
z-index: ~'var(--@{fa-css-prefix}-stack-z-index, @{fa-stack-z-index})';
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-stack-1x {
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-stack-2x {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.@{fa-css-prefix}-inverse {
|
||||||
|
color: ~'var(--@{fa-css-prefix}-inverse, @{fa-inverse})';
|
||||||
|
}
|
||||||
4958
front/lib/AdminLTE/bower_components/font-awesome/less/_variables.less
vendored
Executable file
@@ -1,34 +0,0 @@
|
|||||||
// Animated Icons
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-spin {
|
|
||||||
-webkit-animation: fa-spin 2s infinite linear;
|
|
||||||
animation: fa-spin 2s infinite linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-pulse {
|
|
||||||
-webkit-animation: fa-spin 1s infinite steps(8);
|
|
||||||
animation: fa-spin 1s infinite steps(8);
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
// Bordered & Pulled
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-border {
|
|
||||||
padding: .2em .25em .15em;
|
|
||||||
border: solid .08em @fa-border-color;
|
|
||||||
border-radius: .1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-pull-left { float: left; }
|
|
||||||
.@{fa-css-prefix}-pull-right { float: right; }
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
&.@{fa-css-prefix}-pull-left { margin-right: .3em; }
|
|
||||||
&.@{fa-css-prefix}-pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Deprecated as of 4.4.0 */
|
|
||||||
.pull-right { float: right; }
|
|
||||||
.pull-left { float: left; }
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
&.pull-left { margin-right: .3em; }
|
|
||||||
&.pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
||||||
29
front/lib/AdminLTE/bower_components/font-awesome/less/brands.less
vendored
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
@import "_variables.less";
|
||||||
|
|
||||||
|
:root, :host {
|
||||||
|
--@{fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands';
|
||||||
|
--@{fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 6 Brands';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: @fa-font-display;
|
||||||
|
src: url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
|
||||||
|
url('@{fa-font-path}/fa-brands-400.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
.fab,
|
||||||
|
.@{fa-css-prefix}-brands {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
each(.fa-brand-icons(), {
|
||||||
|
.@{fa-css-prefix}-@{key}:before { content: @value; }
|
||||||
|
});
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
// Base Class Definition
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
|
|
||||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
|
||||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
|
|
||||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
|
||||||
*/
|
|
||||||
|
|
||||||
@import "variables.less";
|
|
||||||
@import "mixins.less";
|
|
||||||
@import "path.less";
|
|
||||||
@import "core.less";
|
|
||||||
@import "larger.less";
|
|
||||||
@import "fixed-width.less";
|
|
||||||
@import "list.less";
|
|
||||||
@import "bordered-pulled.less";
|
|
||||||
@import "animated.less";
|
|
||||||
@import "rotated-flipped.less";
|
|
||||||
@import "stacked.less";
|
|
||||||
@import "icons.less";
|
|
||||||
@import "screen-reader.less";
|
|
||||||
20
front/lib/AdminLTE/bower_components/font-awesome/less/fontawesome.less
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2022 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
// Font Awesome core compile (Web Fonts-based)
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
@import "_variables.less";
|
||||||
|
@import "_mixins.less";
|
||||||
|
@import "_core.less";
|
||||||
|
@import "_sizing.less";
|
||||||
|
@import "_fixed-width.less";
|
||||||
|
@import "_list.less";
|
||||||
|
@import "_bordered-pulled.less";
|
||||||
|
@import "_animated.less";
|
||||||
|
@import "_rotated-flipped.less";
|
||||||
|
@import "_stacked.less";
|
||||||
|
@import "_icons.less";
|
||||||
|
@import "_screen-reader.less";
|
||||||
@@ -1,789 +0,0 @@
|
|||||||
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
|
|
||||||
readers do not read off random characters that represent icons */
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
|
|
||||||
.@{fa-css-prefix}-music:before { content: @fa-var-music; }
|
|
||||||
.@{fa-css-prefix}-search:before { content: @fa-var-search; }
|
|
||||||
.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
|
|
||||||
.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
|
|
||||||
.@{fa-css-prefix}-star:before { content: @fa-var-star; }
|
|
||||||
.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
|
|
||||||
.@{fa-css-prefix}-user:before { content: @fa-var-user; }
|
|
||||||
.@{fa-css-prefix}-film:before { content: @fa-var-film; }
|
|
||||||
.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
|
|
||||||
.@{fa-css-prefix}-th:before { content: @fa-var-th; }
|
|
||||||
.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
|
|
||||||
.@{fa-css-prefix}-check:before { content: @fa-var-check; }
|
|
||||||
.@{fa-css-prefix}-remove:before,
|
|
||||||
.@{fa-css-prefix}-close:before,
|
|
||||||
.@{fa-css-prefix}-times:before { content: @fa-var-times; }
|
|
||||||
.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
|
|
||||||
.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
|
|
||||||
.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
|
|
||||||
.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
|
|
||||||
.@{fa-css-prefix}-gear:before,
|
|
||||||
.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
|
|
||||||
.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
|
|
||||||
.@{fa-css-prefix}-home:before { content: @fa-var-home; }
|
|
||||||
.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
|
|
||||||
.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
|
|
||||||
.@{fa-css-prefix}-road:before { content: @fa-var-road; }
|
|
||||||
.@{fa-css-prefix}-download:before { content: @fa-var-download; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
|
|
||||||
.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
|
|
||||||
.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
|
|
||||||
.@{fa-css-prefix}-rotate-right:before,
|
|
||||||
.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
|
|
||||||
.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
|
|
||||||
.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
|
|
||||||
.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
|
|
||||||
.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
|
|
||||||
.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
|
|
||||||
.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
|
|
||||||
.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
|
|
||||||
.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
|
|
||||||
.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
|
|
||||||
.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
|
|
||||||
.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
|
|
||||||
.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
|
|
||||||
.@{fa-css-prefix}-book:before { content: @fa-var-book; }
|
|
||||||
.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
|
|
||||||
.@{fa-css-prefix}-print:before { content: @fa-var-print; }
|
|
||||||
.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
|
|
||||||
.@{fa-css-prefix}-font:before { content: @fa-var-font; }
|
|
||||||
.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
|
|
||||||
.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
|
|
||||||
.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
|
|
||||||
.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
|
|
||||||
.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
|
|
||||||
.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
|
|
||||||
.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
|
|
||||||
.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
|
|
||||||
.@{fa-css-prefix}-list:before { content: @fa-var-list; }
|
|
||||||
.@{fa-css-prefix}-dedent:before,
|
|
||||||
.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
|
|
||||||
.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
|
|
||||||
.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
|
|
||||||
.@{fa-css-prefix}-photo:before,
|
|
||||||
.@{fa-css-prefix}-image:before,
|
|
||||||
.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
|
|
||||||
.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
|
|
||||||
.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
|
|
||||||
.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
|
|
||||||
.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
|
|
||||||
.@{fa-css-prefix}-edit:before,
|
|
||||||
.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
|
|
||||||
.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
|
|
||||||
.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
|
|
||||||
.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
|
|
||||||
.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
|
|
||||||
.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
|
|
||||||
.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
|
|
||||||
.@{fa-css-prefix}-play:before { content: @fa-var-play; }
|
|
||||||
.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
|
|
||||||
.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
|
|
||||||
.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
|
|
||||||
.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
|
|
||||||
.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
|
|
||||||
.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
|
|
||||||
.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
|
|
||||||
.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
|
|
||||||
.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
|
|
||||||
.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
|
|
||||||
.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
|
|
||||||
.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
|
|
||||||
.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
|
|
||||||
.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
|
|
||||||
.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
|
|
||||||
.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
|
|
||||||
.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
|
|
||||||
.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-mail-forward:before,
|
|
||||||
.@{fa-css-prefix}-share:before { content: @fa-var-share; }
|
|
||||||
.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
|
|
||||||
.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
|
|
||||||
.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
|
|
||||||
.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
|
|
||||||
.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
|
|
||||||
.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
|
|
||||||
.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
|
|
||||||
.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
|
|
||||||
.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
|
|
||||||
.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
|
|
||||||
.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
|
|
||||||
.@{fa-css-prefix}-warning:before,
|
|
||||||
.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
|
|
||||||
.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
|
|
||||||
.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
|
|
||||||
.@{fa-css-prefix}-random:before { content: @fa-var-random; }
|
|
||||||
.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
|
|
||||||
.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
|
|
||||||
.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
|
|
||||||
.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
|
|
||||||
.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
|
|
||||||
.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
|
|
||||||
.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
|
|
||||||
.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
|
|
||||||
.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
|
|
||||||
.@{fa-css-prefix}-bar-chart-o:before,
|
|
||||||
.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }
|
|
||||||
.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
|
|
||||||
.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
|
|
||||||
.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
|
|
||||||
.@{fa-css-prefix}-key:before { content: @fa-var-key; }
|
|
||||||
.@{fa-css-prefix}-gears:before,
|
|
||||||
.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
|
|
||||||
.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
|
|
||||||
.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
|
|
||||||
.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
|
|
||||||
.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
|
|
||||||
.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
|
|
||||||
.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
|
|
||||||
.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
|
|
||||||
.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
|
|
||||||
.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
|
|
||||||
.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
|
|
||||||
.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
|
|
||||||
.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
|
|
||||||
.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
|
|
||||||
.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
|
|
||||||
.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
|
|
||||||
.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
|
|
||||||
.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
|
|
||||||
.@{fa-css-prefix}-facebook-f:before,
|
|
||||||
.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
|
|
||||||
.@{fa-css-prefix}-github:before { content: @fa-var-github; }
|
|
||||||
.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
|
|
||||||
.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
|
|
||||||
.@{fa-css-prefix}-feed:before,
|
|
||||||
.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
|
|
||||||
.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
|
|
||||||
.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
|
|
||||||
.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
|
|
||||||
.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
|
|
||||||
.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
|
|
||||||
.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
|
|
||||||
.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
|
|
||||||
.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
|
|
||||||
.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
|
|
||||||
.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
|
|
||||||
.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
|
|
||||||
.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
|
|
||||||
.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
|
|
||||||
.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
|
|
||||||
.@{fa-css-prefix}-group:before,
|
|
||||||
.@{fa-css-prefix}-users:before { content: @fa-var-users; }
|
|
||||||
.@{fa-css-prefix}-chain:before,
|
|
||||||
.@{fa-css-prefix}-link:before { content: @fa-var-link; }
|
|
||||||
.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
|
|
||||||
.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
|
|
||||||
.@{fa-css-prefix}-cut:before,
|
|
||||||
.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
|
|
||||||
.@{fa-css-prefix}-copy:before,
|
|
||||||
.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
|
|
||||||
.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
|
|
||||||
.@{fa-css-prefix}-save:before,
|
|
||||||
.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
|
|
||||||
.@{fa-css-prefix}-square:before { content: @fa-var-square; }
|
|
||||||
.@{fa-css-prefix}-navicon:before,
|
|
||||||
.@{fa-css-prefix}-reorder:before,
|
|
||||||
.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
|
|
||||||
.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
|
|
||||||
.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
|
|
||||||
.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
|
|
||||||
.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
|
|
||||||
.@{fa-css-prefix}-table:before { content: @fa-var-table; }
|
|
||||||
.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
|
|
||||||
.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
|
|
||||||
.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
|
|
||||||
.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
|
|
||||||
.@{fa-css-prefix}-money:before { content: @fa-var-money; }
|
|
||||||
.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
|
|
||||||
.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
|
|
||||||
.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
|
|
||||||
.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
|
|
||||||
.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
|
|
||||||
.@{fa-css-prefix}-unsorted:before,
|
|
||||||
.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
|
|
||||||
.@{fa-css-prefix}-sort-down:before,
|
|
||||||
.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-up:before,
|
|
||||||
.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
|
|
||||||
.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
|
|
||||||
.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
|
|
||||||
.@{fa-css-prefix}-rotate-left:before,
|
|
||||||
.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
|
|
||||||
.@{fa-css-prefix}-legal:before,
|
|
||||||
.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
|
|
||||||
.@{fa-css-prefix}-dashboard:before,
|
|
||||||
.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
|
|
||||||
.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
|
|
||||||
.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
|
|
||||||
.@{fa-css-prefix}-flash:before,
|
|
||||||
.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
|
|
||||||
.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
|
|
||||||
.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
|
|
||||||
.@{fa-css-prefix}-paste:before,
|
|
||||||
.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
|
|
||||||
.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
|
|
||||||
.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
|
|
||||||
.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
|
|
||||||
.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
|
|
||||||
.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
|
|
||||||
.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
|
|
||||||
.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
|
|
||||||
.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
|
|
||||||
.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
|
|
||||||
.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
|
|
||||||
.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
|
|
||||||
.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
|
|
||||||
.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
|
|
||||||
.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
|
|
||||||
.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
|
|
||||||
.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
|
|
||||||
.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
|
|
||||||
.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
|
|
||||||
.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
|
|
||||||
.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
|
|
||||||
.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
|
|
||||||
.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
|
|
||||||
.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
|
|
||||||
.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
|
|
||||||
.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
|
|
||||||
.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
|
|
||||||
.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
|
|
||||||
.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
|
|
||||||
.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
|
|
||||||
.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
|
|
||||||
.@{fa-css-prefix}-mobile-phone:before,
|
|
||||||
.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
|
|
||||||
.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
|
|
||||||
.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
|
|
||||||
.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
|
|
||||||
.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
|
|
||||||
.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
|
|
||||||
.@{fa-css-prefix}-mail-reply:before,
|
|
||||||
.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
|
|
||||||
.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
|
|
||||||
.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
|
|
||||||
.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
|
|
||||||
.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
|
|
||||||
.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
|
|
||||||
.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
|
|
||||||
.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
|
|
||||||
.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
|
|
||||||
.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
|
|
||||||
.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
|
|
||||||
.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
|
|
||||||
.@{fa-css-prefix}-code:before { content: @fa-var-code; }
|
|
||||||
.@{fa-css-prefix}-mail-reply-all:before,
|
|
||||||
.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
|
|
||||||
.@{fa-css-prefix}-star-half-empty:before,
|
|
||||||
.@{fa-css-prefix}-star-half-full:before,
|
|
||||||
.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
|
|
||||||
.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
|
|
||||||
.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
|
|
||||||
.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
|
|
||||||
.@{fa-css-prefix}-unlink:before,
|
|
||||||
.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
|
|
||||||
.@{fa-css-prefix}-question:before { content: @fa-var-question; }
|
|
||||||
.@{fa-css-prefix}-info:before { content: @fa-var-info; }
|
|
||||||
.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
|
|
||||||
.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
|
|
||||||
.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
|
|
||||||
.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
|
|
||||||
.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
|
|
||||||
.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
|
|
||||||
.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
|
|
||||||
.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
|
|
||||||
.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
|
|
||||||
.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
|
|
||||||
.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
|
|
||||||
.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
|
|
||||||
.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
|
|
||||||
.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
|
|
||||||
.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
|
|
||||||
.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
|
|
||||||
.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
|
|
||||||
.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
|
|
||||||
.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
|
|
||||||
.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
|
|
||||||
.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
|
|
||||||
.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
|
|
||||||
.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
|
|
||||||
.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
|
|
||||||
.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
|
|
||||||
.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
|
|
||||||
.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
|
|
||||||
.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
|
|
||||||
.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
|
|
||||||
.@{fa-css-prefix}-toggle-down:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
|
|
||||||
.@{fa-css-prefix}-toggle-up:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
|
|
||||||
.@{fa-css-prefix}-toggle-right:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
|
|
||||||
.@{fa-css-prefix}-euro:before,
|
|
||||||
.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
|
|
||||||
.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
|
|
||||||
.@{fa-css-prefix}-dollar:before,
|
|
||||||
.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
|
|
||||||
.@{fa-css-prefix}-rupee:before,
|
|
||||||
.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
|
|
||||||
.@{fa-css-prefix}-cny:before,
|
|
||||||
.@{fa-css-prefix}-rmb:before,
|
|
||||||
.@{fa-css-prefix}-yen:before,
|
|
||||||
.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
|
|
||||||
.@{fa-css-prefix}-ruble:before,
|
|
||||||
.@{fa-css-prefix}-rouble:before,
|
|
||||||
.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
|
|
||||||
.@{fa-css-prefix}-won:before,
|
|
||||||
.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
|
|
||||||
.@{fa-css-prefix}-bitcoin:before,
|
|
||||||
.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
|
|
||||||
.@{fa-css-prefix}-file:before { content: @fa-var-file; }
|
|
||||||
.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
|
|
||||||
.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
|
|
||||||
.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
|
|
||||||
.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
|
|
||||||
.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
|
|
||||||
.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
|
|
||||||
.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
|
|
||||||
.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
|
|
||||||
.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
|
|
||||||
.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
|
|
||||||
.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
|
|
||||||
.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
|
|
||||||
.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
|
|
||||||
.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
|
|
||||||
.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
|
|
||||||
.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
|
|
||||||
.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
|
|
||||||
.@{fa-css-prefix}-android:before { content: @fa-var-android; }
|
|
||||||
.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
|
|
||||||
.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
|
|
||||||
.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
|
|
||||||
.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
|
|
||||||
.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
|
|
||||||
.@{fa-css-prefix}-female:before { content: @fa-var-female; }
|
|
||||||
.@{fa-css-prefix}-male:before { content: @fa-var-male; }
|
|
||||||
.@{fa-css-prefix}-gittip:before,
|
|
||||||
.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
|
|
||||||
.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
|
|
||||||
.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
|
|
||||||
.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
|
|
||||||
.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
|
|
||||||
.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
|
|
||||||
.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
|
|
||||||
.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
|
|
||||||
.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
|
|
||||||
.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
|
|
||||||
.@{fa-css-prefix}-toggle-left:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
|
|
||||||
.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
|
|
||||||
.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
|
|
||||||
.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
|
|
||||||
.@{fa-css-prefix}-turkish-lira:before,
|
|
||||||
.@{fa-css-prefix}-try:before { content: @fa-var-try; }
|
|
||||||
.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
|
|
||||||
.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
|
|
||||||
.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
|
|
||||||
.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
|
|
||||||
.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
|
|
||||||
.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
|
|
||||||
.@{fa-css-prefix}-institution:before,
|
|
||||||
.@{fa-css-prefix}-bank:before,
|
|
||||||
.@{fa-css-prefix}-university:before { content: @fa-var-university; }
|
|
||||||
.@{fa-css-prefix}-mortar-board:before,
|
|
||||||
.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
|
|
||||||
.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
|
|
||||||
.@{fa-css-prefix}-google:before { content: @fa-var-google; }
|
|
||||||
.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
|
|
||||||
.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
|
|
||||||
.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
|
|
||||||
.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
|
|
||||||
.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
|
|
||||||
.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
|
|
||||||
.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }
|
|
||||||
.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
|
|
||||||
.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
|
|
||||||
.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
|
|
||||||
.@{fa-css-prefix}-language:before { content: @fa-var-language; }
|
|
||||||
.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
|
|
||||||
.@{fa-css-prefix}-building:before { content: @fa-var-building; }
|
|
||||||
.@{fa-css-prefix}-child:before { content: @fa-var-child; }
|
|
||||||
.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
|
|
||||||
.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }
|
|
||||||
.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
|
|
||||||
.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
|
|
||||||
.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
|
|
||||||
.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
|
|
||||||
.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
|
|
||||||
.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
|
|
||||||
.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
|
|
||||||
.@{fa-css-prefix}-automobile:before,
|
|
||||||
.@{fa-css-prefix}-car:before { content: @fa-var-car; }
|
|
||||||
.@{fa-css-prefix}-cab:before,
|
|
||||||
.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
|
|
||||||
.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
|
|
||||||
.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
|
|
||||||
.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
|
|
||||||
.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
|
|
||||||
.@{fa-css-prefix}-database:before { content: @fa-var-database; }
|
|
||||||
.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }
|
|
||||||
.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }
|
|
||||||
.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }
|
|
||||||
.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }
|
|
||||||
.@{fa-css-prefix}-file-photo-o:before,
|
|
||||||
.@{fa-css-prefix}-file-picture-o:before,
|
|
||||||
.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }
|
|
||||||
.@{fa-css-prefix}-file-zip-o:before,
|
|
||||||
.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }
|
|
||||||
.@{fa-css-prefix}-file-sound-o:before,
|
|
||||||
.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }
|
|
||||||
.@{fa-css-prefix}-file-movie-o:before,
|
|
||||||
.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }
|
|
||||||
.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }
|
|
||||||
.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
|
|
||||||
.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
|
|
||||||
.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
|
|
||||||
.@{fa-css-prefix}-life-bouy:before,
|
|
||||||
.@{fa-css-prefix}-life-buoy:before,
|
|
||||||
.@{fa-css-prefix}-life-saver:before,
|
|
||||||
.@{fa-css-prefix}-support:before,
|
|
||||||
.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
|
|
||||||
.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }
|
|
||||||
.@{fa-css-prefix}-ra:before,
|
|
||||||
.@{fa-css-prefix}-resistance:before,
|
|
||||||
.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
|
|
||||||
.@{fa-css-prefix}-ge:before,
|
|
||||||
.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
|
|
||||||
.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
|
|
||||||
.@{fa-css-prefix}-git:before { content: @fa-var-git; }
|
|
||||||
.@{fa-css-prefix}-y-combinator-square:before,
|
|
||||||
.@{fa-css-prefix}-yc-square:before,
|
|
||||||
.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
|
|
||||||
.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
|
|
||||||
.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
|
|
||||||
.@{fa-css-prefix}-wechat:before,
|
|
||||||
.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
|
|
||||||
.@{fa-css-prefix}-send:before,
|
|
||||||
.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
|
|
||||||
.@{fa-css-prefix}-send-o:before,
|
|
||||||
.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }
|
|
||||||
.@{fa-css-prefix}-history:before { content: @fa-var-history; }
|
|
||||||
.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }
|
|
||||||
.@{fa-css-prefix}-header:before { content: @fa-var-header; }
|
|
||||||
.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
|
|
||||||
.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }
|
|
||||||
.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
|
|
||||||
.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
|
|
||||||
.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
|
|
||||||
.@{fa-css-prefix}-soccer-ball-o:before,
|
|
||||||
.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }
|
|
||||||
.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
|
|
||||||
.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
|
|
||||||
.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
|
|
||||||
.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
|
|
||||||
.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
|
|
||||||
.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
|
|
||||||
.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }
|
|
||||||
.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
|
|
||||||
.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
|
|
||||||
.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
|
|
||||||
.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
|
|
||||||
.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
|
|
||||||
.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
|
|
||||||
.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
|
|
||||||
.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
|
|
||||||
.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
|
|
||||||
.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
|
|
||||||
.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
|
|
||||||
.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }
|
|
||||||
.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
|
|
||||||
.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
|
|
||||||
.@{fa-css-prefix}-at:before { content: @fa-var-at; }
|
|
||||||
.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }
|
|
||||||
.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
|
|
||||||
.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
|
|
||||||
.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }
|
|
||||||
.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }
|
|
||||||
.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }
|
|
||||||
.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
|
|
||||||
.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
|
|
||||||
.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
|
|
||||||
.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
|
|
||||||
.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
|
|
||||||
.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
|
|
||||||
.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
|
|
||||||
.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
|
|
||||||
.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }
|
|
||||||
.@{fa-css-prefix}-shekel:before,
|
|
||||||
.@{fa-css-prefix}-sheqel:before,
|
|
||||||
.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }
|
|
||||||
.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }
|
|
||||||
.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
|
|
||||||
.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
|
|
||||||
.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
|
|
||||||
.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
|
|
||||||
.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
|
|
||||||
.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
|
|
||||||
.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
|
|
||||||
.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
|
|
||||||
.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
|
|
||||||
.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
|
|
||||||
.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }
|
|
||||||
.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
|
|
||||||
.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
|
|
||||||
.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
|
|
||||||
.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
|
|
||||||
.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
|
|
||||||
.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
|
|
||||||
.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
|
|
||||||
.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
|
|
||||||
.@{fa-css-prefix}-intersex:before,
|
|
||||||
.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
|
|
||||||
.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
|
|
||||||
.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
|
|
||||||
.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
|
|
||||||
.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
|
|
||||||
.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
|
|
||||||
.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }
|
|
||||||
.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }
|
|
||||||
.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
|
|
||||||
.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
|
|
||||||
.@{fa-css-prefix}-server:before { content: @fa-var-server; }
|
|
||||||
.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
|
|
||||||
.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
|
|
||||||
.@{fa-css-prefix}-hotel:before,
|
|
||||||
.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
|
|
||||||
.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
|
|
||||||
.@{fa-css-prefix}-train:before { content: @fa-var-train; }
|
|
||||||
.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
|
|
||||||
.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }
|
|
||||||
.@{fa-css-prefix}-yc:before,
|
|
||||||
.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }
|
|
||||||
.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }
|
|
||||||
.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }
|
|
||||||
.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }
|
|
||||||
.@{fa-css-prefix}-battery-4:before,
|
|
||||||
.@{fa-css-prefix}-battery:before,
|
|
||||||
.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }
|
|
||||||
.@{fa-css-prefix}-battery-3:before,
|
|
||||||
.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }
|
|
||||||
.@{fa-css-prefix}-battery-2:before,
|
|
||||||
.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }
|
|
||||||
.@{fa-css-prefix}-battery-1:before,
|
|
||||||
.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }
|
|
||||||
.@{fa-css-prefix}-battery-0:before,
|
|
||||||
.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }
|
|
||||||
.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }
|
|
||||||
.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }
|
|
||||||
.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }
|
|
||||||
.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }
|
|
||||||
.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }
|
|
||||||
.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }
|
|
||||||
.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }
|
|
||||||
.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }
|
|
||||||
.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }
|
|
||||||
.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }
|
|
||||||
.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }
|
|
||||||
.@{fa-css-prefix}-hourglass-1:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }
|
|
||||||
.@{fa-css-prefix}-hourglass-2:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }
|
|
||||||
.@{fa-css-prefix}-hourglass-3:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }
|
|
||||||
.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }
|
|
||||||
.@{fa-css-prefix}-hand-grab-o:before,
|
|
||||||
.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }
|
|
||||||
.@{fa-css-prefix}-hand-stop-o:before,
|
|
||||||
.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }
|
|
||||||
.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }
|
|
||||||
.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }
|
|
||||||
.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }
|
|
||||||
.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }
|
|
||||||
.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }
|
|
||||||
.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }
|
|
||||||
.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }
|
|
||||||
.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }
|
|
||||||
.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }
|
|
||||||
.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }
|
|
||||||
.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }
|
|
||||||
.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }
|
|
||||||
.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }
|
|
||||||
.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }
|
|
||||||
.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }
|
|
||||||
.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }
|
|
||||||
.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }
|
|
||||||
.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }
|
|
||||||
.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }
|
|
||||||
.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }
|
|
||||||
.@{fa-css-prefix}-tv:before,
|
|
||||||
.@{fa-css-prefix}-television:before { content: @fa-var-television; }
|
|
||||||
.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }
|
|
||||||
.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }
|
|
||||||
.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }
|
|
||||||
.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }
|
|
||||||
.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }
|
|
||||||
.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }
|
|
||||||
.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }
|
|
||||||
.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }
|
|
||||||
.@{fa-css-prefix}-map:before { content: @fa-var-map; }
|
|
||||||
.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }
|
|
||||||
.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }
|
|
||||||
.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }
|
|
||||||
.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }
|
|
||||||
.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }
|
|
||||||
.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
|
|
||||||
.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }
|
|
||||||
.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }
|
|
||||||
.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }
|
|
||||||
.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }
|
|
||||||
.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }
|
|
||||||
.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }
|
|
||||||
.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }
|
|
||||||
.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }
|
|
||||||
.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }
|
|
||||||
.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }
|
|
||||||
.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }
|
|
||||||
.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }
|
|
||||||
.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }
|
|
||||||
.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }
|
|
||||||
.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }
|
|
||||||
.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }
|
|
||||||
.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }
|
|
||||||
.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }
|
|
||||||
.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }
|
|
||||||
.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }
|
|
||||||
.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }
|
|
||||||
.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }
|
|
||||||
.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }
|
|
||||||
.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }
|
|
||||||
.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }
|
|
||||||
.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }
|
|
||||||
.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }
|
|
||||||
.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }
|
|
||||||
.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }
|
|
||||||
.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }
|
|
||||||
.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }
|
|
||||||
.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }
|
|
||||||
.@{fa-css-prefix}-asl-interpreting:before,
|
|
||||||
.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
|
|
||||||
.@{fa-css-prefix}-deafness:before,
|
|
||||||
.@{fa-css-prefix}-hard-of-hearing:before,
|
|
||||||
.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }
|
|
||||||
.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }
|
|
||||||
.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }
|
|
||||||
.@{fa-css-prefix}-signing:before,
|
|
||||||
.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }
|
|
||||||
.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }
|
|
||||||
.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }
|
|
||||||
.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }
|
|
||||||
.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }
|
|
||||||
.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }
|
|
||||||
.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }
|
|
||||||
.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
|
|
||||||
.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }
|
|
||||||
.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }
|
|
||||||
.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }
|
|
||||||
.@{fa-css-prefix}-google-plus-circle:before,
|
|
||||||
.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }
|
|
||||||
.@{fa-css-prefix}-fa:before,
|
|
||||||
.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }
|
|
||||||
.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }
|
|
||||||
.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }
|
|
||||||
.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }
|
|
||||||
.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }
|
|
||||||
.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }
|
|
||||||
.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }
|
|
||||||
.@{fa-css-prefix}-vcard:before,
|
|
||||||
.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }
|
|
||||||
.@{fa-css-prefix}-vcard-o:before,
|
|
||||||
.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }
|
|
||||||
.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }
|
|
||||||
.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }
|
|
||||||
.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }
|
|
||||||
.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }
|
|
||||||
.@{fa-css-prefix}-drivers-license:before,
|
|
||||||
.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }
|
|
||||||
.@{fa-css-prefix}-drivers-license-o:before,
|
|
||||||
.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }
|
|
||||||
.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }
|
|
||||||
.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }
|
|
||||||
.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }
|
|
||||||
.@{fa-css-prefix}-thermometer-4:before,
|
|
||||||
.@{fa-css-prefix}-thermometer:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }
|
|
||||||
.@{fa-css-prefix}-thermometer-3:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }
|
|
||||||
.@{fa-css-prefix}-thermometer-2:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }
|
|
||||||
.@{fa-css-prefix}-thermometer-1:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }
|
|
||||||
.@{fa-css-prefix}-thermometer-0:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }
|
|
||||||
.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }
|
|
||||||
.@{fa-css-prefix}-bathtub:before,
|
|
||||||
.@{fa-css-prefix}-s15:before,
|
|
||||||
.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }
|
|
||||||
.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }
|
|
||||||
.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }
|
|
||||||
.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }
|
|
||||||
.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }
|
|
||||||
.@{fa-css-prefix}-times-rectangle:before,
|
|
||||||
.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }
|
|
||||||
.@{fa-css-prefix}-times-rectangle-o:before,
|
|
||||||
.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }
|
|
||||||
.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }
|
|
||||||
.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }
|
|
||||||
.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }
|
|
||||||
.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }
|
|
||||||
.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }
|
|
||||||
.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }
|
|
||||||
.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }
|
|
||||||
.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }
|
|
||||||
.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }
|
|
||||||
.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }
|
|
||||||
.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// Icon Sizes
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
/* makes the font 33% larger relative to the icon container */
|
|
||||||
.@{fa-css-prefix}-lg {
|
|
||||||
font-size: (4em / 3);
|
|
||||||
line-height: (3em / 4);
|
|
||||||
vertical-align: -15%;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-2x { font-size: 2em; }
|
|
||||||
.@{fa-css-prefix}-3x { font-size: 3em; }
|
|
||||||
.@{fa-css-prefix}-4x { font-size: 4em; }
|
|
||||||
.@{fa-css-prefix}-5x { font-size: 5em; }
|
|
||||||