10
.env
Normal file
@@ -0,0 +1,10 @@
|
||||
#GLOBAL
|
||||
APP_DATA_LOCATION=/path/to/docker_appdata
|
||||
APP_CONFIG_LOCATION=/path/to/docker_config
|
||||
LOGS_LOCATION=/path/to/docker_logs
|
||||
TZ=Europe/Paris
|
||||
HOST_USER_ID=1000
|
||||
HOST_USER_GID=1000
|
||||
PORT=20211
|
||||
|
||||
|
||||
64
.github/workflows/docker.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
name: docker
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: 0 14 * * 0 # every sunday at 14:00
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
tags:
|
||||
- '*.*.*'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- name: Set up dynamic build ARGs
|
||||
id: getargs
|
||||
run: echo "::set-output name=version::$(cat ./stable/VERSION)"
|
||||
|
||||
- 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@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.DS_Store
|
||||
config/pialert.conf
|
||||
db/
|
||||
39
Dockerfile
Normal file
@@ -0,0 +1,39 @@
|
||||
FROM debian:buster-slim
|
||||
|
||||
# default UID and GID
|
||||
ENV USER=pi USER_ID=1000 USER_GID=1000 TZ=Europe/London PORT=20211
|
||||
|
||||
# Todo, figure out why using a workdir instead of full paths don't work
|
||||
# Todo, do we still need all these packages? I can already see sudo which isn't needed
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo lighttpd php php-cgi php-fpm php-sqlite3 sqlite3 dnsutils net-tools python iproute2 nmap python-pip zip -y \
|
||||
&& pip install requests \
|
||||
&& apt-get clean autoclean \
|
||||
&& apt-get autoremove \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& ln -s /home/pi/pialert/install/index.html /var/www/html/index.html \
|
||||
&& ln -s /home/pi/pialert/front /var/www/html/pialert \
|
||||
&& lighttpd-enable-mod fastcgi-php
|
||||
|
||||
|
||||
# now creating user
|
||||
RUN groupadd --gid "${USER_GID}" "${USER}" && \
|
||||
useradd \
|
||||
--uid ${USER_ID} \
|
||||
--gid ${USER_GID} \
|
||||
--create-home \
|
||||
--shell /bin/bash \
|
||||
${USER}
|
||||
|
||||
COPY . /home/pi/pialert
|
||||
|
||||
# Pi.Alert
|
||||
RUN python /home/pi/pialert/back/pialert.py update_vendors \
|
||||
&& sed -ie 's/= 80/= '${PORT}'/g' /etc/lighttpd/lighttpd.conf \
|
||||
&& (crontab -l 2>/dev/null; cat /home/pi/pialert/install/pialert.cron) | crontab -
|
||||
|
||||
# it's easy for permissions set in Git to be overridden, so doing it manually
|
||||
RUN chmod -R a+rxw /home/pi/pialert/
|
||||
|
||||
CMD ["/home/pi/pialert/dockerfiles/start.sh"]
|
||||
96
README.md
@@ -4,13 +4,27 @@
|
||||
WIFI / LAN intruder detector.
|
||||
|
||||
Scan the devices connected to your WIFI / LAN and alert you the connection of
|
||||
unknown devices. It also warns the disconnection of "always connected" devices.
|
||||
unknown devices. It also warns if a "always connected" devices disconnects.
|
||||
|
||||
![Main screen][main]
|
||||
|
||||
*(Apologies for my English and my limited knowledge of Python, php and
|
||||
JavaScript)*
|
||||
|
||||
# Docker image 🐳
|
||||
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker.yml)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
<a href="https://hub.docker.com/r/jokobsk/pi.alert">
|
||||
<img src="https://img.shields.io/docker/pulls/jokobsk/pi.alert?logo=docker&color=0aa8d2&logoColor=fff" alt="Docker Pulls">
|
||||
</a>
|
||||
|
||||
🥇 Pi.Alert credit goes to [pucherot/Pi.Alert](https://github.com/pucherot/Pi.Alert). <br/>
|
||||
🐳 Docker Image: [jokobsk/Pi.Alert](https://registry.hub.docker.com/r/jokobsk/pi.alert). <br/>
|
||||
📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) <br/>
|
||||
📚 [Dockerfile instructions](https://github.com/jokob-sk/Pi.Alert/blob/main//dockerfiles/README.md).
|
||||
|
||||
![Main screen dark][main_dark]
|
||||
Dark mode (and Device presence over time) within this fork courtesy of [leiweibau](https://github.com/leiweibau/Pi.Alert)
|
||||
|
||||
## How it works
|
||||
The system continuously scans the network for:
|
||||
- New devices
|
||||
@@ -41,13 +55,18 @@ In charge of:
|
||||
- Scan the network searching connected devices using the scanning methods
|
||||
described
|
||||
- Store the information in the DB
|
||||
- Report the changes detected by e-mail
|
||||
- Report the changes detected by e-mail and/or other services (Pushsafer, NTFY, Gotify)
|
||||
- Optional speedtest for Device "Internet"
|
||||
|
||||
| ![Report 1][report1] | ![Report 2][report2] |
|
||||
| -------------------- | -------------------- |
|
||||
|
||||
### Front
|
||||
A web frontal that allows:
|
||||
There is a configurable login to prevent unauthorized use.
|
||||
|
||||
> * Set `PIALERT_WEB_PROTECTION = True` in `pialert.conf` to enable
|
||||
|
||||
A web frontend that allows:
|
||||
- Manage the devices inventory and the characteristics
|
||||
- Display in a visual way all the information collected by the back
|
||||
- Sessions
|
||||
@@ -58,12 +77,25 @@ A web frontal that allows:
|
||||
- Concurrent devices
|
||||
- Down alerts
|
||||
- IP's
|
||||
- Manual Nmap scans
|
||||
- Optional speedtest for Device "Internet"
|
||||
- ...
|
||||
|
||||
| ![Screen 1][screen1] | ![Screen 2][screen2] |
|
||||
| -------------------- | -------------------- |
|
||||
| ![Screen 3][screen3] | ![Screen 4][screen4] |
|
||||
| ![Screen 5][screen5] | ![Screen 6][screen6] |
|
||||
|
||||
With the work of [jokob-sk/Pi.Alert](https://github.com/jokob-sk/Pi.Alert) and own extensions, the new maintenance page was added with various possibilities for maintenance and settings:
|
||||
- Status Infos (active scans, database size, backup counter)
|
||||
- Theme Selection (blue, red, green, yellow, black, purple)
|
||||
- Language Selection (english, german, spanish)
|
||||
- Light/Dark-Mode Switch
|
||||
- Pause arp-scan
|
||||
- DB maintenance tools
|
||||
- DB Backup and Restore
|
||||
|
||||
![Maintain screen dark][maintain_dark]
|
||||
|
||||
# Installation
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
@@ -71,7 +103,10 @@ Initially designed to run on a Raspberry Pi, probably it can run on many other
|
||||
Linux distributions.
|
||||
|
||||
- One-step Automated Install:
|
||||
#### `curl -sSL https://github.com/pucherot/Pi.Alert/raw/main/install/pialert_install.sh | bash`
|
||||
#### `curl -sSL https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_install.sh | bash`
|
||||
|
||||
- One-step Automated Install without Webserver if another Webserver is already installed. (not recommended):
|
||||
#### `curl -sSL https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_install_no_webserver.sh | bash`
|
||||
|
||||
- [Installation Guide (step by step)](docs/INSTALL.md)
|
||||
|
||||
@@ -79,7 +114,7 @@ Linux distributions.
|
||||
# Update
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
- One-step Automated Update:
|
||||
#### `curl -sSL https://github.com/pucherot/Pi.Alert/raw/main/install/pialert_update.sh | bash`
|
||||
#### `curl -sSL https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_update.sh | bash`
|
||||
|
||||
# Uninstall process
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
@@ -97,29 +132,48 @@ Linux distributions.
|
||||
### [Versions History](docs/VERSIONS_HISTORY.md)
|
||||
|
||||
### Powered by:
|
||||
| Product | Objetive |
|
||||
| ------------ | -------------------------------------- |
|
||||
| Python | Programming language for the Back |
|
||||
| PHP | Programming language for the Front-end |
|
||||
| JavaScript | Programming language for the Front-end |
|
||||
| Bootstrap | Front-end framework |
|
||||
| Admin.LTE | Bootstrap template |
|
||||
| FullCalendar | Calendar component |
|
||||
| Sqlite | DB engine |
|
||||
| Lighttpd | Webserver |
|
||||
| arp-scan | Scan network using arp commands |
|
||||
| Pi.hole | DNS Server with Ad-block |
|
||||
| dnsmasq | DHCP Server |
|
||||
| Product | Objetive |
|
||||
| ------------- | ------------------------------------------------------- |
|
||||
| Python | Programming language for the Back |
|
||||
| PHP | Programming language for the Front-end |
|
||||
| JavaScript | Programming language for the Front-end |
|
||||
| Bootstrap | Front-end framework |
|
||||
| Admin.LTE | Bootstrap template |
|
||||
| FullCalendar | Calendar component |
|
||||
| Sqlite | DB engine |
|
||||
| Lighttpd | Webserver |
|
||||
| arp-scan | Scan network using arp commands |
|
||||
| Pi.hole | DNS Server with Ad-block |
|
||||
| dnsmasq | DHCP Server |
|
||||
| nmap | Network Scanner |
|
||||
| zip | Filecompression Tool |
|
||||
| speedtest-cli | Python SpeedTest https://github.com/sivel/speedtest-cli |
|
||||
|
||||
### License
|
||||
GPL 3.0
|
||||
[Read more here](LICENSE.txt)
|
||||
|
||||
Source of the animated GIF (Loading Animation)
|
||||
https://commons.wikimedia.org/wiki/File:Loading_Animation.gif
|
||||
|
||||
Source of the selfhosted Fonts
|
||||
https://github.com/adobe-fonts/source-sans
|
||||
|
||||
### Contact
|
||||
pi.alert.application@gmail.com
|
||||
|
||||
***Suggestions and comments are welcome***
|
||||
|
||||
### Special thanks 🥇
|
||||
|
||||
This code is a collaborative body of work, with special thanks to:
|
||||
|
||||
- [leiweibau](https://github.com/leiweibau/Pi.Alert): Dark mode (and Last X scans activity chart)
|
||||
- [Macleykun](https://github.com/Macleykun): Help with Dockerfile clean-up
|
||||
- [Final-Hawk](https://github.com/Final-Hawk): Help with NTFY, styling and other fixes
|
||||
- [TeroRERO](https://github.com/terorero): Spanish translation
|
||||
- [jokob-sk](https://github.com/jokob-sk/Pi.Alert): DB Maintenance tools
|
||||
- Please see the [Git commit history](https://github.com/jokob-sk/Pi.Alert/commits/main) for a full list of people and their contributions to the project
|
||||
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
[main]: ./docs/img/1_devices.jpg "Main screen"
|
||||
@@ -127,6 +181,10 @@ Linux distributions.
|
||||
[screen2]: ./docs/img/2_2_device_sessions.jpg "Screen 2"
|
||||
[screen3]: ./docs/img/2_3_device_presence.jpg "Screen 3"
|
||||
[screen4]: ./docs/img/3_presence.jpg "Screen 4"
|
||||
[screen5]: ./docs/img/2_4_device_nmap.jpg "Screen 5"
|
||||
[screen6]: ./docs/img/2_5_device_nmap_ready.jpg "Screen 6"
|
||||
[report1]: ./docs/img/4_report_1.jpg "Report sample 1"
|
||||
[report2]: ./docs/img/4_report_2.jpg "Report sample 2"
|
||||
[main_dark]: /docs/img/1_devices_dark.jpg "Main screen dark"
|
||||
[maintain_dark]: /docs/img/5_maintain.jpg "Maintain screen dark"
|
||||
|
||||
|
||||
221
back/pialert.py
@@ -27,13 +27,14 @@ import socket
|
||||
import io
|
||||
import smtplib
|
||||
import csv
|
||||
|
||||
import requests
|
||||
|
||||
#===============================================================================
|
||||
# CONFIG CONSTANTS
|
||||
#===============================================================================
|
||||
PIALERT_BACK_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||
PIALERT_PATH = PIALERT_BACK_PATH + "/.."
|
||||
STOPARPSCAN = PIALERT_PATH + "/db/setting_stoparpscan"
|
||||
|
||||
if (sys.version_info > (3,0)):
|
||||
exec(open(PIALERT_PATH + "/config/version.conf").read())
|
||||
@@ -74,6 +75,9 @@ def main ():
|
||||
return
|
||||
cycle = str(sys.argv[1])
|
||||
|
||||
## Upgrade DB if needed
|
||||
upgradeDB()
|
||||
|
||||
## Main Commands
|
||||
if cycle == 'internet_IP':
|
||||
res = check_internet_IP()
|
||||
@@ -81,8 +85,10 @@ def main ():
|
||||
res = update_devices_MAC_vendors()
|
||||
elif cycle == 'update_vendors_silent':
|
||||
res = update_devices_MAC_vendors('-s')
|
||||
else :
|
||||
elif os.path.exists(STOPARPSCAN) == False :
|
||||
res = scan_network()
|
||||
elif os.path.exists(STOPARPSCAN) == True :
|
||||
res = 0
|
||||
|
||||
# Check error
|
||||
if res != 0 :
|
||||
@@ -350,15 +356,12 @@ def scan_network ():
|
||||
|
||||
# ScanCycle data
|
||||
cycle_interval = scanCycle_data['cic_EveryXmin']
|
||||
arpscan_retries = scanCycle_data['cic_arpscanCycles']
|
||||
# TESTING - Fast scan
|
||||
# arpscan_retries = 1
|
||||
|
||||
# arp-scan command
|
||||
print ('\nScanning...')
|
||||
print (' arp-scan Method...')
|
||||
print_log ('arp-scan starts...')
|
||||
arpscan_devices = execute_arpscan (arpscan_retries)
|
||||
arpscan_devices = execute_arpscan ()
|
||||
print_log ('arp-scan ends')
|
||||
# DEBUG - print number of rows updated
|
||||
# print (arpscan_devices)
|
||||
@@ -444,21 +447,13 @@ def query_ScanCycle_Data (pOpenCloseDB = False):
|
||||
return sqlRow
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
def execute_arpscan (pRetries):
|
||||
|
||||
def execute_arpscan ():
|
||||
# #101 - arp-scan subnet configuration
|
||||
# Prepare command arguments
|
||||
subnets = SCAN_SUBNETS.strip().split()
|
||||
arpscan_args = ['sudo', 'arp-scan', '--ignoredups', '--retry=' + str(pRetries)] + subnets
|
||||
# arpscan_args = ['sudo', 'arp-scan', SCAN_SUBNETS, '--ignoredups', '--retry=' + str(pRetries)]
|
||||
# print (arpscan_args)
|
||||
|
||||
# TESTING - Fast Scan
|
||||
# arpscan_args = ['sudo', 'arp-scan', '--localnet', '--ignoredups', '--retry=1']
|
||||
|
||||
# DEBUG - arp-scan command
|
||||
# print (" ".join (arpscan_args))
|
||||
|
||||
# Retry is 6 to avoid false offline devices
|
||||
arpscan_args = ['sudo', 'arp-scan', '--ignoredups', '--retry=6'] + subnets
|
||||
|
||||
# Execute command
|
||||
arpscan_output = subprocess.check_output (arpscan_args, universal_newlines=True)
|
||||
|
||||
@@ -472,9 +467,6 @@ def execute_arpscan (pRetries):
|
||||
devices_list = [device.groupdict()
|
||||
for device in re.finditer (re_pattern, arpscan_output)]
|
||||
|
||||
# Bugfix #5 - Delete duplicated MAC's with different IP's
|
||||
# TEST - Force duplicated device
|
||||
# devices_list.append(devices_list[0])
|
||||
# Delete duplicate MAC
|
||||
unique_mac = []
|
||||
unique_devices = []
|
||||
@@ -688,6 +680,23 @@ def print_scan_stats ():
|
||||
(cycle,))
|
||||
print (' IP Changes.........: ' + str ( sql.fetchone()[0]) )
|
||||
|
||||
# Add to History
|
||||
sql.execute("SELECT * FROM Devices")
|
||||
History_All = sql.fetchall()
|
||||
History_All_Devices = len(History_All)
|
||||
|
||||
sql.execute("SELECT * FROM Devices WHERE dev_Archived = 1")
|
||||
History_Archived = sql.fetchall()
|
||||
History_Archived_Devices = len(History_Archived)
|
||||
|
||||
sql.execute("""SELECT * FROM CurrentScan WHERE cur_ScanCycle = ? """, (cycle,))
|
||||
History_Online = sql.fetchall()
|
||||
History_Online_Devices = len(History_Online)
|
||||
History_Offline_Devices = History_All_Devices - History_Archived_Devices - History_Online_Devices
|
||||
|
||||
sql.execute ("INSERT INTO Online_History (Scan_Date, Online_Devices, Down_Devices, All_Devices, Archived_Devices) "+
|
||||
"VALUES ( ?, ?, ?, ?, ?)", (startTime, History_Online_Devices, History_Offline_Devices, History_All_Devices, History_Archived_Devices ) )
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
def create_new_devices ():
|
||||
# arpscan - Insert events for new devices
|
||||
@@ -702,6 +711,16 @@ def create_new_devices ():
|
||||
WHERE dev_MAC = cur_MAC) """,
|
||||
(startTime, cycle) )
|
||||
|
||||
print_log ('New devices - Insert Connection into session table')
|
||||
sql.execute ("""INSERT INTO Sessions (ses_MAC, ses_IP, ses_EventTypeConnection, ses_DateTimeConnection,
|
||||
ses_EventTypeDisconnection, ses_DateTimeDisconnection, ses_StillConnected, ses_AdditionalInfo)
|
||||
SELECT cur_MAC, cur_IP,'Connected',?, NULL , NULL ,1, cur_Vendor
|
||||
FROM CurrentScan
|
||||
WHERE cur_ScanCycle = ?
|
||||
AND NOT EXISTS (SELECT 1 FROM Sessions
|
||||
WHERE ses_MAC = cur_MAC) """,
|
||||
(startTime, cycle) )
|
||||
|
||||
# arpscan - Create new devices
|
||||
print_log ('New devices - 2 Create devices')
|
||||
sql.execute ("""INSERT INTO Devices (dev_MAC, dev_name, dev_Vendor,
|
||||
@@ -929,17 +948,10 @@ def update_devices_data_from_scan ():
|
||||
sql.executemany ("UPDATE Devices SET dev_Vendor = ? WHERE dev_MAC = ? ",
|
||||
recordsToUpdate )
|
||||
|
||||
# New Apple devices -> Cycle 15
|
||||
print_log ('Update devices - 6 Cycle for Apple devices')
|
||||
sql.execute ("""UPDATE Devices SET dev_ScanCycle = 15
|
||||
WHERE dev_FirstConnection = ?
|
||||
AND UPPER(dev_Vendor) LIKE '%APPLE%' """,
|
||||
(startTime,) )
|
||||
|
||||
print_log ('Update devices end')
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Feature #43 - Resoltion name for unknown devices
|
||||
# Feature #43 - Resolve name for unknown devices
|
||||
def update_devices_names ():
|
||||
# Initialize variables
|
||||
recordsToUpdate = []
|
||||
@@ -1162,11 +1174,22 @@ def skip_repeated_notifications ():
|
||||
def email_reporting ():
|
||||
global mail_text
|
||||
global mail_html
|
||||
|
||||
# Reporting section
|
||||
print ('\nReporting...')
|
||||
openDB()
|
||||
|
||||
# Disable reporting on events for devices where reporting is disabled based on the MAC address
|
||||
sql.execute ("""UPDATE Events SET eve_PendingAlertEmail = 0
|
||||
WHERE eve_PendingAlertEmail = 1 AND eve_EventType != 'Device Down' AND eve_MAC IN
|
||||
(
|
||||
SELECT dev_MAC FROM Devices WHERE dev_AlertEvents = 0
|
||||
)""")
|
||||
sql.execute ("""UPDATE Events SET eve_PendingAlertEmail = 0
|
||||
WHERE eve_PendingAlertEmail = 1 AND eve_EventType = 'Device Down' AND eve_MAC IN
|
||||
(
|
||||
SELECT dev_MAC FROM Devices WHERE dev_AlertDeviceDown = 0
|
||||
)""")
|
||||
|
||||
# Open text Template
|
||||
template_file = open(PIALERT_BACK_PATH + '/report_template.txt', 'r')
|
||||
mail_text = template_file.read()
|
||||
@@ -1182,27 +1205,27 @@ def email_reporting ():
|
||||
mail_text = mail_text.replace ('<REPORT_DATE>', timeFormated)
|
||||
mail_html = mail_html.replace ('<REPORT_DATE>', timeFormated)
|
||||
|
||||
mail_text = mail_text.replace ('<SCAN_CYCLE>', cycle )
|
||||
# mail_text = mail_text.replace ('<SCAN_CYCLE>', cycle )
|
||||
mail_html = mail_html.replace ('<SCAN_CYCLE>', cycle )
|
||||
|
||||
mail_text = mail_text.replace ('<SERVER_NAME>', socket.gethostname() )
|
||||
mail_html = mail_html.replace ('<SERVER_NAME>', socket.gethostname() )
|
||||
|
||||
mail_text = mail_text.replace ('<PIALERT_VERSION>', VERSION )
|
||||
mail_html = mail_html.replace ('<PIALERT_VERSION>', VERSION )
|
||||
# mail_text = mail_text.replace ('<PIALERT_VERSION>', VERSION )
|
||||
# mail_html = mail_html.replace ('<PIALERT_VERSION>', VERSION )
|
||||
|
||||
mail_text = mail_text.replace ('<PIALERT_VERSION_DATE>', VERSION_DATE )
|
||||
mail_html = mail_html.replace ('<PIALERT_VERSION_DATE>', VERSION_DATE )
|
||||
# mail_text = mail_text.replace ('<PIALERT_VERSION_DATE>', VERSION_DATE )
|
||||
# mail_html = mail_html.replace ('<PIALERT_VERSION_DATE>', VERSION_DATE )
|
||||
|
||||
mail_text = mail_text.replace ('<PIALERT_YEAR>', VERSION_YEAR )
|
||||
mail_html = mail_html.replace ('<PIALERT_YEAR>', VERSION_YEAR )
|
||||
# mail_text = mail_text.replace ('<PIALERT_YEAR>', VERSION_YEAR )
|
||||
# mail_html = mail_html.replace ('<PIALERT_YEAR>', VERSION_YEAR )
|
||||
|
||||
# Compose Internet Section
|
||||
print (' Formating report...')
|
||||
mail_section_Internet = False
|
||||
mail_text_Internet = ''
|
||||
mail_html_Internet = ''
|
||||
text_line_template = ' {} \t{}\t{}\t{}\n'
|
||||
text_line_template = '{} \t{}\t{}\t{}\n'
|
||||
html_line_template = '<tr>\n'+ \
|
||||
' <td> <a href="{}{}"> {} </a> </td>\n <td> {} </td>\n'+ \
|
||||
' <td style="font-size: 24px; color:#D02020"> {} </td>\n'+ \
|
||||
@@ -1212,16 +1235,18 @@ def email_reporting ():
|
||||
WHERE eve_PendingAlertEmail = 1 AND eve_MAC = 'Internet'
|
||||
ORDER BY eve_DateTime""")
|
||||
|
||||
|
||||
for eventAlert in sql :
|
||||
mail_section_Internet = True
|
||||
mail_text_Internet += text_line_template.format (
|
||||
eventAlert['eve_EventType'], eventAlert['eve_DateTime'],
|
||||
eventAlert['eve_IP'], eventAlert['eve_AdditionalInfo'])
|
||||
'Event:', eventAlert['eve_EventType'], 'Time:', eventAlert['eve_DateTime'],
|
||||
'IP:', eventAlert['eve_IP'], 'More Info:', eventAlert['eve_AdditionalInfo'])
|
||||
mail_html_Internet += html_line_template.format (
|
||||
REPORT_DEVICE_URL, eventAlert['eve_MAC'],
|
||||
eventAlert['eve_EventType'], eventAlert['eve_DateTime'],
|
||||
eventAlert['eve_IP'], eventAlert['eve_AdditionalInfo'])
|
||||
|
||||
|
||||
format_report_section (mail_section_Internet, 'SECTION_INTERNET',
|
||||
'TABLE_INTERNET', mail_text_Internet, mail_html_Internet)
|
||||
|
||||
@@ -1229,7 +1254,7 @@ def email_reporting ():
|
||||
mail_section_new_devices = False
|
||||
mail_text_new_devices = ''
|
||||
mail_html_new_devices = ''
|
||||
text_line_template = ' {}\t{}\t{}\t{}\t{}\n'
|
||||
text_line_template = '{}\t{}\n\t{}\t{}\n\t{}\t{}\n\t{}\t{}\n\t{}\t{}\n\n'
|
||||
html_line_template = '<tr>\n'+ \
|
||||
' <td> <a href="{}{}"> {} </a> </td>\n <td> {} </td>\n'+\
|
||||
' <td> {} </td>\n <td> {} </td>\n <td> {} </td>\n</tr>\n'
|
||||
@@ -1242,14 +1267,13 @@ def email_reporting ():
|
||||
for eventAlert in sql :
|
||||
mail_section_new_devices = True
|
||||
mail_text_new_devices += text_line_template.format (
|
||||
eventAlert['eve_MAC'], eventAlert['eve_DateTime'],
|
||||
eventAlert['eve_IP'], eventAlert['dev_Name'],
|
||||
eventAlert['eve_AdditionalInfo'])
|
||||
'Name: ', eventAlert['dev_Name'], 'MAC: ', eventAlert['eve_MAC'], 'IP: ', eventAlert['eve_IP'],
|
||||
'Time: ', eventAlert['eve_DateTime'], 'More Info: ', eventAlert['eve_AdditionalInfo'])
|
||||
mail_html_new_devices += html_line_template.format (
|
||||
REPORT_DEVICE_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'],
|
||||
eventAlert['eve_DateTime'], eventAlert['eve_IP'],
|
||||
eventAlert['dev_Name'], eventAlert['eve_AdditionalInfo'])
|
||||
|
||||
|
||||
format_report_section (mail_section_new_devices, 'SECTION_NEW_DEVICES',
|
||||
'TABLE_NEW_DEVICES', mail_text_new_devices, mail_html_new_devices)
|
||||
|
||||
@@ -1257,7 +1281,7 @@ def email_reporting ():
|
||||
mail_section_devices_down = False
|
||||
mail_text_devices_down = ''
|
||||
mail_html_devices_down = ''
|
||||
text_line_template = ' {}\t{}\t{}\t{}\n'
|
||||
text_line_template = '{}\t{}\n\t{}\t{}\n\t{}\t{}\n\t{}\t{}\n\n'
|
||||
html_line_template = '<tr>\n'+ \
|
||||
' <td> <a href="{}{}"> {} </a> </td>\n <td> {} </td>\n'+ \
|
||||
' <td> {} </td>\n <td> {} </td>\n</tr>\n'
|
||||
@@ -1270,8 +1294,8 @@ def email_reporting ():
|
||||
for eventAlert in sql :
|
||||
mail_section_devices_down = True
|
||||
mail_text_devices_down += text_line_template.format (
|
||||
eventAlert['eve_MAC'], eventAlert['eve_DateTime'],
|
||||
eventAlert['eve_IP'], eventAlert['dev_Name'])
|
||||
'Name: ', eventAlert['dev_Name'], 'MAC: ', eventAlert['eve_MAC'],
|
||||
'Time: ', eventAlert['eve_DateTime'],'IP: ', eventAlert['eve_IP'])
|
||||
mail_html_devices_down += html_line_template.format (
|
||||
REPORT_DEVICE_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'],
|
||||
eventAlert['eve_DateTime'], eventAlert['eve_IP'],
|
||||
@@ -1284,7 +1308,7 @@ def email_reporting ():
|
||||
mail_section_events = False
|
||||
mail_text_events = ''
|
||||
mail_html_events = ''
|
||||
text_line_template = ' {}\t{}\t{}\t{}\t{}\t{}\n'
|
||||
text_line_template = '{}\t{}\n\t{}\t{}\n\t{}\t{}\n\t{}\t{}\n\t{}\t{}\n\t{}\t{}\n\n'
|
||||
html_line_template = '<tr>\n <td>'+ \
|
||||
' <a href="{}{}"> {} </a> </td>\n <td> {} </td>\n'+ \
|
||||
' <td> {} </td>\n <td> {} </td>\n <td> {} </td>\n'+ \
|
||||
@@ -1299,9 +1323,9 @@ def email_reporting ():
|
||||
for eventAlert in sql :
|
||||
mail_section_events = True
|
||||
mail_text_events += text_line_template.format (
|
||||
eventAlert['eve_MAC'], eventAlert['eve_DateTime'],
|
||||
eventAlert['eve_IP'], eventAlert['eve_EventType'],
|
||||
eventAlert['dev_Name'], eventAlert['eve_AdditionalInfo'])
|
||||
'Name: ', eventAlert['dev_Name'], 'MAC: ', eventAlert['eve_MAC'],
|
||||
'IP: ', eventAlert['eve_IP'],'Time: ', eventAlert['eve_DateTime'],
|
||||
'Event: ', eventAlert['eve_EventType'],'More Info: ', eventAlert['eve_AdditionalInfo'])
|
||||
mail_html_events += html_line_template.format (
|
||||
REPORT_DEVICE_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'],
|
||||
eventAlert['eve_DateTime'], eventAlert['eve_IP'],
|
||||
@@ -1324,8 +1348,19 @@ def email_reporting ():
|
||||
send_email (mail_text, mail_html)
|
||||
else :
|
||||
print (' Skip mail...')
|
||||
if REPORT_NTFY :
|
||||
print (' Sending report by NTFY...')
|
||||
send_ntfy (mail_text)
|
||||
else :
|
||||
print (' Skip NTFY...')
|
||||
if REPORT_PUSHSAFER :
|
||||
print (' Sending report by PUSHSAFER...')
|
||||
send_pushsafer (mail_text)
|
||||
else :
|
||||
print (' Skip PUSHSAFER...')
|
||||
else :
|
||||
print (' No changes to report...')
|
||||
|
||||
|
||||
|
||||
# Clean Pending Alert Events
|
||||
@@ -1342,7 +1377,33 @@ def email_reporting ():
|
||||
# Commit changes
|
||||
sql_connection.commit()
|
||||
closeDB()
|
||||
#-------------------------------------------------------------------------------
|
||||
def send_ntfy (_Text):
|
||||
requests.post("https://ntfy.sh/{}".format(NTFY_TOPIC),
|
||||
data=_Text,
|
||||
headers={
|
||||
"Title": "Pi.Alert Notification",
|
||||
"Actions": "view, Open Dashboard, "+ REPORT_DASHBOARD_URL,
|
||||
"Priority": "urgent",
|
||||
"Tags": "warning"
|
||||
})
|
||||
|
||||
def send_pushsafer (_Text):
|
||||
url = 'https://www.pushsafer.com/api'
|
||||
post_fields = {
|
||||
"t" : 'Pi.Alert Message',
|
||||
"m" : _Text,
|
||||
"s" : 11,
|
||||
"v" : 3,
|
||||
"i" : 148,
|
||||
"c" : '#ef7f7f',
|
||||
"d" : 'a',
|
||||
"u" : REPORT_DASHBOARD_URL,
|
||||
"ut" : 'Open Pi.Alert',
|
||||
"k" : PUSHSAFER_TOKEN,
|
||||
}
|
||||
requests.post(url, data=post_fields)
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
def format_report_section (pActive, pSection, pTable, pText, pHTML):
|
||||
global mail_text
|
||||
@@ -1413,16 +1474,66 @@ def send_email (pText, pHTML):
|
||||
# Send mail
|
||||
smtp_connection = smtplib.SMTP (SMTP_SERVER, SMTP_PORT)
|
||||
smtp_connection.ehlo()
|
||||
smtp_connection.starttls()
|
||||
smtp_connection.ehlo()
|
||||
smtp_connection.login (SMTP_USER, SMTP_PASS)
|
||||
# smtp_connection.starttls()
|
||||
# smtp_connection.ehlo()
|
||||
# smtp_connection.login (SMTP_USER, SMTP_PASS)
|
||||
if not SafeParseGlobalBool("SMTP_SKIP_TLS"):
|
||||
smtp_connection.starttls()
|
||||
smtp_connection.ehlo()
|
||||
if not SafeParseGlobalBool("SMTP_SKIP_LOGIN"):
|
||||
smtp_connection.login (SMTP_USER, SMTP_PASS)
|
||||
smtp_connection.sendmail (REPORT_FROM, REPORT_TO, msg.as_string())
|
||||
smtp_connection.quit()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
def SafeParseGlobalBool(boolVariable):
|
||||
if boolVariable in globals():
|
||||
return eval(boolVariable)
|
||||
return False
|
||||
|
||||
#===============================================================================
|
||||
# DB
|
||||
#===============================================================================
|
||||
def upgradeDB ():
|
||||
|
||||
openDB()
|
||||
|
||||
# indicates, if Online_History table is available
|
||||
onlineHistoryAvailable = sql.execute("""
|
||||
SELECT name FROM sqlite_master WHERE type='table'
|
||||
AND name='Online_History';
|
||||
""").fetchall() != []
|
||||
|
||||
# Check if it is incompatible (Check if table has all required columns)
|
||||
isIncompatible = False
|
||||
|
||||
if onlineHistoryAvailable :
|
||||
isIncompatible = sql.execute ("""
|
||||
SELECT COUNT(*) AS CNTREC FROM pragma_table_info('Online_History') WHERE name='Archived_Devices'
|
||||
""").fetchone()[0] == 0
|
||||
|
||||
# Drop table if available, but incompatible
|
||||
if onlineHistoryAvailable and isIncompatible:
|
||||
print_log ('Table is incompatible, Dropping the Online_History table)')
|
||||
sql.execute("DROP TABLE Online_History;")
|
||||
onlineHistoryAvailable = False
|
||||
|
||||
if onlineHistoryAvailable == False :
|
||||
sql.execute("""
|
||||
CREATE TABLE "Online_History" (
|
||||
"Index" INTEGER,
|
||||
"Scan_Date" TEXT,
|
||||
"Online_Devices" INTEGER,
|
||||
"Down_Devices" INTEGER,
|
||||
"All_Devices" INTEGER,
|
||||
"Archived_Devices" INTEGER,
|
||||
PRIMARY KEY("Index" AUTOINCREMENT)
|
||||
);
|
||||
""")
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
def openDB ():
|
||||
global sql_connection
|
||||
global sql
|
||||
|
||||
@@ -14,20 +14,19 @@
|
||||
|
||||
<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)">
|
||||
<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: 36px; font-weight: bold; color:#7F6000; text-shadow: 4px 4px 6px #909090">
|
||||
<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>
|
||||
<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><REPORT_DATE></b> </td>
|
||||
<td width=34%> Scan Cycle: <b><SCAN_CYCLE></b> </td>
|
||||
<td width=33%> Server: <b><SERVER_NAME></b> </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=50%> Report Date: <b><REPORT_DATE></b> </td>
|
||||
<td width=50%> Scan Cycle: <b><SCAN_CYCLE></b> </td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -36,9 +35,9 @@
|
||||
<tr>
|
||||
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
||||
<SECTION_INTERNET>
|
||||
<p style="font-size: 24px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Internet: </p>
|
||||
<p style="font-size: 24px; font-weight: bold; color:#C04040"> 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)">
|
||||
<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> Event Type </th>
|
||||
<th width=130> Datetime </th>
|
||||
@@ -53,11 +52,11 @@
|
||||
</SECTION_INTERNET>
|
||||
|
||||
<SECTION_NEW_DEVICES>
|
||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> New Devices: </p>
|
||||
<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; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<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=150> MAC </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th width=140> Device Name </th>
|
||||
@@ -71,9 +70,9 @@
|
||||
</SECTION_NEW_DEVICES>
|
||||
|
||||
<SECTION_DEVICES_DOWN>
|
||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Devices Down: </p>
|
||||
<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; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<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>
|
||||
@@ -88,9 +87,9 @@
|
||||
</SECTION_DEVICES_DOWN>
|
||||
|
||||
<SECTION_EVENTS>
|
||||
<p style="font-size: 14px; font-weight: bold; color:#409040; text-shadow: 2px 2px 4px #A0A0A0"> Events: </p>
|
||||
<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; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<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>
|
||||
@@ -108,11 +107,10 @@
|
||||
|
||||
<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">
|
||||
<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=25% style="text-align:Left"> <span style="display:inline-block; transform: rotate(180deg)">©</span> <PIALERT_YEAR> Puche</td>
|
||||
<td width=50% style="text-align:center"> Pi.Alert - <SERVER_NAME></td>
|
||||
<td width=50% style="text-align:center"> Pi.Alert <PIALERT_VERSION> (<PIALERT_VERSION_DATE>) </td>
|
||||
<td width=25% style="text-align:right"> GNU GPLv3</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -120,4 +118,4 @@
|
||||
</table>
|
||||
</font>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
@@ -1,27 +1,19 @@
|
||||
========================================
|
||||
Pi.Alert Report
|
||||
========================================
|
||||
|
||||
Report Date: <REPORT_DATE>
|
||||
Scan Cycle: <SCAN_CYCLE>
|
||||
Server: <SERVER_NAME>
|
||||
|
||||
<SECTION_INTERNET>
|
||||
Internet
|
||||
----------------------------------------------------------------------
|
||||
<TABLE_INTERNET>
|
||||
</SECTION_INTERNET><SECTION_NEW_DEVICES>
|
||||
Report Date: <REPORT_DATE>
|
||||
Server: <SERVER_NAME>
|
||||
<SECTION_NEW_DEVICES>
|
||||
New Devices
|
||||
----------------------------------------------------------------------
|
||||
----------------------
|
||||
<TABLE_NEW_DEVICES>
|
||||
</SECTION_NEW_DEVICES><SECTION_DEVICES_DOWN>
|
||||
Devices Down
|
||||
----------------------------------------------------------------------
|
||||
----------------------
|
||||
<TABLE_DEVICES_DOWN>
|
||||
</SECTION_DEVICES_DOWN><SECTION_EVENTS>
|
||||
Events
|
||||
----------------------------------------------------------------------
|
||||
----------------------
|
||||
<TABLE_EVENTS>
|
||||
</SECTION_EVENTS>
|
||||
----------------------------------------------------------------------
|
||||
(?) <PIALERT_YEAR> Puche Pi.Alert <PIALERT_VERSION> (<PIALERT_VERSION_DATE>) GNU GPLv3
|
||||
</SECTION_EVENTS><SECTION_INTERNET>
|
||||
Internet
|
||||
----------------------
|
||||
<TABLE_INTERNET>
|
||||
</SECTION_INTERNET>
|
||||
2013
back/speedtest-cli
Normal file
@@ -24,17 +24,17 @@ sudo mkdir -p 2_backup
|
||||
sudo cp *.txt 2_backup
|
||||
sudo cp *.csv 2_backup
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/iab/iab.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/iab/iab.txt
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/iab/iab.csv
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/iab/iab.txt
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui28/mam.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui28/mam.txt
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/oui28/mam.csv
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/oui28/mam.txt
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui36/oui36.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui36/oui36.txt
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/oui36/oui36.csv
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/oui36/oui36.txt
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui/oui.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui/oui.txt
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/oui/oui.csv
|
||||
sudo curl $1 -# -O https://standards-oui.ieee.org/oui/oui.txt
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
@@ -7,34 +7,51 @@
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
PIALERT_PATH = '/home/pi/pialert'
|
||||
DB_PATH = PIALERT_PATH + '/db/pialert.db'
|
||||
LOG_PATH = PIALERT_PATH + '/log'
|
||||
VENDORS_DB = '/usr/share/arp-scan/ieee-oui.txt'
|
||||
PRINT_LOG = False
|
||||
PIALERT_PATH = '/home/pi/pialert'
|
||||
DB_PATH = PIALERT_PATH + '/db/pialert.db'
|
||||
LOG_PATH = PIALERT_PATH + '/log'
|
||||
VENDORS_DB = '/usr/share/arp-scan/ieee-oui.txt'
|
||||
PRINT_LOG = False
|
||||
TIMEZONE = 'Europe/Berlin'
|
||||
PIALERT_WEB_PROTECTION = False
|
||||
PIALERT_WEB_PASSWORD = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'
|
||||
|
||||
SMTP_SERVER = 'smtp.gmail.com'
|
||||
SMTP_PORT = 587
|
||||
SMTP_USER = 'user@gmail.com'
|
||||
SMTP_PASS = 'password'
|
||||
# EMAIL settings
|
||||
SMTP_SERVER = 'smtp.gmail.com'
|
||||
SMTP_PORT = 587
|
||||
SMTP_USER = 'user@gmail.com'
|
||||
SMTP_PASS = 'password'
|
||||
SMTP_SKIP_TLS = False
|
||||
SMTP_SKIP_LOGIN = False
|
||||
|
||||
REPORT_MAIL = False
|
||||
REPORT_FROM = 'Pi.Alert <' + SMTP_USER +'>'
|
||||
REPORT_TO = 'user@gmail.com'
|
||||
REPORT_DEVICE_URL = 'http://pi.alert/deviceDetails.php?mac='
|
||||
REPORT_MAIL = False
|
||||
REPORT_FROM = 'Pi.Alert <' + SMTP_USER +'>'
|
||||
REPORT_TO = 'user@gmail.com'
|
||||
REPORT_DEVICE_URL = 'http://pi.alert/deviceDetails.php?mac='
|
||||
REPORT_DASHBOARD_URL = 'http://pi.alert/'
|
||||
|
||||
# QUERY_MYIP_SERVER = 'https://diagnostic.opendns.com/myip'
|
||||
QUERY_MYIP_SERVER = 'http://ipv4.icanhazip.com'
|
||||
DDNS_ACTIVE = False
|
||||
DDNS_DOMAIN = 'your_domain.freeddns.org'
|
||||
DDNS_USER = 'dynu_user'
|
||||
DDNS_PASSWORD = 'A0000000B0000000C0000000D0000000'
|
||||
DDNS_UPDATE_URL = 'https://api.dynu.com/nic/update?'
|
||||
# NTFY (https://ntfy.sh/) settings
|
||||
REPORT_NTFY = False
|
||||
NTFY_TOPIC = 'replace_my_secure_topicname_91h889f28'
|
||||
REPORT_DASHBOARD_URL = 'http://pi.alert/'
|
||||
|
||||
PIHOLE_ACTIVE = False
|
||||
PIHOLE_DB = '/etc/pihole/pihole-FTL.db'
|
||||
DHCP_ACTIVE = False
|
||||
DHCP_LEASES = '/etc/pihole/dhcp.leases'
|
||||
# PUSHSAFER (https://www.pushsafer.com/) settings
|
||||
REPORT_PUSHSAFER = False
|
||||
PUSHSAFER_TOKEN = 'ApiKey'
|
||||
|
||||
# QUERY_MYIP_SERVER = 'https://diagnostic.opendns.com/myip'
|
||||
QUERY_MYIP_SERVER = 'http://ipv4.icanhazip.com'
|
||||
DDNS_ACTIVE = False
|
||||
DDNS_DOMAIN = 'your_domain.freeddns.org'
|
||||
DDNS_USER = 'dynu_user'
|
||||
DDNS_PASSWORD = 'A0000000B0000000C0000000D0000000'
|
||||
DDNS_UPDATE_URL = 'https://api.dynu.com/nic/update?'
|
||||
|
||||
# PIHOLE settings
|
||||
PIHOLE_ACTIVE = False
|
||||
PIHOLE_DB = '/etc/pihole/pihole-FTL.db'
|
||||
DHCP_ACTIVE = False
|
||||
DHCP_LEASES = '/etc/pihole/dhcp.leases'
|
||||
|
||||
# arp-scan options & samples
|
||||
#
|
||||
@@ -47,4 +64,4 @@ DHCP_LEASES = '/etc/pihole/dhcp.leases'
|
||||
# Scan using interface eth0
|
||||
# SCAN_SUBNETS = '--localnet --interface=eth0'
|
||||
|
||||
SCAN_SUBNETS = '--localnet'
|
||||
SCAN_SUBNETS = '--localnet'
|
||||
|
||||
32
config/reset_password.sh
Normal file
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
PIA_CONF_FILE='pialert.conf'
|
||||
PIA_PASS=$1
|
||||
echo "Check of key PIALERT_WEB_PROTECTION exists:"
|
||||
CHECK_PROT=$(grep "PIALERT_WEB_PROTECTION" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PROT -eq 0 ]
|
||||
then
|
||||
cp $PIA_CONF_FILE $PIA_CONF_FILE.bak1
|
||||
echo " Key not found. Key 'PIALERT_WEB_PROTECTION' will be created."
|
||||
echo " Check Config after the script is finished."
|
||||
sed -i "/^VENDORS_DB.*/a PIALERT_WEB_PROTECTION = False" $PIA_CONF_FILE > pialert.tmp
|
||||
else
|
||||
echo " Key exists. Nothing to do."
|
||||
fi
|
||||
echo ""
|
||||
echo "Check of key PIALERT_WEB_PASSWORD exists:"
|
||||
CHECK_PWD=$(grep "PIALERT_WEB_PASSWORD" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PWD -eq 0 ]
|
||||
then
|
||||
cp $PIA_CONF_FILE $PIA_CONF_FILE.bak2
|
||||
echo " Key not found. Key 'PIALERT_WEB_PASSWORD' will be created."
|
||||
echo " Check Config after the script is finished."
|
||||
echo " If the key is just created, please run the script again to set a new password".
|
||||
sed -i "/^PIALERT_WEB_PROTECTION.*/a PIALERT_WEB_PASSWORD = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'" $PIA_CONF_FILE
|
||||
else
|
||||
echo " The password '$1' is hashed"
|
||||
PIA_PASS_HASH=$(echo -n $PIA_PASS | sha256sum | awk '{print $1}')
|
||||
echo " The hashed password is:"
|
||||
echo " $PIA_PASS_HASH"
|
||||
sed -i "/PIALERT_WEB_PASSWORD/c\PIALERT_WEB_PASSWORD = '$PIA_PASS_HASH'" $PIA_CONF_FILE
|
||||
echo " The hash was saved in the configuration file"
|
||||
fi
|
||||
@@ -1,3 +1,3 @@
|
||||
VERSION = '3.02'
|
||||
VERSION_YEAR = '2021'
|
||||
VERSION_DATE = '2021-04-24'
|
||||
VERSION = '3.5_leiweibau'
|
||||
VERSION_YEAR = '2022'
|
||||
VERSION_DATE = '2022-07-07'
|
||||
16
docker-compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
version: "3"
|
||||
services:
|
||||
pialert:
|
||||
build: .
|
||||
container_name: pialert
|
||||
network_mode: "host"
|
||||
restart: always
|
||||
volumes:
|
||||
- ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config
|
||||
- ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
||||
- ${LOGS_LOCATION}/tmp:/home/pi/pialert/log
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
- PORT=${PORT}
|
||||
- HOST_USER_ID=${HOST_USER_ID}
|
||||
- HOST_USER_GID=${HOST_USER_GID}
|
||||
114
dockerfiles/README.md
Normal file
@@ -0,0 +1,114 @@
|
||||
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker.yml)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
<a href="https://hub.docker.com/r/jokobsk/pi.alert">
|
||||
<img src="https://img.shields.io/docker/pulls/jokobsk/pi.alert?logo=docker&color=0aa8d2&logoColor=fff" alt="Docker Pulls">
|
||||
</a>
|
||||
|
||||
# 🐳 A docker image for Pi.Alert
|
||||
|
||||
🥇 Pi.Alert credit goes to [pucherot/Pi.Alert](https://github.com/pucherot/Pi.Alert). <br/>
|
||||
🐳 Docker Image: [jokobsk/Pi.Alert](https://registry.hub.docker.com/r/jokobsk/pi.alert). <br/>
|
||||
📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) <br/>
|
||||
📚 [Dockerfile instructions](https://github.com/jokob-sk/Pi.Alert/blob/main//dockerfiles/README.md).
|
||||
|
||||
Big thanks to <a href="https://github.com/Macleykun">@Macleykun</a> for help and tips&tricks for Dockerfile(s):
|
||||
|
||||
<a href="https://github.com/Macleykun">
|
||||
<img src="https://avatars.githubusercontent.com/u/26381427?size=50">
|
||||
</a>
|
||||
|
||||
## ℹ Usage
|
||||
|
||||
pialert.conf
|
||||
- Everytime you rebuilt the container with a new image check if new settings have been added in [pialert.conf](https://github.com/jokob-sk/Pi.Alert/blob/main/config/pialert.conf).
|
||||
|
||||
Network
|
||||
- You will have to run the container on the host network, e.g: `sudo docker run --rm --net=host jokobsk/pi.alert`
|
||||
|
||||
Default Port
|
||||
- The app is accessible on the port `:20211`.
|
||||
|
||||
> Please note - the cronjob is executed every 3 and 5 minutes so wait that long for all of the scans to run.
|
||||
|
||||
## 💾 Setup and Backups
|
||||
|
||||
1. (**required**) Download `pialert.conf` and `version.conf` from [here](https://github.com/jokob-sk/Pi.Alert/tree/main/config).
|
||||
2. (**required**) In `pialert.conf` specify your network adapter (will probably be `eth0` or `eth1`) and the network filter (which **significantly** speeds up the scan process), e.g. if your DHCP server assigns IPs in the 192.168.1.0 to 192.168.1.255 range specify it the following way:
|
||||
* `SCAN_SUBNETS = '192.168.1.0/24 --interface=eth0'`
|
||||
3. (**required**) Use your configuration by:
|
||||
* Mapping the container folder `/home/pi/pialert/config` to a persistent folder containing `pialert.conf` and `version.conf`,
|
||||
* ... or by mapping the files individually `pialert.conf:/home/pi/pialert/config/pialert.conf` and `version.conf:/home/pi/pialert/config/version.conf`
|
||||
4. Set the `TZ` environment variable to your current time zone (e.g.`Europe/Paris`). Find your time zone [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
||||
5. Database backup
|
||||
* The DB is stored under `/home/pi/pialert/db/pialert.db`. Map this file to a persistent location (see [Examples](https://github.com/jokob-sk/Pi.Alert/tree/main/dockerfiles#page_facing_up-examples) for details). If facing issues (AJAX errors, can't write to DB, etc, make sure permissions are set correctly, alternatively check the logs under `/home/pi/pialert/log`)
|
||||
6. The container supports mapping to local User nad Group IDs. Specify the enviroment variables `HOST_USER_ID` and `HOST_USER_GID` if needed.
|
||||
7. You can override the port by specifying the `PORT` env variable.
|
||||
|
||||
Config examples can be found below.
|
||||
|
||||
## 📄 Examples
|
||||
|
||||
### Example 1
|
||||
|
||||
`docker-compose.yml`
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
services:
|
||||
pialert:
|
||||
container_name: pialert
|
||||
image: "jokobsk/pi.alert:latest"
|
||||
network_mode: "host"
|
||||
restart: always
|
||||
volumes:
|
||||
- ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config
|
||||
- ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
||||
- ${LOGS_LOCATION}/tmp:/home/pi/pialert/log
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
- PORT=${PORT}
|
||||
- HOST_USER_ID=${HOST_USER_ID}
|
||||
- HOST_USER_GID=${HOST_USER_GID}
|
||||
```
|
||||
|
||||
`.env` file
|
||||
|
||||
```yaml
|
||||
#GLOBAL
|
||||
APP_DATA_LOCATION=/path/to/docker_appdata
|
||||
APP_CONFIG_LOCATION=/path/to/docker_config
|
||||
LOGS_LOCATION=/path/to/docker_logs
|
||||
TZ=Europe/Paris
|
||||
HOST_USER_ID=1000
|
||||
HOST_USER_GID=1000
|
||||
PORT=20211
|
||||
```
|
||||
|
||||
To run the container execute: `sudo docker-compose --env-file /path/to/.env up`
|
||||
|
||||
### Example 2
|
||||
|
||||
Courtesy of [pbek](https://github.com/pbek). The volume `pialert_db` is used by the db directory. The two config files are mounted directly from a local folder to their places in the config folder. You can backup the `docker-compose.yaml` folder and the docker volumes folder.
|
||||
|
||||
```yaml
|
||||
pialert:
|
||||
image: jokobsk/pi.alert
|
||||
ports:
|
||||
- "80:20211/tcp"
|
||||
environment:
|
||||
- TZ=Europe/Vienna
|
||||
networks:
|
||||
local:
|
||||
ipv4_address: 192.168.1.2
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- pialert_db:/home/pi/pialert/db
|
||||
- ./pialert/pialert.conf:/home/pi/pialert/config/pialert.conf
|
||||
- ./pialert/version.conf:/home/pi/pialert/config/version.conf
|
||||
```
|
||||
|
||||
## ☕ Support
|
||||
|
||||
> Disclaimer: This is my second container and I might have used unconventional hacks so if anyone is more experienced, feel free to fork/create pull requests. Also, please only donate if you don't have any debt yourself. Support yourself first, then others.
|
||||
|
||||
<a href="https://www.buymeacoffee.com/jokobsk" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 30px !important;width: 117px !important;" width="150px" ></a>
|
||||
15
dockerfiles/start.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
/home/pi/pialert/dockerfiles/user-mapping.sh
|
||||
|
||||
# if custom variables not set we do not need to do anything
|
||||
if [ -n "${TZ}" ]; then
|
||||
sed -ie "s|Europe/Berlin|${TZ}|g" /home/pi/pialert/install/pialert.cron
|
||||
sed -ie "s|Europe/Berlin|${TZ}|g" /home/pi/pialert/config/pialert.conf
|
||||
crontab < /home/pi/pialert/install/pialert.cron
|
||||
fi
|
||||
if [ -n "${PORT}" ]; then
|
||||
sed -ie 's/= 20211/= '${PORT}'/g' /etc/lighttpd/lighttpd.conf
|
||||
fi
|
||||
|
||||
/etc/init.d/lighttpd start
|
||||
cron -f
|
||||
29
dockerfiles/user-mapping.sh
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "${USER}" ]; then
|
||||
echo "We need USER to be set!"; exit 100
|
||||
fi
|
||||
|
||||
# if both not set we do not need to do anything
|
||||
if [ -z "${HOST_USER_ID}" -a -z "${HOST_USER_GID}" ]; then
|
||||
echo "Nothing to do here." ; exit 0
|
||||
fi
|
||||
|
||||
# reset user_?id to either new id or if empty old (still one of above
|
||||
# might not be set)
|
||||
USER_ID=${HOST_USER_ID:=$USER_ID}
|
||||
USER_GID=${HOST_USER_GID:=$USER_GID}
|
||||
|
||||
LINE=$(grep -F "${USER}" /etc/passwd)
|
||||
# replace all ':' with a space and create array
|
||||
array=( ${LINE//:/ } )
|
||||
|
||||
# home is 5th element
|
||||
USER_HOME=${array[4]}
|
||||
|
||||
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:[0-9]*/${USER}:\1:${USER_ID}:${USER_GID}/" /etc/passwd
|
||||
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/" /etc/group
|
||||
|
||||
chown -R ${USER_ID}:${USER_GID} ${USER_HOME}
|
||||
|
||||
exec su - "${USER}"
|
||||
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 231 KiB |
BIN
docs/img/1_devices_dark.jpg
Normal file
|
After Width: | Height: | Size: 253 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 244 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 258 KiB |
|
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 232 KiB |
BIN
docs/img/2_4_device_nmap.jpg
Normal file
|
After Width: | Height: | Size: 240 KiB |
BIN
docs/img/2_5_device_nmap_ready.jpg
Normal file
|
After Width: | Height: | Size: 271 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 290 KiB |
BIN
docs/img/5_maintain.jpg
Normal file
|
After Width: | Height: | Size: 250 KiB |
17
front/css/dark-patch-cal.css
Normal file
@@ -0,0 +1,17 @@
|
||||
.fc-sat {
|
||||
background-color: #444D56; }
|
||||
.fc-sun {
|
||||
background-color: #444D56; }
|
||||
.fc-today {
|
||||
background-color: #8D9AAC !important;
|
||||
border: none !important;
|
||||
}
|
||||
.fc-cell-content {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.fc-widget-header {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.fc-unthemed .fc-content, .fc-unthemed .fc-divider, .fc-unthemed .fc-list-heading td, .fc-unthemed .fc-list-view, .fc-unthemed .fc-popover, .fc-unthemed .fc-row, .fc-unthemed tbody, .fc-unthemed td, .fc-unthemed th, .fc-unthemed thead{
|
||||
border-color: #353c42 !important;
|
||||
}
|
||||
725
front/css/dark-patch.css
Normal file
@@ -0,0 +1,725 @@
|
||||
/* Pi-hole: A black hole for Internet advertisements
|
||||
* (c) 2020 Pi-hole, LLC (https://pi-hole.net)
|
||||
* Network-wide ad blocking via your own hardware.
|
||||
*
|
||||
* This file is copyright under the latest version of the EUPL.
|
||||
* Please see LICENSE file for your rights under this license.
|
||||
*
|
||||
* The colors used in this theme has been inspired by
|
||||
* https://github.com/anvyst/adminlte-skin-midnight
|
||||
*
|
||||
* Additional fixes For Pi.Alert UI by leiweibau */
|
||||
|
||||
:root {
|
||||
--datatable-bgcolor: rgba(64, 76, 88, 0.8);
|
||||
}
|
||||
html {
|
||||
background-color: #353c42;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
h4 {
|
||||
color: #44def1;
|
||||
}
|
||||
.content-header > .breadcrumb > li > a {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.table > thead > tr > th,
|
||||
.table > tbody > tr > th,
|
||||
.table > tfoot > tr > th,
|
||||
.table > thead > tr > td,
|
||||
.table > tbody > tr > td,
|
||||
.table > tfoot > tr > td {
|
||||
border-top: 0;
|
||||
}
|
||||
.table > thead > tr.odd,
|
||||
.table > tbody > tr.odd,
|
||||
.table > tfoot > tr.odd {
|
||||
background-color: #2a2f34;
|
||||
}
|
||||
.table > thead > tr.odd:hover,
|
||||
.table > tbody > tr.odd:hover,
|
||||
.table > tfoot > tr.odd:hover,
|
||||
.table > thead > tr.even:hover,
|
||||
.table > tbody > tr.even:hover,
|
||||
.table > tfoot > tr.even:hover {
|
||||
background-color: #1e2226;
|
||||
}
|
||||
.table-bordered,
|
||||
.table-bordered > thead > tr > th,
|
||||
.table-bordered > tbody > tr > th,
|
||||
.table-bordered > tfoot > tr > th,
|
||||
.table-bordered > thead > tr > td,
|
||||
.table-bordered > tbody > tr > td,
|
||||
.table-bordered > tfoot > tr > td {
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.dataTables_wrapper input[type="search"] {
|
||||
border-radius: 4px;
|
||||
background-color: #353c42;
|
||||
border: 0;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.dataTables_paginate .pagination li > a {
|
||||
background-color: #353c42;
|
||||
border-color: #353c42;
|
||||
}
|
||||
.pagination > .disabled > a,
|
||||
.pagination > .disabled > a:focus,
|
||||
.pagination > .disabled > a:hover,
|
||||
.pagination > .disabled > span,
|
||||
.pagination > .disabled > span:focus,
|
||||
.pagination > .disabled > span:hover {
|
||||
cursor: not-allowed;
|
||||
color: #bec5cb;
|
||||
background-color: #353c42;
|
||||
border-color: #353c42;
|
||||
}
|
||||
.pagination > li > a:focus,
|
||||
.pagination > li > a:hover,
|
||||
.pagination > li > span:focus,
|
||||
.pagination > li > span:hover {
|
||||
z-index: 2;
|
||||
color: #bec5cb;
|
||||
background-color: #54606b;
|
||||
border-color: #54606b;
|
||||
}
|
||||
.wrapper,
|
||||
.main-sidebar,
|
||||
.left-side {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.user-panel > .info,
|
||||
.user-panel > .info > a {
|
||||
color: #fff;
|
||||
}
|
||||
.sidebar-menu > li.header {
|
||||
color: #556068;
|
||||
background-color: #1e2225;
|
||||
}
|
||||
.sidebar-menu > li > a {
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-menu > li:hover > a,
|
||||
.sidebar-menu > li > a:focus,
|
||||
.sidebar-menu > li.active > a {
|
||||
color: #fff;
|
||||
background-color: #22272a;
|
||||
border-color: #3c8dbc;
|
||||
}
|
||||
.sidebar-menu > li > .treeview-menu {
|
||||
margin: 0 1px;
|
||||
background-color: #32393e;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.treeview-menu > li > a {
|
||||
color: #949fa8;
|
||||
}
|
||||
.treeview-menu > li.active > a,
|
||||
.treeview-menu > li > a:hover,
|
||||
.treeview-menu > li > a:focus {
|
||||
color: #fff;
|
||||
}
|
||||
.sidebar-form {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #3e464c;
|
||||
margin: 10px;
|
||||
}
|
||||
.sidebar-form input[type="text"],
|
||||
.sidebar-form .btn {
|
||||
box-shadow: none;
|
||||
background-color: #3e464c;
|
||||
border: 1px solid transparent;
|
||||
height: 35px;
|
||||
}
|
||||
.sidebar-form input[type="text"] {
|
||||
color: #666;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px;
|
||||
}
|
||||
.sidebar-form input[type="text"]:focus,
|
||||
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||
background-color: #fff;
|
||||
color: #666;
|
||||
}
|
||||
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||
border-left-color: #fff;
|
||||
}
|
||||
.sidebar-form .btn {
|
||||
color: #999;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
.box,
|
||||
.box-footer,
|
||||
.info-box,
|
||||
.box-comment,
|
||||
.comment-text,
|
||||
.comment-text .username {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
}
|
||||
.box-comments .box-comment {
|
||||
border-bottom-color: #353c42;
|
||||
}
|
||||
.box-footer {
|
||||
border-top: 1px solid #353c42;
|
||||
}
|
||||
.box-header.with-border {
|
||||
border-bottom: 1px solid #353c42;
|
||||
}
|
||||
.box-solid,
|
||||
.box {
|
||||
border: 1px solid #272c30;
|
||||
}
|
||||
.box-solid > .box-header,
|
||||
.box > .box-header {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.box-solid > .box-header .btn,
|
||||
.box > .box-header .btn {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.box.box-info,
|
||||
.box.box-primary,
|
||||
.box.box-success,
|
||||
.box.box-warning,
|
||||
.box.box-danger {
|
||||
border-top-width: 3px;
|
||||
}
|
||||
.main-header .navbar {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.main-header .navbar .nav > li > a,
|
||||
.main-header .navbar .nav > li > .navbar-text {
|
||||
color: #bec5cb;
|
||||
max-height: 50px;
|
||||
}
|
||||
.main-header .navbar .nav > li > a:hover,
|
||||
.main-header .navbar .nav > li > a:active,
|
||||
.main-header .navbar .nav > li > a:focus,
|
||||
.main-header .navbar .nav .open > a,
|
||||
.main-header .navbar .nav .open > a:hover,
|
||||
.main-header .navbar .nav .open > a:focus,
|
||||
.main-header .navbar .nav > .active > a {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
color: #f6f6f6;
|
||||
}
|
||||
.main-header .navbar .sidebar-toggle {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.main-header .navbar .sidebar-toggle:hover {
|
||||
color: #f6f6f6;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.timeline li .timeline-item {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
border-color: #353c42;
|
||||
}
|
||||
.timeline li .timeline-header {
|
||||
border-bottom-color: #353c42;
|
||||
}
|
||||
.nav-stacked > li > a {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-stacked > li > a:hover {
|
||||
color: white;
|
||||
background-color: #1e2226;
|
||||
}
|
||||
.content-wrapper,
|
||||
.right-side {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.main-footer,
|
||||
.nav-tabs-custom {
|
||||
background-color: #272c30;
|
||||
border-top-color: #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.main-footer .nav-tabs,
|
||||
.nav-tabs-custom .nav-tabs {
|
||||
background-color: #30383f;
|
||||
border-bottom-color: #2f363b;
|
||||
}
|
||||
.main-footer .tab-content,
|
||||
.nav-tabs-custom .tab-content {
|
||||
background-color: #30383f;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs {
|
||||
background: rgba(64, 72, 80, 0.666);
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li {
|
||||
margin-right: 1px;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li.active > a,
|
||||
.nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
border-left-color: #30383f;
|
||||
border-right-color: #30383f;
|
||||
background-color: #30383f;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li:not(.active):hover {
|
||||
border-top-color: #d2d6de;
|
||||
background-color: transparent;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li > a {
|
||||
color: #8e959b;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li > a:focus {
|
||||
color: #3c8dbc;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li:hover > a,
|
||||
.nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
|
||||
.list-group {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
}
|
||||
.list-group .list-group-item {
|
||||
border-color: #353c42;
|
||||
background-color: #272c30;
|
||||
}
|
||||
.input-group .input-group-addon {
|
||||
border-right: 1px solid #272c30;
|
||||
}
|
||||
.select2 .select2-selection {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.select2 .select2-selection .select2-container--default,
|
||||
.select2 .select2-selection .select2-selection--single,
|
||||
.select2 .select2-selection .select2-selection--multiple,
|
||||
.select2 .select2-selection .select2-selection__rendered {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.select2-dropdown {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.select2-dropdown .select2-search__field {
|
||||
background-color: #272c30;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.select2-container--default.select2-container--open {
|
||||
background-color: #272c30;
|
||||
}
|
||||
|
||||
.layout-boxed {
|
||||
background: url("../../img/boxed-bg-dark.png") repeat fixed;
|
||||
}
|
||||
.not-used {
|
||||
background-color: #eee;
|
||||
}
|
||||
.not-used:hover {
|
||||
background-color: #c5c5c5;
|
||||
}
|
||||
.used {
|
||||
background-color: #fff;
|
||||
}
|
||||
.used:hover {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
.graphs-grid {
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
.graphs-ticks {
|
||||
color: #b8c7ce;
|
||||
}
|
||||
.queries-permitted {
|
||||
background-color: #00a65a;
|
||||
}
|
||||
.queries-blocked {
|
||||
background-color: #999;
|
||||
}
|
||||
.progress {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
.bg-green {
|
||||
background-color: #005c32 !important;
|
||||
}
|
||||
.bg-aqua {
|
||||
background-color: #007997 !important;
|
||||
}
|
||||
.bg-yellow {
|
||||
background-color: #b1720c !important;
|
||||
}
|
||||
.bg-red {
|
||||
background-color: #913225 !important;
|
||||
}
|
||||
|
||||
code,
|
||||
pre {
|
||||
padding: 2px 4px;
|
||||
font-size: 90%;
|
||||
color: #bec5cb;
|
||||
background-color: #353c42;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* Used in the Query Log table */
|
||||
.text-green-light {
|
||||
color: #5ca314 !important;
|
||||
}
|
||||
.text-green {
|
||||
color: #00aa60 !important;
|
||||
}
|
||||
.text-orange {
|
||||
color: #b1720c !important;
|
||||
}
|
||||
.text-red {
|
||||
color: #bd2c19 !important;
|
||||
}
|
||||
.text-vivid-blue {
|
||||
color: #007997 !important;
|
||||
}
|
||||
td.highlight {
|
||||
background-color: rgba(255, 204, 0, 0.333);
|
||||
}
|
||||
.btn-default {
|
||||
box-shadow: none;
|
||||
background-color: #3e464c;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
|
||||
/* Used in debug log page */
|
||||
.log-red {
|
||||
color: #ff4038;
|
||||
}
|
||||
.log-green {
|
||||
color: #4c4;
|
||||
}
|
||||
.log-yellow {
|
||||
color: #fb0;
|
||||
}
|
||||
.log-blue {
|
||||
color: #48f;
|
||||
}
|
||||
.log-purple {
|
||||
color: #b8e;
|
||||
}
|
||||
.log-cyan {
|
||||
color: #0df;
|
||||
}
|
||||
.log-gray {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
#output {
|
||||
border-color: #505458;
|
||||
background: #272c30;
|
||||
}
|
||||
|
||||
/* Used by the long-term pages */
|
||||
.daterangepicker {
|
||||
background-color: #3e464c;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.daterangepicker .ranges li:hover {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.daterangepicker .ranges li.active {
|
||||
background-color: #1e2226; /* Color also used in table pagination */
|
||||
}
|
||||
.daterangepicker .calendar-table {
|
||||
background-color: #3e464c;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.daterangepicker td.off,
|
||||
.daterangepicker td.off.in-range,
|
||||
.daterangepicker td.off.start-date,
|
||||
.daterangepicker td.off.end-date {
|
||||
background-color: #485158;
|
||||
}
|
||||
.daterangepicker td.available:hover,
|
||||
.daterangepicker th.available:hover {
|
||||
background-color: #1e2226;
|
||||
}
|
||||
.daterangepicker td.active,
|
||||
.daterangepicker td.active:hover,
|
||||
.daterangepicker td.in-range:hover {
|
||||
background-color: #225e92;
|
||||
}
|
||||
.daterangepicker td.in-range {
|
||||
background-color: #1e2226;
|
||||
color: #bec5cb;
|
||||
}
|
||||
input,
|
||||
select,
|
||||
select.form-control,
|
||||
.form-group .input-group-addon,
|
||||
.input-group .input-group-addon,
|
||||
.form-group input,
|
||||
.input-group input,
|
||||
.form-group textarea,
|
||||
.input-group textarea,
|
||||
.daterangepicker select.hourselect,
|
||||
.daterangepicker select.minuteselect,
|
||||
.daterangepicker select.secondselect,
|
||||
.daterangepicker select.ampmselect,
|
||||
.form-control,
|
||||
div.dataTables_wrapper div.dataTables_length select {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #3d444b;
|
||||
}
|
||||
.form-control[disabled],
|
||||
.form-control[readonly],
|
||||
fieldset[disabled] .form-control {
|
||||
background-color: #353c42;
|
||||
opacity: 1;
|
||||
}
|
||||
.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {
|
||||
background-color: #4c5761;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #171c20;
|
||||
}
|
||||
.table-striped > tbody > tr:nth-of-type(2n + 1) {
|
||||
background-color: #2d343a;
|
||||
}
|
||||
.panel,
|
||||
.panel-body,
|
||||
.panel-default > .panel-heading {
|
||||
background-color: #3e464c;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.box.box-solid.box-info,
|
||||
.box.box-solid.box-info > .box-header {
|
||||
color: #bec5cb;
|
||||
background-color: #367fa9 !important;
|
||||
border: 1px solid #367fa9;
|
||||
}
|
||||
input[type="password"]::-webkit-credentials-auto-fill-button {
|
||||
background: #bfc5ca;
|
||||
}
|
||||
input[type="password"]::-webkit-caps-lock-indicator {
|
||||
filter: invert(100%);
|
||||
}
|
||||
|
||||
.network-never {
|
||||
background-color: #661b02;
|
||||
}
|
||||
.network-recent {
|
||||
background-color: #114100;
|
||||
}
|
||||
.network-old {
|
||||
background-color: #525200;
|
||||
}
|
||||
.network-older {
|
||||
background-color: #502b00;
|
||||
}
|
||||
.network-gradient {
|
||||
background-image: linear-gradient(to right, #114100 0%, #525200 100%);
|
||||
}
|
||||
|
||||
.icheckbox_polaris,
|
||||
.icheckbox_futurico,
|
||||
.icheckbox_minimal-blue {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.iradio_polaris,
|
||||
.iradio_futurico,
|
||||
.iradio_minimal-blue {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
/* Overlay box with spinners as shown during data collection for graphs */
|
||||
.box .overlay,
|
||||
.overlay-wrapper .overlay {
|
||||
z-index: 50;
|
||||
background-color: rgba(53, 60, 66, 0.733);
|
||||
border-radius: 3px;
|
||||
}
|
||||
.box .overlay > .fa,
|
||||
.overlay-wrapper .overlay > .fa,
|
||||
.navbar-nav > .user-menu > .dropdown-menu > .user-body a {
|
||||
color: #bec5cb !important;
|
||||
}
|
||||
|
||||
.navbar-nav > .user-menu > .dropdown-menu > .user-footer {
|
||||
background-color: #353c42bb;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background: #272c30;
|
||||
}
|
||||
.modal-header {
|
||||
border-bottom-color: #353c42;
|
||||
}
|
||||
.modal-footer {
|
||||
border-top-color: #353c42;
|
||||
}
|
||||
.close {
|
||||
color: #383838;
|
||||
}
|
||||
|
||||
/*** Fix login input visual misalignment ***/
|
||||
#loginform,
|
||||
#loginform input {
|
||||
color: rgb(120, 127, 133);
|
||||
}
|
||||
|
||||
.login-options input,
|
||||
.login-options [class*="icheck-"] > input:first-child + input[type="hidden"] + label::before,
|
||||
.login-options [class*="icheck-"] > input:first-child + label::before {
|
||||
background: none;
|
||||
border-color: rgb(120, 127, 133);
|
||||
}
|
||||
|
||||
/*** Additional fixes For Pi.Alert UI ***/
|
||||
.small-box {
|
||||
border-radius: 10px;
|
||||
border-top: 0px;
|
||||
}
|
||||
.pa-small-box-aqua .inner {
|
||||
background-color: rgb(45,108,133);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-green .inner {
|
||||
background-color: rgb(31,76,46);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-yellow .inner {
|
||||
background-color: rgb(151,104,37);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-red .inner {
|
||||
background-color: rgb(120,50,38);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-gray .inner {
|
||||
background-color: #777;
|
||||
/* color: rgba(20,20,20,30%); */
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-gray .inner h3 {
|
||||
color: #bbb;
|
||||
}
|
||||
.text-gray-20 {
|
||||
color: rgba(220,220,220,30%);
|
||||
}
|
||||
.bg-gray {
|
||||
background-color: #888888 !important;
|
||||
}
|
||||
.badge.bg-green {
|
||||
background-color: #00A000 !important;
|
||||
}
|
||||
.badge.bg-gray {
|
||||
background-color: #888 !important;
|
||||
}
|
||||
#txtRecord {
|
||||
background-color: #353c42;
|
||||
border-color: #888888;
|
||||
}
|
||||
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
||||
background-color: rgb(189,192,198);
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.db_info_table_cell:nth-child(1) {background: #272c30}
|
||||
.db_info_table_cell:nth-child(2) {background: #272c30}
|
||||
.db_tools_table_cell_a:nth-child(1) {background: #272c30}
|
||||
.db_tools_table_cell_a:nth-child(2) {background: #272c30}
|
||||
.db_tools_table_cell_b:nth-child(1) {background: #272c30}
|
||||
.db_tools_table_cell_b:nth-child(2) {background: #272c30}
|
||||
|
||||
.db_info_table {
|
||||
display: table;
|
||||
border-spacing: 0em;
|
||||
font-weight: 400;
|
||||
font-size: 15px;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.nav-tabs-custom > .nav-tabs > li:hover > a, .nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
background-color: #272c30;
|
||||
color: #bec5cb;
|
||||
}
|
||||
|
||||
.nav-tabs-custom > .nav-tabs > li.active > a, .nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
border-left-color: #30383f;
|
||||
border-right-color: #30383f;
|
||||
background-color: #272c30;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.nav-tabs-custom .tab-content {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.top_small_box_gray_text {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
/* remove white border that appears on mobile screen sizes */
|
||||
.box-body {
|
||||
border: 0px;
|
||||
}
|
||||
/* remove white border that appears on mobile screen sizes */
|
||||
.table-responsive {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.login-page {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.login-logo a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.login-box-body {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
}
|
||||
/* Add border radius to bottom of the status boxes*/
|
||||
.pa-small-box-footer {
|
||||
border-bottom-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
}
|
||||
|
||||
.small-box > .inner h3, .small-box > .inner p {
|
||||
margin-bottom: 0px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
.small-box:hover .icon {
|
||||
font-size: 3.74em;
|
||||
}
|
||||
.small-box .icon {
|
||||
top: 0.01em;
|
||||
font-size: 3.25em;
|
||||
}
|
||||
BIN
front/css/font/SourceSans3-Black.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-BlackIt.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-Bold.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-BoldIt.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-ExtraLight.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-ExtraLightIt.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-It.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-Light.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-LightIt.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-Regular.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-Semibold.otf.woff2
Normal file
BIN
front/css/font/SourceSans3-SemiboldIt.otf.woff2
Normal file
BIN
front/css/font/SourceSans3VF-Italic.otf.woff2
Normal file
BIN
front/css/font/SourceSans3VF-Roman.otf.woff2
Normal file
4
front/css/offline-font.css
Normal file
@@ -0,0 +1,4 @@
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
src: url('font/SourceSans3-Regular.otf.woff2') format('woff2');
|
||||
}
|
||||
@@ -11,50 +11,49 @@
|
||||
Global Variables
|
||||
----------------------------------------------------------------------------- */
|
||||
:root {
|
||||
--color-aqua: #00c0ef;
|
||||
--color-green: #00a65a;
|
||||
--color-aqua: #00c0ef;
|
||||
--color-green: #00a65a;
|
||||
--color-yellow: #f39c12;
|
||||
--color-red: #dd4b39;
|
||||
--color-red: #dd4b39;
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Text Classes
|
||||
----------------------------------------------------------------------------- */
|
||||
.text-center {
|
||||
text-align: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-white {
|
||||
color: white;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.text-gray50 {
|
||||
color: #808080;
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
.text-gray-20 {
|
||||
color: rgba(192,192,192,20%);
|
||||
color: rgba(192, 192, 192, 20%);
|
||||
}
|
||||
|
||||
.text-aqua-20 {
|
||||
color: rgba(0,192,239,20%);
|
||||
color: rgba(0, 192, 239, 20%);
|
||||
}
|
||||
|
||||
.text-green-20 {
|
||||
color: rgba(0,166,90,20%);
|
||||
color: rgba(0, 166, 90, 20%);
|
||||
}
|
||||
|
||||
.text-yellow-20 {
|
||||
color: rgba(243,156,18,20%);
|
||||
color: rgba(243, 156, 18, 20%);
|
||||
}
|
||||
|
||||
.text-red-20 {
|
||||
color: rgba(221,75,57,20%);
|
||||
color: rgba(221, 75, 57, 20%);
|
||||
}
|
||||
|
||||
.no-border {
|
||||
@@ -65,82 +64,82 @@
|
||||
Main Sections
|
||||
----------------------------------------------------------------------------- */
|
||||
.content-header {
|
||||
padding-top: 5px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.content-header > .breadcrumb {
|
||||
background: transparent;
|
||||
.content-header>.breadcrumb {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding-bottom: 0px;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
|
||||
.box-body {
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
|
||||
.main-footer {
|
||||
padding: 5px;
|
||||
color: gray;
|
||||
padding: 5px;
|
||||
color: gray;
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Customized Main Menu
|
||||
----------------------------------------------------------------------------- */
|
||||
.main-header .logo {
|
||||
width: 150px;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.main-header > .navbar {
|
||||
margin-left: 150px;
|
||||
.main-header>.navbar {
|
||||
margin-left: 150px;
|
||||
}
|
||||
|
||||
.main-sidebar, .left-side {
|
||||
width: 150px;
|
||||
.main-sidebar,
|
||||
.left-side {
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.content-wrapper, .right-side, .main-footer {
|
||||
margin-left: 150px;
|
||||
.content-wrapper,
|
||||
.right-side,
|
||||
.main-footer {
|
||||
margin-left: 150px;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.main-header .logo {
|
||||
width: 100%;
|
||||
}
|
||||
.main-header .logo {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.main-header .navbar {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.content-wrapper, .main-footer {
|
||||
margin-left: 0px;
|
||||
}
|
||||
.main-header .navbar {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.content-wrapper,
|
||||
.main-footer {
|
||||
margin-left: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-open .content-wrapper, .sidebar-open .main-footer {
|
||||
.sidebar-open .content-wrapper,
|
||||
.sidebar-open .main-footer {
|
||||
-webkit-transform: translate(150px, 0);
|
||||
-ms-transform: translate(150px, 0);
|
||||
-o-transform: translate(150px, 0);
|
||||
transform: translate(150px, 0)
|
||||
}
|
||||
|
||||
|
||||
.skin-yellow-light .sidebar-menu > li > a:hover {
|
||||
.skin-yellow-light .sidebar-menu>li>a:hover {
|
||||
background: #f0f0f0;
|
||||
border-left-color: rgb(243, 156, 18);
|
||||
}
|
||||
|
||||
.skin-yellow-light .sidebar-menu > li.active > a {
|
||||
.skin-yellow-light .sidebar-menu>li.active>a {
|
||||
background: #e0e0e0;
|
||||
border-left-color: rgb(243, 156, 18);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Customized Boxes
|
||||
----------------------------------------------------------------------------- */
|
||||
@@ -151,185 +150,183 @@
|
||||
}
|
||||
|
||||
.pa-small-box-2 .inner h3 {
|
||||
margin-left: 0em;
|
||||
margin-bottom: 1.3em;
|
||||
margin-left: 0em;
|
||||
margin-bottom: 1.3em;
|
||||
}
|
||||
|
||||
.pa-small-box-footer {
|
||||
color: white !important;
|
||||
font-size: 18px;
|
||||
color: white !important;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
.pa-small-box-aqua {
|
||||
border-top: 3px solid #00c0ef;
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
/* border-top: 3px solid #00c0ef; */
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.pa-small-box-aqua .inner {
|
||||
color: #00c0ef;
|
||||
background-color:#FFFFFF;
|
||||
color: #00c0ef;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.pa-small-box-aqua .inner h3 {
|
||||
margin-left: 0.5em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
.pa-small-box-aqua .icon {
|
||||
color: #00c0ef;
|
||||
color: #00c0ef;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
.pa-small-box-green {
|
||||
border-top: 3px solid #00a65a;
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
/* border-top: 3px solid #00a65a; */
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.pa-small-box-green .inner {
|
||||
color: #00a65a;
|
||||
background-color:#FFFFFF;
|
||||
color: #00a65a;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.pa-small-box-green .inner h3 {
|
||||
margin-left: 0.5em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
.pa-small-box-green .icon {
|
||||
color: #00a65a;
|
||||
color: #00a65a;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
.pa-small-box-yellow {
|
||||
border-top: 3px solid #f39c12;
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
.pa-small-box-yellow {
|
||||
/* border-top: 3px solid #f39c12; */
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.pa-small-box-yellow .inner {
|
||||
color: #f39c12;
|
||||
background-color:#FFFFFF;
|
||||
color: #f39c12;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.pa-small-box-yellow .inner h3 {
|
||||
margin-left: 0.5em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
.pa-small-box-yellow .icon {
|
||||
color: #f39c12;
|
||||
color: #f39c12;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
.pa-small-box-red {
|
||||
border-top: 3px solid #dd4b39;
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
/* border-top: 3px solid #dd4b39; */
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.pa-small-box-red .inner {
|
||||
color: #dd4b39;
|
||||
background-color:#FFFFFF;
|
||||
color: #dd4b39;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.pa-small-box-red .inner h3 {
|
||||
margin-left: 0.5em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
.pa-small-box-red .icon {
|
||||
color: #dd4b39;
|
||||
color: #dd4b39;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
.pa-small-box-gray {
|
||||
border-top: 3px solid #a0a0a0;
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
/* border-top: 3px solid #a0a0a0; */
|
||||
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.pa-small-box-gray .inner {
|
||||
color: #a0a0a0;
|
||||
background-color:#FFFFFF;
|
||||
color: #a0a0a0;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.pa-small-box-gray .inner h3 {
|
||||
margin-left: 0.5em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
.pa-small-box-gray .icon {
|
||||
color: #a0a0a0;
|
||||
color: #a0a0a0;
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Customized Box Borders
|
||||
----------------------------------------------------------------------------- */
|
||||
.box.box-aqua {
|
||||
border-top-color: #00c0ef;
|
||||
/* .box.box-aqua {
|
||||
border-top-color: #00c0ef;
|
||||
}
|
||||
|
||||
.box.box-green {
|
||||
border-top-color: #00a65a;
|
||||
border-top-color: #00a65a;
|
||||
}
|
||||
|
||||
.box.box-yellow {
|
||||
border-top-color: #f39c12;
|
||||
border-top-color: #f39c12;
|
||||
}
|
||||
|
||||
.box.box-red {
|
||||
border-top-color: #dd4b39;
|
||||
}
|
||||
|
||||
border-top-color: #dd4b39;
|
||||
} */
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Custom Border
|
||||
----------------------------------------------------------------------------- */
|
||||
.bottom-border-aqua {
|
||||
border-bottom-color: #00c0ef;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 3px
|
||||
border-bottom-color: #00c0ef;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 3px
|
||||
}
|
||||
|
||||
.bottom-border-primary {
|
||||
border-bottom-color: #3c8dbc;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 3px
|
||||
border-bottom-color: #3c8dbc;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 3px
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Customized Tabs
|
||||
----------------------------------------------------------------------------- */
|
||||
.nav-tabs-custom {
|
||||
background: transparent;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.nav > li > a {
|
||||
.nav>li>a {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 10px 10px;
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Customized Menu dropdown
|
||||
----------------------------------------------------------------------------- */
|
||||
.dropdown-menu {
|
||||
max-height: 250px;
|
||||
overflow-x: hidden;
|
||||
box-shadow: 0px 3px 20px rgba(0,0,0,0.2);
|
||||
box-shadow: 0px 3px 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Default Table config
|
||||
----------------------------------------------------------------------------- */
|
||||
.table > tbody > tr > td {
|
||||
padding:4px;
|
||||
.table>tbody>tr>td {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
||||
background-color: #FFFFD0;
|
||||
.table-hover tbody tr:hover td,
|
||||
.table-hover tbody tr:hover th {
|
||||
background-color: #FFFFD0;
|
||||
}
|
||||
|
||||
.dataTables_info, .dataTables_paginate, .dataTables_length, .dataTables_filter {
|
||||
color: #B0B0B0;
|
||||
.dataTables_info,
|
||||
.dataTables_paginate,
|
||||
.dataTables_length,
|
||||
.dataTables_filter {
|
||||
color: #B0B0B0;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
@@ -341,27 +338,29 @@
|
||||
}
|
||||
|
||||
.pa-btn-delete {
|
||||
border-color:#ffb060;
|
||||
background-color:#ffd080;
|
||||
border-color: #ffb060;
|
||||
background-color: #ffd080;
|
||||
}
|
||||
|
||||
.pa-btn-delete:hover {
|
||||
border-color:#ffb060;
|
||||
background-color:#ffb060;
|
||||
border-color: #ffb060;
|
||||
background-color: #ffb060;
|
||||
}
|
||||
|
||||
.pa-btn-records, .pa-btn-records:hover, .pa-btn-records:focus, .pa-btn-records:active {
|
||||
border-color:#ddd;
|
||||
background-color:#f4f4f4;
|
||||
.pa-btn-records,
|
||||
.pa-btn-records:hover,
|
||||
.pa-btn-records:focus,
|
||||
.pa-btn-records:active {
|
||||
border-color: #ddd;
|
||||
background-color: #f4f4f4;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Customized Full Calendar
|
||||
----------------------------------------------------------------------------- */
|
||||
.fc h2 {
|
||||
font-size: 20px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.fc-weekend {
|
||||
@@ -380,7 +379,9 @@
|
||||
background-color: #FFF0E0;
|
||||
}
|
||||
|
||||
.fc-resized-row { height: 26px !important; }
|
||||
.fc-resized-row {
|
||||
height: 26px !important;
|
||||
}
|
||||
|
||||
.fc-transparent-border {
|
||||
border-Color: transparent !important;
|
||||
@@ -395,60 +396,149 @@
|
||||
border-right: 5px solid #606060;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Spin
|
||||
----------------------------------------------------------------------------- */
|
||||
.pa_semitransparent-panel {
|
||||
position: absolute;
|
||||
width: 100%; //calc (100% -40px);
|
||||
height: 100%;
|
||||
width: 100%; //calc (100% -40px);
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
display: block;
|
||||
display: block;
|
||||
|
||||
opacity: 0.8;
|
||||
opacity: 0.8;
|
||||
background-color: #fff;
|
||||
z-index: 99;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
.pa_spinner {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 20px;
|
||||
margin-left: auto;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 20px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding: 15px;
|
||||
width: 200px;
|
||||
padding: 15px;
|
||||
width: 200px;
|
||||
|
||||
background-color: #fff;
|
||||
z-index: 100;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
Notification float banner
|
||||
----------------------------------------------------------------------------- */
|
||||
.pa_alert_notification {
|
||||
text-align: center;
|
||||
font-size: large;
|
||||
font-weight: bold;
|
||||
color: #258744;
|
||||
text-align: center;
|
||||
font-size: large;
|
||||
font-weight: bold;
|
||||
color: #258744;
|
||||
|
||||
background-color: #d4edda;
|
||||
border-color: #c3e6cb;
|
||||
border-radius: 5px;
|
||||
border-color: #c3e6cb;
|
||||
border-radius: 5px;
|
||||
|
||||
max-width: 1000px; /* 80% wrapper 1250px */
|
||||
width: 80%;
|
||||
z-index: 9999;
|
||||
max-width: 1000px;
|
||||
/* 80% wrapper 1250px */
|
||||
width: 80%;
|
||||
z-index: 9999;
|
||||
|
||||
position: fixed;
|
||||
top: 30px;
|
||||
margin: auto;
|
||||
transform: translate(0,0);
|
||||
position: fixed;
|
||||
top: 30px;
|
||||
margin: auto;
|
||||
transform: translate(0, 0);
|
||||
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dbtools-button {
|
||||
display: inline-block;
|
||||
width: 160px;
|
||||
height: 60px;
|
||||
white-space: normal;
|
||||
word-wrap: break-word;
|
||||
font-size: 16px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.db_info_table_cell:nth-child(1) {
|
||||
background: white
|
||||
}
|
||||
|
||||
.db_info_table_cell:nth-child(2) {
|
||||
background: white
|
||||
}
|
||||
|
||||
.db_tools_table_cell_a:nth-child(1) {
|
||||
background: white
|
||||
}
|
||||
|
||||
.db_tools_table_cell_a:nth-child(2) {
|
||||
background: white
|
||||
}
|
||||
.db_tools_table_cell_b:nth-child(1) {
|
||||
background: white
|
||||
}
|
||||
|
||||
.db_tools_table_cell_b:nth-child(2) {
|
||||
background: white
|
||||
}
|
||||
.db_info_table {
|
||||
display: table;
|
||||
border-spacing: 0em;
|
||||
font-weight: 400;
|
||||
font-size: 15px;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.db_info_table_row {
|
||||
display: table-row;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.db_info_table_cell {
|
||||
display: table-cell;
|
||||
padding: 3px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.db_tools_table_cell_a {
|
||||
display: table-cell;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
min-width: 180px;
|
||||
width: 20%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.db_tools_table_cell_b {
|
||||
display: table-cell;
|
||||
text-align: justify;
|
||||
font-size: 16px;
|
||||
vertical-align: middle;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.ajax_scripts_loading {
|
||||
background-image: url('../img/Loading_Animation.gif');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.nav-tabs-custom .tab-content {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.top_small_box_gray_text {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.bg-gray {
|
||||
background-color: #b2b6be !important;
|
||||
}
|
||||
|
||||
.infobox_label {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
@@ -8,6 +8,14 @@
|
||||
#--------------------------------------------------------------------------- -->
|
||||
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
if ($_SESSION["login"] != 1)
|
||||
{
|
||||
header('Location: /pialert/index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
require 'php/templates/header.php';
|
||||
?>
|
||||
|
||||
@@ -25,11 +33,11 @@
|
||||
<!-- period selector -->
|
||||
<span class="breadcrumb" style="top: 0px;">
|
||||
<select class="form-control" id="period" onchange="javascript: periodChanged();">
|
||||
<option value="1 day">Today</option>
|
||||
<option value="7 days">Last Week</option>
|
||||
<option value="1 month" selected>Last Month</option>
|
||||
<option value="1 year">Last Year</option>
|
||||
<option value="100 years">All info</option>
|
||||
<option value="1 day"><?php echo $pia_lang['DevDetail_Periodselect_today'];?></option>
|
||||
<option value="7 days"><?php echo $pia_lang['DevDetail_Periodselect_LastWeek'];?></option>
|
||||
<option value="1 month" selected><?php echo $pia_lang['DevDetail_Periodselect_LastMonth'];?></option>
|
||||
<option value="1 year"><?php echo $pia_lang['DevDetail_Periodselect_LastYear'];?></option>
|
||||
<option value="100 years"><?php echo $pia_lang['DevDetail_Periodselect_All'];?></option>
|
||||
</select>
|
||||
</span>
|
||||
</section>
|
||||
@@ -42,10 +50,11 @@
|
||||
|
||||
<div class="col-lg-3 col-sm-6 col-xs-6">
|
||||
<a href="#" onclick="javascript: $('#tabDetails').trigger('click')">
|
||||
<div class="small-box bg-aqua pa-small-box-aqua pa-small-box-2">
|
||||
<div class="inner"> <h3 id="deviceStatus" style="margin-left: 0em"> -- </h3> </div>
|
||||
<div class="icon"> <i id="deviceStatusIcon" class=""></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Current Status <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner"> <h3 id="deviceStatus" style="margin-left: 0em"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['DevDetail_Shortcut_CurrentStatus'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i id="deviceStatusIcon" class=""></i></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -53,10 +62,11 @@
|
||||
<!-- top small box 2 ------------------------------------------------------- -->
|
||||
<div class="col-lg-3 col-sm-6 col-xs-6">
|
||||
<a href="#" onclick="javascript: $('#tabSessions').trigger('click');">
|
||||
<div class="small-box bg-green pa-small-box-green pa-small-box-2">
|
||||
<div class="inner"> <h3 id="deviceSessions"> -- </h3> </div>
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner"> <h3 id="deviceSessions"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['DevDetail_Shortcut_Sessions'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="fa fa-plug"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Sesions <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -64,10 +74,11 @@
|
||||
<!-- top small box 3 ------------------------------------------------------- -->
|
||||
<div class="col-lg-3 col-sm-6 col-xs-6">
|
||||
<a href="#" onclick="javascript: $('#tabPresence').trigger('click')">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="deviceEvents" style="margin-left: 0em"> -- </h3> </div>
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner"> <h3 id="deviceEvents" style="margin-left: 0em"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['DevDetail_Shortcut_Presence'];?></p>
|
||||
</div>
|
||||
<div id="deviceEventsIcon" class="icon"> <i class="fa fa-calendar"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Presence <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -75,10 +86,11 @@
|
||||
<!-- top small box 4 ------------------------------------------------------ -->
|
||||
<div class="col-lg-3 col-sm-6 col-xs-6">
|
||||
<a href="#" onclick="javascript: $('#tabEvents').trigger('click');">
|
||||
<div class="small-box bg-red pa-small-box-red pa-small-box-2">
|
||||
<div class="inner"> <h3 id="deviceDownAlerts"> -- </h3> </div>
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner"> <h3 id="deviceDownAlerts"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['DevDetail_Shortcut_DownAlerts'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="fa fa-warning"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Down Alerts <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -94,10 +106,14 @@
|
||||
|
||||
<div id="navDevice" class="nav-tabs-custom">
|
||||
<ul class="nav nav-tabs" style="fon t-size:16px;">
|
||||
<li> <a id="tabDetails" href="#panDetails" data-toggle="tab"> Details </a></li>
|
||||
<li> <a id="tabSessions" href="#panSessions" data-toggle="tab"> Sessions </a></li>
|
||||
<li> <a id="tabPresence" href="#panPresence" data-toggle="tab"> Presence </a></li>
|
||||
<li> <a id="tabEvents" href="#panEvents" data-toggle="tab"> Events </a></li>
|
||||
<li> <a id="tabDetails" href="#panDetails" data-toggle="tab"> <?php echo $pia_lang['DevDetail_Tab_Details'];?> </a></li>
|
||||
<?php
|
||||
if ($_REQUEST['mac'] == 'Internet') { $DevDetail_Tap_temp = "Tools"; } else { $DevDetail_Tap_temp = $pia_lang['DevDetail_Tab_Nmap'];}
|
||||
?>
|
||||
<li> <a id="tabNmap" href="#panNmap" data-toggle="tab"> <?php echo $DevDetail_Tap_temp;?> </a></li>
|
||||
<li> <a id="tabSessions" href="#panSessions" data-toggle="tab"> <?php echo $pia_lang['DevDetail_Tab_Sessions'];?> </a></li>
|
||||
<li> <a id="tabPresence" href="#panPresence" data-toggle="tab"> <?php echo $pia_lang['DevDetail_Tab_Presence'];?> </a></li>
|
||||
<li> <a id="tabEvents" href="#panEvents" data-toggle="tab"> <?php echo $pia_lang['DevDetail_Tab_Events'];?> </a></li>
|
||||
|
||||
<div class="btn-group pull-right">
|
||||
<button type="button" class="btn btn-default" style="padding: 10px; min-width: 30px;"
|
||||
@@ -113,7 +129,7 @@
|
||||
|
||||
|
||||
|
||||
<div class="tab-content" style="min-height: 430px">
|
||||
<div class="tab-content" style="min-height: 430px;">
|
||||
|
||||
<!-- tab page 1 ------------------------------------------------------------ -->
|
||||
<!--
|
||||
@@ -124,12 +140,12 @@
|
||||
<div class="row">
|
||||
<!-- column 1 -->
|
||||
<div class="col-lg-4 col-sm-6 col-xs-12">
|
||||
<h4 class="bottom-border-aqua">Main Info</h4>
|
||||
<h4 class="bottom-border-aqua"><?php echo $pia_lang['DevDetail_MainInfo_Title'];?></h4>
|
||||
<div class="box-body form-horizontal">
|
||||
|
||||
<!-- MAC -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">MAC</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_mac'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<input class="form-control" id="txtMAC" type="text" readonly value="--">
|
||||
</div>
|
||||
@@ -137,7 +153,7 @@
|
||||
|
||||
<!-- Name -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Name</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Name'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<input class="form-control" id="txtName" type="text" value="--">
|
||||
</div>
|
||||
@@ -145,7 +161,7 @@
|
||||
|
||||
<!-- Owner -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Owner</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Owner'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<div class="input-group">
|
||||
<input class="form-control" id="txtOwner" type="text" value="--">
|
||||
@@ -161,7 +177,7 @@
|
||||
|
||||
<!-- Type -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Type</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Type'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<div class="input-group">
|
||||
<input class="form-control" id="txtDeviceType" type="text" value="--">
|
||||
@@ -181,7 +197,7 @@
|
||||
|
||||
<!-- Vendor -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Vendor</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Vendor'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<input class="form-control" id="txtVendor" type="text" value="--">
|
||||
</div>
|
||||
@@ -189,7 +205,7 @@
|
||||
|
||||
<!-- Favorite -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Favorite</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Favorite'];?></label>
|
||||
<div class="col-sm-9" style="padding-top:6px;">
|
||||
<input class="checkbox blue hidden" id="chkFavorite" type="checkbox">
|
||||
</div>
|
||||
@@ -197,7 +213,7 @@
|
||||
|
||||
<!-- Group -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Group</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Group'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<div class="input-group">
|
||||
<input class="form-control" id="txtGroup" type="text" value="--">
|
||||
@@ -218,7 +234,7 @@
|
||||
|
||||
<!-- Location -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Location</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Location'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<div class="input-group">
|
||||
<input class="form-control" id="txtLocation" type="text" value="--">
|
||||
@@ -241,7 +257,7 @@
|
||||
|
||||
<!-- Comments -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Comments</label>
|
||||
<label class="col-sm-3 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Comments'];?></label>
|
||||
<div class="col-sm-9">
|
||||
<textarea class="form-control" rows="3" id="txtComments"></textarea>
|
||||
</div>
|
||||
@@ -252,12 +268,12 @@
|
||||
|
||||
<!-- column 2 -->
|
||||
<div class="col-lg-4 col-sm-6 col-xs-12">
|
||||
<h4 class="bottom-border-aqua">Session Info</h4>
|
||||
<h4 class="bottom-border-aqua"><?php echo $pia_lang['DevDetail_SessionInfo_Title'];?></h4>
|
||||
<div class="box-body form-horizontal">
|
||||
|
||||
<!-- Status -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Status</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_SessionInfo_Status'];?></label>
|
||||
<div class="col-sm-7">
|
||||
<input class="form-control" id="txtStatus" type="text" readonly value="--">
|
||||
</div>
|
||||
@@ -265,7 +281,7 @@
|
||||
|
||||
<!-- First Session -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">First Session</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_SessionInfo_FirstSession'];?></label>
|
||||
<div class="col-sm-7">
|
||||
<input class="form-control" id="txtFirstConnection" type="text" readonly value="--">
|
||||
</div>
|
||||
@@ -273,7 +289,7 @@
|
||||
|
||||
<!-- Last Session -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Last Session</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_SessionInfo_LastSession'];?></label>
|
||||
<div class="col-sm-7">
|
||||
<input class="form-control" id="txtLastConnection" type="text" readonly value="--">
|
||||
</div>
|
||||
@@ -281,7 +297,7 @@
|
||||
|
||||
<!-- Last IP -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Last IP</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_SessionInfo_LastIP'];?></label>
|
||||
<div class="col-sm-7">
|
||||
<input class="form-control" id="txtLastIP" type="text" readonly value="--">
|
||||
</div>
|
||||
@@ -289,7 +305,7 @@
|
||||
|
||||
<!-- Static IP -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Static IP</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_SessionInfo_StaticIP'];?></label>
|
||||
<div class="col-sm-7" style="padding-top:6px;">
|
||||
<input class="checkbox blue hidden" id="chkStaticIP" type="checkbox">
|
||||
</div>
|
||||
@@ -300,22 +316,22 @@
|
||||
|
||||
<!-- column 3 -->
|
||||
<div class="col-lg-4 col-sm-6 col-xs-12">
|
||||
<h4 class="bottom-border-aqua">Events & Alerts config</h4>
|
||||
<h4 class="bottom-border-aqua"><?php echo $pia_lang['DevDetail_EveandAl_Title'];?></h4>
|
||||
<div class="box-body form-horizontal">
|
||||
|
||||
<!-- Scan Cycle -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Scan Cycle</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_EveandAl_ScanCycle'];?></label>
|
||||
<div class="col-sm-7">
|
||||
<div class="input-group">
|
||||
<input class="form-control" id="txtScanCycle" type="text" value="--" readonly style="background-color: #fff;">
|
||||
<input class="form-control" id="txtScanCycle" type="text" value="--" readonly >
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-expanded="false" id="dropdownButtonScanCycle">
|
||||
<span class="fa fa-caret-down"></span></button>
|
||||
<ul id="dropdownScanCycle" class="dropdown-menu dropdown-menu-right">
|
||||
<li><a href="javascript:void(0)" onclick="setTextValue('txtScanCycle','1 min')"> Scan 1 min every 5 min</a></li>
|
||||
<li><a href="javascript:void(0)" onclick="setTextValue('txtScanCycle','15 min');"> Scan 12 min every 15 min</a></li>
|
||||
<li><a href="javascript:void(0)" onclick="setTextValue('txtScanCycle','0 min');"> Don't Scan</a></li>
|
||||
<li><a href="javascript:void(0)" onclick="setTextValue('txtScanCycle','1 min')"><?php echo $pia_lang['DevDetail_EveandAl_ScanCycle_a'];?></a></li>
|
||||
<!-- <li><a href="javascript:void(0)" onclick="setTextValue('txtScanCycle','15 min');"> Scan 12 min every 15 min</a></li> -->
|
||||
<li><a href="javascript:void(0)" onclick="setTextValue('txtScanCycle','0 min');"><?php echo $pia_lang['DevDetail_EveandAl_ScanCycle_z'];?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -324,7 +340,7 @@
|
||||
|
||||
<!-- Alert events -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Alert All Events</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_EveandAl_AlertAllEvents'];?></label>
|
||||
<div class="col-sm-7" style="padding-top:6px;">
|
||||
<input class="checkbox blue hidden" id="chkAlertEvents" type="checkbox">
|
||||
</div>
|
||||
@@ -332,7 +348,7 @@
|
||||
|
||||
<!-- Alert Down -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Alert Down</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_EveandAl_AlertDown'];?></label>
|
||||
<div class="col-sm-7" style="padding-top:6px;">
|
||||
<input class="checkbox red hidden" id="chkAlertDown" type="checkbox">
|
||||
</div>
|
||||
@@ -340,10 +356,10 @@
|
||||
|
||||
<!-- Skip Notifications -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label" style="padding-top: 0px; padding-left: 0px;">Skip repeated notifications during</label>
|
||||
<label class="col-sm-5 control-label" style="padding-top: 0px; padding-left: 0px;"><?php echo $pia_lang['DevDetail_EveandAl_Skip'];?></label>
|
||||
<div class="col-sm-7">
|
||||
<div class="input-group">
|
||||
<input class="form-control" id="txtSkipRepeated" type="text" value="--" readonly style="background-color: #fff;">
|
||||
<input class="form-control" id="txtSkipRepeated" type="text" value="--" readonly >
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-expanded="false" id="dropdownButtonSkipRepeated">
|
||||
<span class="fa fa-caret-down"></span></button>
|
||||
@@ -361,7 +377,7 @@
|
||||
|
||||
<!-- New Device -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">New Device:</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_EveandAl_NewDevice'];?>:</label>
|
||||
<div class="col-sm-7" style="padding-top:6px;">
|
||||
<input class="checkbox orange hidden" id="chkNewDevice" type="checkbox">
|
||||
</div>
|
||||
@@ -369,7 +385,7 @@
|
||||
|
||||
<!-- Archived -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">Archived:</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_EveandAl_Archived'];?>:</label>
|
||||
<div class="col-sm-7" style="padding-top:6px;">
|
||||
<input class="checkbox blue hidden" id="chkArchived" type="checkbox">
|
||||
</div>
|
||||
@@ -377,7 +393,7 @@
|
||||
|
||||
<!-- Randomized MAC -->
|
||||
<div class="form-group" >
|
||||
<label class="col-sm-5 control-label">Random MAC:</label>
|
||||
<label class="col-sm-5 control-label"><?php echo $pia_lang['DevDetail_EveandAl_RandomMAC'];?>:</label>
|
||||
<div class="col-sm-7" style="padding-top:6px;">
|
||||
<span id="iconRandomMACinactive" data-toggle="tooltip" data-placement="right" title="Random MAC is Inactive">
|
||||
<i style="font-size: 24px;" class="text-gray glyphicon glyphicon-random"></i>     </span>
|
||||
@@ -385,7 +401,7 @@
|
||||
<span id="iconRandomMACactive" data-toggle="tooltip" data-placement="right" title="Random MAC is Active" class="hidden">
|
||||
<i style="font-size: 24px;" class="text-yellow glyphicon glyphicon-random"></i>     </span>
|
||||
|
||||
<a href="https://github.com/pucherot/Pi.Alert/blob/main/docs/RAMDOM_MAC.md" target="_blank" style="color: #777;">
|
||||
<a href="https://github.com/leiweibau/Pi.Alert/blob/main/docs/RAMDOM_MAC.md" target="_blank" style="color: #777;">
|
||||
<i class="fa fa-info-circle"></i> </a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -397,11 +413,13 @@
|
||||
<div class="col-xs-12">
|
||||
<div class="pull-right">
|
||||
<button type="button" class="btn btn-default pa-btn pa-btn-delete" style="margin-left:0px;"
|
||||
id="btnDelete" onclick="askDeleteDevice()"> Delete Device </button>
|
||||
id="btnDeleteEvents" onclick="askDeleteDeviceEvents()"> <?php echo $pia_lang['DevDetail_button_DeleteEvents'];?> </button>
|
||||
<button type="button" class="btn btn-default pa-btn pa-btn-delete" style="margin-left:0px;"
|
||||
id="btnDelete" onclick="askDeleteDevice()"> <?php echo $pia_lang['DevDetail_button_Delete'];?> </button>
|
||||
<button type="button" class="btn btn-default pa-btn" style="margin-left:6px;"
|
||||
id="btnRestore" onclick="getDeviceData(true)"> Reset Changes </button>
|
||||
id="btnRestore" onclick="getDeviceData(true)"> <?php echo $pia_lang['DevDetail_button_Reset'];?> </button>
|
||||
<button type="button" disabled class="btn btn-primary pa-btn" style="margin-left:6px; "
|
||||
id="btnSave" onclick="setDeviceData()" > Save </button>
|
||||
id="btnSave" onclick="setDeviceData()" > <?php echo $pia_lang['DevDetail_button_Save'];?> </button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -415,17 +433,97 @@
|
||||
<table id="tableSessions" class="table table-bordered table-hover table-striped ">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Order</th>
|
||||
<th>Connection</th>
|
||||
<th>Disconnection</th>
|
||||
<th>Duration</th>
|
||||
<th>IP</th>
|
||||
<th>Additional info</th>
|
||||
<th><?php echo $pia_lang['DevDetail_SessionTable_Order'];?></th>
|
||||
<th><?php echo $pia_lang['DevDetail_SessionTable_Connection'];?></th>
|
||||
<th><?php echo $pia_lang['DevDetail_SessionTable_Disconnection'];?></th>
|
||||
<th><?php echo $pia_lang['DevDetail_SessionTable_Duration'];?></th>
|
||||
<th><?php echo $pia_lang['DevDetail_SessionTable_IP'];?></th>
|
||||
<th><?php echo $pia_lang['DevDetail_SessionTable_Additionalinfo'];?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- tab page 5 ------------------------------------------------------------ -->
|
||||
|
||||
|
||||
<div class="tab-pane fade" id="panNmap">
|
||||
|
||||
<?php
|
||||
if ($_REQUEST['mac'] == 'Internet') {
|
||||
?>
|
||||
<h4 class="">Online Speedtest</h4>
|
||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
||||
<button type="button" id="speedtestcli" class="btn btn-default pa-btn" style="margin: auto;" onclick="speedtestcli()">Start Speedtest</button>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function speedtestcli() {
|
||||
$( "#scanoutput" ).empty();
|
||||
$.ajax({
|
||||
method: "POST",
|
||||
url: "./php/server/speedtestcli.php",
|
||||
beforeSend: function() { $('#scanoutput').addClass("ajax_scripts_loading"); },
|
||||
complete: function() { $('#scanoutput').removeClass("ajax_scripts_loading"); },
|
||||
success: function(data, textStatus) {
|
||||
$("#scanoutput").html(data);
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<h4 class="">Nmap Scans</h4>
|
||||
<div style="width:100%; text-align: center;">
|
||||
<script>
|
||||
setTimeout(function(){
|
||||
document.getElementById('piamanualnmap_fast').innerHTML='<?php echo $pia_lang['DevDetail_Nmap_buttonFast'];?> (' + document.getElementById('txtLastIP').value +')';
|
||||
document.getElementById('piamanualnmap_normal').innerHTML='<?php echo $pia_lang['DevDetail_Nmap_buttonDefault'];?> (' + document.getElementById('txtLastIP').value +')';
|
||||
document.getElementById('piamanualnmap_detail').innerHTML='<?php echo $pia_lang['DevDetail_Nmap_buttonDetail'];?> (' + document.getElementById('txtLastIP').value +')';
|
||||
}, 2000);
|
||||
</script>
|
||||
|
||||
<button type="button" id="piamanualnmap_fast" class="btn btn-default pa-btn" style="margin: auto;" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'fast')">Loading...</button>
|
||||
<button type="button" id="piamanualnmap_normal" class="btn btn-default pa-btn" style="margin: auto;" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'normal')">Loading...</button>
|
||||
<button type="button" id="piamanualnmap_detail" class="btn btn-default pa-btn" style="margin: auto;" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'detail')">Loading...</button>
|
||||
|
||||
<div style="margin-top: 20px; text-align: left;">
|
||||
<ul style="padding:20px;">
|
||||
<li><?php echo $pia_lang['DevDetail_Nmap_buttonFast_text'];?></li>
|
||||
<li><?php echo $pia_lang['DevDetail_Nmap_buttonDefault_text'];?></li>
|
||||
<li><?php echo $pia_lang['DevDetail_Nmap_buttonDetail_text'];?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="scanoutput" style="margin-top: 30px;"></div>
|
||||
|
||||
<script>
|
||||
function manualnmapscan(targetip, mode) {
|
||||
$( "#scanoutput" ).empty();
|
||||
$.ajax({
|
||||
method: "POST",
|
||||
url: "./php/server/nmap_scan.php",
|
||||
data: { scan: targetip, mode: mode },
|
||||
beforeSend: function() { $('#scanoutput').addClass("ajax_scripts_loading"); },
|
||||
complete: function() { $('#scanoutput').removeClass("ajax_scripts_loading"); },
|
||||
success: function(data, textStatus) {
|
||||
$("#scanoutput").html(data);
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- ----------------------------------------------------------------------- -->
|
||||
|
||||
|
||||
<!-- tab page 3 ------------------------------------------------------------ -->
|
||||
<div class="tab-pane fade table-responsive" id="panPresence">
|
||||
|
||||
@@ -449,7 +547,7 @@
|
||||
<div class="text-center">
|
||||
<label>
|
||||
<input class="checkbox blue hidden" id="chkHideConnectionEvents" type="checkbox" checked>
|
||||
Hide Connection Events
|
||||
<?php echo $pia_lang['DevDetail_Events_CheckBox'];?>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@@ -477,7 +575,6 @@
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<!-- ----------------------------------------------------------------------- -->
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
</div>
|
||||
@@ -505,7 +602,14 @@
|
||||
<link rel="stylesheet" href="lib/AdminLTE/bower_components/fullcalendar/dist/fullcalendar.print.min.css" media="print">
|
||||
<script src="lib/AdminLTE/bower_components/moment/moment.js"></script>
|
||||
<script src="lib/AdminLTE/bower_components/fullcalendar/dist/fullcalendar.min.js"></script>
|
||||
<script src="lib/AdminLTE/bower_components/fullcalendar/dist/locale-all.js"></script>
|
||||
|
||||
<!-- Dark-Mode Patch -->
|
||||
<?php
|
||||
if ($ENABLED_DARKMODE === True) {
|
||||
echo '<link rel="stylesheet" href="css/dark-patch-cal.css">';
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- page script ----------------------------------------------------------- -->
|
||||
<script>
|
||||
@@ -585,7 +689,6 @@ function main () {
|
||||
|
||||
// Read Cookies
|
||||
devicesList = getCookie('devicesList');
|
||||
deleteCookie ('devicesList');
|
||||
if (devicesList != '') {
|
||||
devicesList = JSON.parse (devicesList);
|
||||
} else {
|
||||
@@ -777,7 +880,14 @@ function initializeDatatables () {
|
||||
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 $pia_lang['Events_Tablelenght'];?>",
|
||||
"search": "<?php echo $pia_lang['Events_Searchbox'];?>: ",
|
||||
"paginate": {
|
||||
"next": "<?php echo $pia_lang['Events_Table_nav_next'];?>",
|
||||
"previous": "<?php echo $pia_lang['Events_Table_nav_prev'];?>"
|
||||
},
|
||||
"info": "<?php echo $pia_lang['Events_Table_info'];?>",
|
||||
}
|
||||
});
|
||||
|
||||
@@ -809,7 +919,14 @@ function initializeDatatables () {
|
||||
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 $pia_lang['Events_Tablelenght'];?>",
|
||||
"search": "<?php echo $pia_lang['Events_Searchbox'];?>: ",
|
||||
"paginate": {
|
||||
"next": "<?php echo $pia_lang['Events_Table_nav_next'];?>",
|
||||
"previous": "<?php echo $pia_lang['Events_Table_nav_prev'];?>"
|
||||
},
|
||||
"info": "<?php echo $pia_lang['Events_Table_info'];?>",
|
||||
}
|
||||
});
|
||||
|
||||
@@ -848,7 +965,7 @@ function initializeCalendar () {
|
||||
slotLabelInterval : '04:00:00',
|
||||
slotLabelFormat : 'H:mm',
|
||||
timeFormat : 'H:mm',
|
||||
|
||||
locale : '<?php echo $pia_lang['Presence_CalHead_lang'];?>',
|
||||
header: {
|
||||
left : 'prev,next today',
|
||||
center : 'title',
|
||||
@@ -859,14 +976,14 @@ function initializeCalendar () {
|
||||
agendaYear: {
|
||||
type : 'agenda',
|
||||
duration : { year: 1 },
|
||||
buttonText : 'year',
|
||||
buttonText : '<?php echo $pia_lang['Presence_CalHead_year'];?>',
|
||||
columnHeaderFormat : ''
|
||||
},
|
||||
|
||||
agendaMonth: {
|
||||
type : 'agenda',
|
||||
duration : { month: 1 },
|
||||
buttonText : 'month',
|
||||
buttonText : '<?php echo $pia_lang['Presence_CalHead_month'];?>',
|
||||
columnHeaderFormat : 'D'
|
||||
}
|
||||
},
|
||||
@@ -1027,7 +1144,7 @@ function getDeviceData (readAllData=false) {
|
||||
}
|
||||
|
||||
// Status
|
||||
$('#deviceStatus').html (deviceData['dev_Status']);
|
||||
$('#deviceStatus').html (deviceData['dev_Status'].replace('-', ''));
|
||||
switch (deviceData['dev_Status']) {
|
||||
case 'On-line': icon='fa fa-check'; color='text-green'; break;
|
||||
case 'Off-line': icon='fa fa-close'; color='text-gray'; break;
|
||||
@@ -1058,6 +1175,13 @@ function getDeviceData (readAllData=false) {
|
||||
|
||||
mac =deviceData['dev_MAC'];
|
||||
|
||||
// update the mac parameter in the URL, this makes the selected device persistent when the page is reloaded
|
||||
var searchParams = new URLSearchParams(window.location.search);
|
||||
searchParams.set("mac", mac);
|
||||
var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString();
|
||||
history.pushState(null, '', newRelativePathQuery);
|
||||
getSessionsPresenceEvents();
|
||||
|
||||
$('#txtMAC').val (deviceData['dev_MAC']);
|
||||
$('#txtName').val (deviceData['dev_Name']);
|
||||
$('#txtOwner').val (deviceData['dev_Owner']);
|
||||
@@ -1072,7 +1196,7 @@ function getDeviceData (readAllData=false) {
|
||||
$('#txtFirstConnection').val (deviceData['dev_FirstConnection']);
|
||||
$('#txtLastConnection').val (deviceData['dev_LastConnection']);
|
||||
$('#txtLastIP').val (deviceData['dev_LastIP']);
|
||||
$('#txtStatus').val (deviceData['dev_Status']);
|
||||
$('#txtStatus').val (deviceData['dev_Status'].replace('-', ''));
|
||||
if (deviceData['dev_StaticIP'] == 1) {$('#chkStaticIP').iCheck('check');} else {$('#chkStaticIP').iCheck('uncheck');}
|
||||
|
||||
$('#txtScanCycle').val (deviceData['dev_ScanCycle'] +' min');
|
||||
@@ -1117,7 +1241,7 @@ function getDeviceData (readAllData=false) {
|
||||
$('#btnNext').removeAttr ('disabled');
|
||||
$('#btnNext').removeClass ('text-gray50');
|
||||
}
|
||||
|
||||
|
||||
// Timer for refresh data
|
||||
$("body").css("cursor", "default");
|
||||
newTimerRefreshData (getDeviceData);
|
||||
@@ -1224,6 +1348,33 @@ function skipNotifications () {
|
||||
activateSaveRestoreData();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function askDeleteDeviceEvents () {
|
||||
// Check MAC
|
||||
if (mac == '') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Ask delete device Events
|
||||
showModalWarning ('<?php echo $pia_lang['DevDetail_button_DeleteEvents'];?>', '<?php echo $pia_lang['DevDetail_button_DeleteEvents_Warning'];?>',
|
||||
'<?php echo $pia_lang['Gen_Cancel'];?>', '<?php echo $pia_lang['Gen_Delete'];?>', 'deleteDeviceEvents');
|
||||
}
|
||||
|
||||
function deleteDeviceEvents () {
|
||||
// Check MAC
|
||||
if (mac == '') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Delete device events
|
||||
$.get('php/server/devices.php?action=deleteDeviceEvents&mac='+ mac, function(msg) {
|
||||
showMessage (msg);
|
||||
});
|
||||
|
||||
// Deactivate controls
|
||||
$('#panDetails :input').attr('disabled', true);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function askDeleteDevice () {
|
||||
// Check MAC
|
||||
@@ -1256,13 +1407,16 @@ function deleteDevice () {
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function getSessionsPresenceEvents () {
|
||||
// Check MAC in url
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
mac = urlParams.get ('mac');
|
||||
// Define Sessions datasource and query dada
|
||||
$('#tableSessions').DataTable().ajax.url('php/server/events.php?action=getDeviceSessions&mac=' + mac +'&period='+ period).load();
|
||||
|
||||
// Define Presence datasource and query data
|
||||
$('#calendar').fullCalendar('removeEventSources');
|
||||
$('#calendar').fullCalendar('addEventSource',
|
||||
{ url: 'php/server/events.php?action=getDevicePresence&mac=' + mac +'&period='+ period });
|
||||
{ url: 'php/server/events.php?action=getDevicePresence&mac=' + mac});
|
||||
|
||||
// Query events
|
||||
getDeviceEvents();
|
||||
|
||||
@@ -8,7 +8,16 @@
|
||||
#--------------------------------------------------------------------------- -->
|
||||
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
if ($_SESSION["login"] != 1)
|
||||
{
|
||||
header('Location: /pialert/index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
require 'php/templates/header.php';
|
||||
require 'php/templates/graph.php';
|
||||
?>
|
||||
|
||||
<!-- Page ------------------------------------------------------------------ -->
|
||||
@@ -17,7 +26,7 @@
|
||||
<!-- Content header--------------------------------------------------------- -->
|
||||
<section class="content-header">
|
||||
<h1 id="pageTitle">
|
||||
Devices
|
||||
<?php echo $pia_lang['Device_Title'];?>
|
||||
</h1>
|
||||
</section>
|
||||
|
||||
@@ -26,74 +35,105 @@
|
||||
|
||||
<!-- top small box 1 ------------------------------------------------------- -->
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('all');">
|
||||
<div class="small-box bg-aqua pa-small-box-aqua pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesAll"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-laptop text-aqua-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> All Devices <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner"><h3 id="devicesAll"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Device_Shortcut_AllDevices'];?></p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-laptop text-aqua-40"></i></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 2 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('connected');">
|
||||
<div class="small-box bg-green pa-small-box-green pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesConnected"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-plug text-green-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Connected <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner"><h3 id="devicesConnected"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Device_Shortcut_Connected'];?></p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-plug text-green-40"></i></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 3 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('favorites');">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesFavorites"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-star text-yellow-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Favorites <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner"><h3 id="devicesFavorites"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Device_Shortcut_Favorites'];?></p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-star text-yellow-40"></i></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 4 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('new');">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesNew"> -- </h3> </div>
|
||||
<div class="icon"> <i class="ion ion-plus-round text-yellow-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> New Devices <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner"><h3 id="devicesNew"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Device_Shortcut_NewDevices'];?></p>
|
||||
</div>
|
||||
<div class="icon"><i class="ion ion-plus-round text-yellow-40"></i></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 5 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('down');">
|
||||
<div class="small-box bg-red pa-small-box-red pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesDown"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-warning text-red-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Down Alerts <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner"><h3 id="devicesDown"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Device_Shortcut_DownAlerts'];?></p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-warning text-red-40"></i></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 6 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('archived');">
|
||||
<div class="small-box bg-gray pa-small-box-gray pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesArchived"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-eye-slash text-gray-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Archived <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-gray top_small_box_gray_text">
|
||||
<div class="inner"><h3 id="devicesArchived"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Device_Shortcut_Archived'];?></p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-eye-slash text-gray-40"></i></div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<!-- Activity Chart ------------------------------------------------------- -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box" id="clients">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title"><?php echo $pia_lang['Device_Shortcut_OnlineChart'];?> </h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<div class="chart">
|
||||
<script src="lib/AdminLTE/bower_components/chart.js/Chart.js"></script>
|
||||
<canvas id="OnlineChart" style="width:100%; height: 150px; margin-bottom: 15px;"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-body -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="js/graph_online_history.js"></script>
|
||||
<script>
|
||||
var pia_js_online_history_time = [<?php pia_graph_devices_data($Pia_Graph_Device_Time); ?>];
|
||||
var pia_js_online_history_ondev = [<?php pia_graph_devices_data($Pia_Graph_Device_Online); ?>];
|
||||
var pia_js_online_history_dodev = [<?php pia_graph_devices_data($Pia_Graph_Device_Down); ?>];
|
||||
var pia_js_online_history_ardev = [<?php pia_graph_devices_data($Pia_Graph_Device_Arch); ?>];
|
||||
pia_draw_graph_online_history(pia_js_online_history_time, pia_js_online_history_ondev, pia_js_online_history_dodev, pia_js_online_history_ardev);
|
||||
</script>
|
||||
|
||||
<!-- datatable ------------------------------------------------------------- -->
|
||||
<div class="row">
|
||||
@@ -110,19 +150,19 @@
|
||||
<table id="tableDevices" class="table table-bordered table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Owner</th>
|
||||
<th>Type</th>
|
||||
<th>Favorite</th>
|
||||
<th>Group</th>
|
||||
<th>First Session</th>
|
||||
<th>Last Session</th>
|
||||
<th>Last IP</th>
|
||||
<th>MAC</th>
|
||||
<th>Status</th>
|
||||
<th>MAC</th>
|
||||
<th>Last IP Order</th>
|
||||
<th>Rowid</th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_Name'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_Owner'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_Type'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_Favorite'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_Group'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_FirstSession'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_LastSession'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_LastIP'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_MAC'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_Status'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_MAC'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_LastIPOrder'];?></th>
|
||||
<th><?php echo $pia_lang['Device_TableHead_Rowid'];?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
@@ -197,12 +237,19 @@ function main () {
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function initializeDatatable () {
|
||||
// If the device has a small width (mobile) only show name, ip, and status columns.
|
||||
if (window.screen.width < 400) {
|
||||
var tableColumnShow = [10,11,12,1,2,3,4,5,6,8];
|
||||
} else {
|
||||
var tableColumnShow = [10, 11, 12];
|
||||
};
|
||||
var table=
|
||||
$('#tableDevices').DataTable({
|
||||
'paging' : true,
|
||||
'lengthChange' : true,
|
||||
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']],
|
||||
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, '<?php echo $pia_lang['Device_Tablelenght_all'];?>']],
|
||||
'searching' : true,
|
||||
|
||||
'ordering' : true,
|
||||
'info' : true,
|
||||
'autoWidth' : false,
|
||||
@@ -213,7 +260,7 @@ function initializeDatatable () {
|
||||
// 'order' : [[3,'desc'], [0,'asc']],
|
||||
|
||||
'columnDefs' : [
|
||||
{visible: false, targets: [10, 11, 12] },
|
||||
{visible: false, targets: tableColumnShow },
|
||||
{className: 'text-center', targets: [3, 8, 9] },
|
||||
{width: '80px', targets: [5, 6] },
|
||||
{width: '0px', targets: 9 },
|
||||
@@ -263,7 +310,7 @@ function initializeDatatable () {
|
||||
default: color='aqua'; break;
|
||||
};
|
||||
|
||||
$(td).html ('<a href="deviceDetails.php?mac='+ rowData[10] +'" class="badge bg-'+ color +'">'+ cellData +'</a>');
|
||||
$(td).html ('<a href="deviceDetails.php?mac='+ rowData[10] +'" class="badge bg-'+ color +'">'+ cellData.replace('-', '') +'</a>');
|
||||
} },
|
||||
],
|
||||
|
||||
@@ -271,7 +318,14 @@ function initializeDatatable () {
|
||||
'processing' : true,
|
||||
'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>',
|
||||
emptyTable: 'No data'
|
||||
emptyTable: 'No data',
|
||||
"lengthMenu": "<?php echo $pia_lang['Device_Tablelenght'];?>",
|
||||
"search": "<?php echo $pia_lang['Device_Searchbox'];?>: ",
|
||||
"paginate": {
|
||||
"next": "<?php echo $pia_lang['Device_Table_nav_next'];?>",
|
||||
"previous": "<?php echo $pia_lang['Device_Table_nav_prev'];?>"
|
||||
},
|
||||
"info": "<?php echo $pia_lang['Device_Table_info'];?>",
|
||||
}
|
||||
});
|
||||
|
||||
@@ -288,6 +342,7 @@ function initializeDatatable () {
|
||||
$('#tableDevices').on( 'search.dt', function () {
|
||||
setCookie ('devicesList', JSON.stringify (table.column(12, { 'search': 'applied' }).data().toArray()) );
|
||||
} );
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -320,13 +375,13 @@ function getDevicesList (status) {
|
||||
|
||||
// Define color & title for the status selected
|
||||
switch (deviceStatus) {
|
||||
case 'all': tableTitle = 'All Devices'; color = 'aqua'; break;
|
||||
case 'connected': tableTitle = 'Connected Devices'; color = 'green'; break;
|
||||
case 'favorites': tableTitle = 'Favorites'; color = 'yellow'; break;
|
||||
case 'new': tableTitle = 'New Devices'; color = 'yellow'; break;
|
||||
case 'down': tableTitle = 'Down Alerts'; color = 'red'; break;
|
||||
case 'archived': tableTitle = 'Archived Devices'; color = 'gray'; break;
|
||||
default: tableTitle = 'Devices'; color = 'gray'; break;
|
||||
case 'all': tableTitle = '<?php echo $pia_lang['Device_Shortcut_AllDevices']?>'; color = 'aqua'; break;
|
||||
case 'connected': tableTitle = '<?php echo $pia_lang['Device_Shortcut_Connected']?>'; color = 'green'; break;
|
||||
case 'favorites': tableTitle = '<?php echo $pia_lang['Device_Shortcut_Favorites']?>'; color = 'yellow'; break;
|
||||
case 'new': tableTitle = '<?php echo $pia_lang['Device_Shortcut_NewDevices']?>'; color = 'yellow'; break;
|
||||
case 'down': tableTitle = '<?php echo $pia_lang['Device_Shortcut_DownAlerts']?>'; color = 'red'; break;
|
||||
case 'archived': tableTitle = '<?php echo $pia_lang['Device_Shortcut_Archived']?>'; color = 'gray'; break;
|
||||
default: tableTitle = '<?php echo $pia_lang['Device_Shortcut_Devices']?>'; color = 'gray'; break;
|
||||
}
|
||||
|
||||
// Set title and color
|
||||
|
||||
121
front/events.php
@@ -8,6 +8,14 @@
|
||||
#--------------------------------------------------------------------------- -->
|
||||
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
if ($_SESSION["login"] != 1)
|
||||
{
|
||||
header('Location: /pialert/index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
require 'php/templates/header.php';
|
||||
?>
|
||||
|
||||
@@ -17,17 +25,17 @@
|
||||
<!-- Content header--------------------------------------------------------- -->
|
||||
<section class="content-header">
|
||||
<h1 id="pageTitle">
|
||||
Events
|
||||
<?php echo $pia_lang['Events_Title'];?>
|
||||
</h1>
|
||||
|
||||
<!-- period selector -->
|
||||
<span class="breadcrumb" style="top: 0px;">
|
||||
<select class="form-control" id="period" onchange="javascript: periodChanged();">
|
||||
<option value="1 day">Today</option>
|
||||
<option value="7 days">Last Week</option>
|
||||
<option value="1 month" selected>Last Month</option>
|
||||
<option value="1 year">Last Year</option>
|
||||
<option value="100 years">All info</option>
|
||||
<option value="1 day"><?php echo $pia_lang['Events_Periodselect_today'];?></option>
|
||||
<option value="7 days"><?php echo $pia_lang['Events_Periodselect_LastWeek'];?></option>
|
||||
<option value="1 month" selected><?php echo $pia_lang['Events_Periodselect_LastMonth'];?></option>
|
||||
<option value="1 year"><?php echo $pia_lang['Events_Periodselect_LastYear'];?></option>
|
||||
<option value="100 years"><?php echo $pia_lang['Events_Periodselect_All'];?></option>
|
||||
</select>
|
||||
</span>
|
||||
</section>
|
||||
@@ -40,10 +48,11 @@
|
||||
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getEvents('all');">
|
||||
<div class="small-box bg-aqua pa-small-box-aqua pa-small-box-2">
|
||||
<div class="inner"> <h3 id="eventsAll"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-bolt text-aqua-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> All events <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner"> <h3 id="eventsAll"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Events_Shortcut_AllEvents'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="fa fa-bolt text-aqua-40"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -51,10 +60,11 @@
|
||||
<!-- top small box --------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getEvents('sessions');">
|
||||
<div class="small-box bg-green pa-small-box-green pa-small-box-2">
|
||||
<div class="inner"> <h3 id="eventsSessions"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-plug text-green-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Sessions <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner"> <h3 id="eventsSessions"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Events_Shortcut_Sessions'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="fa fa-plug text-green-40"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -62,10 +72,11 @@
|
||||
<!-- top small box --------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getEvents('missing');">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="eventsMissing"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-exchange text-yellow-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Missing Sessions <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner"> <h3 id="eventsMissing"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Events_Shortcut_MissSessions'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="fa fa-exchange text-yellow-40"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -73,10 +84,11 @@
|
||||
<!-- top small box --------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getEvents('voided');">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="eventsVoided"> -- </h3> </div>
|
||||
<div class="icon text-aqua-20"> <i class="fa fa-exclamation-circle text-yellow-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Voided Sessions <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner"> <h3 id="eventsVoided"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Events_Shortcut_VoidSessions'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="fa fa-exclamation-circle text-yellow-40"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -84,10 +96,11 @@
|
||||
<!-- top small box --------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getEvents('new');">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="eventsNewDevices"> -- </h3> </div>
|
||||
<div class="icon"> <i class="ion ion-plus-round text-yellow-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> New Devices <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner"> <h3 id="eventsNewDevices"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Events_Shortcut_NewDevices'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="ion ion-plus-round text-yellow-40"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -95,10 +108,11 @@
|
||||
<!-- top small box --------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getEvents('down');">
|
||||
<div class="small-box bg-red pa-small-box-red pa-small-box-2">
|
||||
<div class="inner"> <h3 id="eventsDown"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-warning text-red-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Down Alerts <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner"> <h3 id="eventsDown"> -- </h3>
|
||||
<p class="infobox_label"><?php echo $pia_lang['Events_Shortcut_DownAlerts'];?></p>
|
||||
</div>
|
||||
<div class="icon"> <i class="fa fa-warning text-red-40"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -121,18 +135,18 @@
|
||||
<table id="tableEvents" class="table table-bordered table-hover table-striped ">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Order</th>
|
||||
<th>Device</th>
|
||||
<th>Owner</th>
|
||||
<th>Date</th>
|
||||
<th>Event Type</th>
|
||||
<th>Connection</th>
|
||||
<th>Disconnection</th>
|
||||
<th>Duration</th>
|
||||
<th>Duration Order</th>
|
||||
<th>IP</th>
|
||||
<th>IP Order</th>
|
||||
<th>Additional Info</th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_Order'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_Device'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_Owner'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_Date'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_EventType'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_Connection'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_Disconnection'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_Duration'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_DurationOrder'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_IP'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_IPOrder'];?></th>
|
||||
<th><?php echo $pia_lang['Events_TableHead_AdditionalInfo'];?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
@@ -245,7 +259,14 @@ function initializeDatatable () {
|
||||
'processing' : true,
|
||||
'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>',
|
||||
emptyTable: 'No data'
|
||||
emptyTable: 'No data',
|
||||
"lengthMenu": "<?php echo $pia_lang['Events_Tablelenght'];?>",
|
||||
"search": "<?php echo $pia_lang['Events_Searchbox'];?>: ",
|
||||
"paginate": {
|
||||
"next": "<?php echo $pia_lang['Events_Table_nav_next'];?>",
|
||||
"previous": "<?php echo $pia_lang['Events_Table_nav_prev'];?>"
|
||||
},
|
||||
"info": "<?php echo $pia_lang['Events_Table_info'];?>",
|
||||
}
|
||||
});
|
||||
|
||||
@@ -297,13 +318,13 @@ function getEvents (p_eventsType) {
|
||||
|
||||
// Define color & title for the status selected
|
||||
switch (eventsType) {
|
||||
case 'all': tableTitle = 'All Events'; color = 'aqua'; sesionCols = false; break;
|
||||
case 'sessions': tableTitle = 'Sessions'; color = 'green'; sesionCols = true; break;
|
||||
case 'missing': tableTitle = 'Missing Events'; color = 'yellow'; sesionCols = true; break;
|
||||
case 'voided': tableTitle = 'Voided Events'; color = 'yellow'; sesionCols = false; break;
|
||||
case 'new': tableTitle = 'New Devices Events'; color = 'yellow'; sesionCols = false; break;
|
||||
case 'down': tableTitle = 'Down Alerts'; color = 'red'; sesionCols = false; break;
|
||||
default: tableTitle = 'Events'; boxClass = ''; sesionCols = false; break;
|
||||
case 'all': tableTitle = '<?php echo $pia_lang['Events_Shortcut_AllEvents'];?>'; color = 'aqua'; sesionCols = false; break;
|
||||
case 'sessions': tableTitle = '<?php echo $pia_lang['Events_Shortcut_Sessions'];?>'; color = 'green'; sesionCols = true; break;
|
||||
case 'missing': tableTitle = '<?php echo $pia_lang['Events_Shortcut_MissSessions'];?>'; color = 'yellow'; sesionCols = true; break;
|
||||
case 'voided': tableTitle = '<?php echo $pia_lang['Events_Shortcut_VoidSessions'];?>'; color = 'yellow'; sesionCols = false; break;
|
||||
case 'new': tableTitle = '<?php echo $pia_lang['Events_Shortcut_NewDevices'];?>'; color = 'yellow'; sesionCols = false; break;
|
||||
case 'down': tableTitle = '<?php echo $pia_lang['Events_Shortcut_DownAlerts'];?>'; color = 'red'; sesionCols = false; break;
|
||||
default: tableTitle = '<?php echo $pia_lang['Events_Shortcut_Events'];?>'; boxClass = ''; sesionCols = false; break;
|
||||
}
|
||||
|
||||
// Set title and color
|
||||
|
||||
BIN
front/img/Loading_Animation.gif
Normal file
|
After Width: | Height: | Size: 813 B |
BIN
front/img/boxed-bg-dark.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
14
front/img/manifest.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "Pi-Alert Console",
|
||||
"short_name": "Pi-Alert",
|
||||
"display": "standalone",
|
||||
"icons": [
|
||||
{
|
||||
"src": "",
|
||||
"sizes": "180x180",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#000",
|
||||
"background_color": "#000"
|
||||
}
|
||||
459
front/index.php
@@ -1,342 +1,159 @@
|
||||
<!-- ---------------------------------------------------------------------------
|
||||
# Pi.Alert
|
||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||
#
|
||||
# devices.php - Front module. Devices list page
|
||||
#-------------------------------------------------------------------------------
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
#--------------------------------------------------------------------------- -->
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
<?php
|
||||
require 'php/templates/header.php';
|
||||
if ($_REQUEST['action'] == 'logout') {
|
||||
session_destroy();
|
||||
header('Location: /pialert/index.php');
|
||||
}
|
||||
// ##################################################
|
||||
// ## Login Processing start
|
||||
// ##################################################
|
||||
$config_file = "../config/pialert.conf";
|
||||
$config_file_lines = file($config_file);
|
||||
|
||||
// ###################################
|
||||
// ## PIALERT_WEB_PROTECTION FALSE
|
||||
// ###################################
|
||||
|
||||
$config_file_lines_bypass = array_values(preg_grep('/^PIALERT_WEB_PROTECTION\s.*/', $config_file_lines));
|
||||
$protection_line = explode("=", $config_file_lines_bypass[0]);
|
||||
$Pia_WebProtection = strtolower(trim($protection_line[1]));
|
||||
|
||||
if ($Pia_WebProtection != 'true')
|
||||
{
|
||||
header('Location: /pialert/devices.php');
|
||||
$_SESSION["login"] = 1;
|
||||
exit;
|
||||
}
|
||||
|
||||
// ###################################
|
||||
// ## PIALERT_WEB_PROTECTION TRUE
|
||||
// ###################################
|
||||
|
||||
$config_file_lines = array_values(preg_grep('/^PIALERT_WEB_PASSWORD\s.*/', $config_file_lines));
|
||||
$password_line = explode("'", $config_file_lines[0]);
|
||||
$Pia_Password = $password_line[1];
|
||||
|
||||
if ($Pia_Password == hash('sha256',$_POST["loginpassword"]))
|
||||
{
|
||||
header('Location: /pialert/devices.php');
|
||||
$_SESSION["login"] = 1;
|
||||
}
|
||||
|
||||
if ($_SESSION["login"] == 1)
|
||||
{
|
||||
header('Location: /pialert/devices.php');
|
||||
}
|
||||
|
||||
if ($_SESSION["login"] != 1)
|
||||
{
|
||||
if (file_exists('../db/setting_darkmode')) {$ENABLED_DARKMODE = True;}
|
||||
if ($Pia_Password == '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92') {$login_info = 'Defaultpassword "123456" is still active';
|
||||
}
|
||||
|
||||
// ##################################################
|
||||
// ## Login Processing end
|
||||
// ##################################################
|
||||
?>
|
||||
|
||||
<!-- Page ------------------------------------------------------------------ -->
|
||||
<div class="content-wrapper">
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
|
||||
<meta http-equiv="Pragma" content="no-cache" />
|
||||
<meta http-equiv="Expires" content="0" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>Pi-Alert | Log in</title>
|
||||
<!-- Tell the browser to be responsive to screen width -->
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<link rel="stylesheet" href="lib/AdminLTE/bower_components/bootstrap/dist/css/bootstrap.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="lib/AdminLTE/bower_components/font-awesome/css/font-awesome.min.css">
|
||||
<!-- Ionicons -->
|
||||
<link rel="stylesheet" href="lib/AdminLTE/bower_components/Ionicons/css/ionicons.min.css">
|
||||
<!-- Theme style -->
|
||||
<link rel="stylesheet" href="lib/AdminLTE/dist/css/AdminLTE.min.css">
|
||||
<!-- iCheck -->
|
||||
<link rel="stylesheet" href="lib/AdminLTE/plugins/iCheck/square/blue.css">
|
||||
|
||||
<!-- Content header--------------------------------------------------------- -->
|
||||
<section class="content-header">
|
||||
<h1 id="pageTitle">
|
||||
Devices
|
||||
</h1>
|
||||
</section>
|
||||
<!-- Dark-Mode Patch -->
|
||||
<?php
|
||||
if ($ENABLED_DARKMODE === True) {
|
||||
echo '<link rel="stylesheet" href="css/dark-patch.css">';
|
||||
$BACKGROUND_IMAGE_PATCH='style="background-image: url(\'img/boxed-bg-dark.png\');"';
|
||||
} else { $BACKGROUND_IMAGE_PATCH='style="background-image: url(\'img/background.png\');"';}
|
||||
?>
|
||||
|
||||
<!-- Main content ---------------------------------------------------------- -->
|
||||
<section class="content">
|
||||
|
||||
<!-- top small box 1 ------------------------------------------------------- -->
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('all');">
|
||||
<div class="small-box bg-aqua pa-small-box-aqua pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesAll"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-laptop text-aqua-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> All Devices <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 2 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('connected');">
|
||||
<div class="small-box bg-green pa-small-box-green pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesConnected"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-plug text-green-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Connected <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 3 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('favorites');">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesFavorites"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-star text-yellow-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Favorites <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 4 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('new');">
|
||||
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesNew"> -- </h3> </div>
|
||||
<div class="icon"> <i class="ion ion-plus-round text-yellow-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> New Devices <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 5 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('down');">
|
||||
<div class="small-box bg-red pa-small-box-red pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesDown"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-warning text-red-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Down Alerts <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- top small box 6 ------------------------------------------------------- -->
|
||||
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||
<a href="#" onclick="javascript: getDevicesList('archived');">
|
||||
<div class="small-box bg-gray pa-small-box-gray pa-small-box-2">
|
||||
<div class="inner"> <h3 id="devicesArchived"> -- </h3> </div>
|
||||
<div class="icon"> <i class="fa fa-eye-slash text-gray-20"></i> </div>
|
||||
<div class="small-box-footer pa-small-box-footer"> Archived <i class="fa fa-arrow-circle-right"></i> </div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<link rel="stylesheet" href="/front/css/offline-font.css">
|
||||
</head>
|
||||
<body class="hold-transition login-page">
|
||||
<div class="login-box">
|
||||
<div class="login-logo">
|
||||
<a href="/pialert/index2.php">Pi.<b>Alert</b></a>
|
||||
</div>
|
||||
<!-- /.login-logo -->
|
||||
<div class="login-box-body">
|
||||
<p class="login-box-msg">Sign in to start your session</p>
|
||||
|
||||
<form action="/pialert/index.php" method="post">
|
||||
<div class="form-group has-feedback">
|
||||
<input type="password" class="form-control" placeholder="Password" name="loginpassword">
|
||||
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<!-- datatable ------------------------------------------------------------- -->
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div id="tableDevicesBox" class="box">
|
||||
|
||||
<!-- box-header -->
|
||||
<div class="box-header">
|
||||
<h3 id="tableDevicesTitle" class="box-title text-gray">Devices</h3>
|
||||
</div>
|
||||
|
||||
<!-- table -->
|
||||
<div class="box-body table-responsive">
|
||||
<table id="tableDevices" class="table table-bordered table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Owner</th>
|
||||
<th>Type</th>
|
||||
<th>Favorite</th>
|
||||
<th>Group</th>
|
||||
<th>First Session</th>
|
||||
<th>Last Session</th>
|
||||
<th>Last IP</th>
|
||||
<th>MAC</th>
|
||||
<th>Status</th>
|
||||
<th>MAC</th>
|
||||
<th>Last IP Order</th>
|
||||
<th>Rowid</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /.box-body -->
|
||||
|
||||
<div class="col-xs-8">
|
||||
<div class="checkbox icheck">
|
||||
<label>
|
||||
<input type="checkbox" disabled> Remember Me
|
||||
</label>
|
||||
</div>
|
||||
<!-- /.box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-xs-4">
|
||||
<button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</form>
|
||||
|
||||
<!-- ----------------------------------------------------------------------- -->
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
</div>
|
||||
<!-- /.content-wrapper -->
|
||||
<!-- /.login-box-body -->
|
||||
|
||||
<div class="box-body" style="margin-top: 50px;">
|
||||
<div class="alert alert-danger alert-dismissible">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<h4><i class="icon fa fa-ban"></i>Password Alert!</h4>
|
||||
<p><?php echo $login_info;?></p>
|
||||
<p>To set a new password run:<br><span style="border: solid 1px yellow; padding: 2px;">./reset_password.sh yournewpassword</span><br>in the config folder.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- ----------------------------------------------------------------------- -->
|
||||
<?php
|
||||
require 'php/templates/footer.php';
|
||||
?>
|
||||
</div>
|
||||
<!-- /.login-box -->
|
||||
|
||||
|
||||
<!-- ----------------------------------------------------------------------- -->
|
||||
<!-- Datatable -->
|
||||
<link rel="stylesheet" href="lib/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
|
||||
<script src="lib/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="lib/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
||||
|
||||
|
||||
<!-- page script ----------------------------------------------------------- -->
|
||||
<!-- jQuery 3 -->
|
||||
<script src="lib/AdminLTE/bower_components/jquery/dist/jquery.min.js"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="lib/AdminLTE/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
|
||||
<!-- iCheck -->
|
||||
<script src="lib/AdminLTE/plugins/iCheck/icheck.min.js"></script>
|
||||
<script>
|
||||
var deviceStatus = 'all';
|
||||
var parTableRows = 'Front_Devices_Rows';
|
||||
var parTableOrder = 'Front_Devices_Order';
|
||||
var tableRows = 10;
|
||||
var tableOrder = [[3,'desc'], [0,'asc']];
|
||||
|
||||
// Read parameters & Initialize components
|
||||
main();
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function main () {
|
||||
// get parameter value
|
||||
$.get('php/server/parameters.php?action=get¶meter='+ parTableRows, function(data) {
|
||||
var result = JSON.parse(data);
|
||||
if (Number.isInteger (result) ) {
|
||||
tableRows = result;
|
||||
}
|
||||
|
||||
// get parameter value
|
||||
$.get('php/server/parameters.php?action=get¶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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function initializeDatatable () {
|
||||
var table=
|
||||
$('#tableDevices').DataTable({
|
||||
'paging' : true,
|
||||
'lengthChange' : true,
|
||||
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']],
|
||||
'searching' : true,
|
||||
'ordering' : true,
|
||||
'info' : true,
|
||||
'autoWidth' : false,
|
||||
|
||||
// Parameters
|
||||
'pageLength' : tableRows,
|
||||
'order' : tableOrder,
|
||||
// 'order' : [[3,'desc'], [0,'asc']],
|
||||
|
||||
'columnDefs' : [
|
||||
{visible: false, targets: [10, 11, 12] },
|
||||
{className: 'text-center', targets: [3, 8, 9] },
|
||||
{width: '80px', targets: [5, 6] },
|
||||
{width: '0px', targets: 9 },
|
||||
{orderData: [11], targets: 7 },
|
||||
|
||||
// Device Name
|
||||
{targets: [0],
|
||||
'createdCell': function (td, cellData, rowData, row, col) {
|
||||
$(td).html ('<b><a href="deviceDetails.php?mac='+ rowData[10] +'" class="">'+ cellData +'</a></b>');
|
||||
} },
|
||||
|
||||
// Favorite
|
||||
{targets: [3],
|
||||
'createdCell': function (td, cellData, rowData, row, col) {
|
||||
if (cellData == 1){
|
||||
$(td).html ('<i class="fa fa-star text-yellow" style="font-size:16px"></i>');
|
||||
} else {
|
||||
$(td).html ('');
|
||||
}
|
||||
} },
|
||||
|
||||
// Dates
|
||||
{targets: [5, 6],
|
||||
'createdCell': function (td, cellData, rowData, row, col) {
|
||||
$(td).html (translateHTMLcodes (cellData));
|
||||
} },
|
||||
|
||||
// Random MAC
|
||||
{targets: [8],
|
||||
'createdCell': function (td, cellData, rowData, row, col) {
|
||||
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>');
|
||||
} else {
|
||||
$(td).html ('');
|
||||
}
|
||||
} },
|
||||
|
||||
// Status color
|
||||
{targets: [9],
|
||||
'createdCell': function (td, cellData, rowData, row, col) {
|
||||
switch (cellData) {
|
||||
case 'Down': color='red'; break;
|
||||
case 'New': color='yellow'; break;
|
||||
case 'On-line': color='green'; break;
|
||||
case 'Off-line': color='gray text-white'; break;
|
||||
case 'Archived': color='gray text-white'; break;
|
||||
default: color='aqua'; break;
|
||||
};
|
||||
|
||||
$(td).html ('<a href="deviceDetails.php?mac='+ rowData[10] +'" class="badge bg-'+ color +'">'+ cellData +'</a>');
|
||||
} },
|
||||
],
|
||||
|
||||
// Processing
|
||||
'processing' : true,
|
||||
'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>',
|
||||
emptyTable: 'No data'
|
||||
}
|
||||
$(function () {
|
||||
$('input').iCheck({
|
||||
checkboxClass: 'icheckbox_square-blue',
|
||||
radioClass: 'iradio_square-blue',
|
||||
increaseArea: '20%' /* optional */
|
||||
});
|
||||
});
|
||||
|
||||
// Save cookie Rows displayed, and Parameters rows & order
|
||||
$('#tableDevices').on( 'length.dt', function ( e, settings, len ) {
|
||||
setParameter (parTableRows, len);
|
||||
} );
|
||||
|
||||
$('#tableDevices').on( 'order.dt', function () {
|
||||
setParameter (parTableOrder, JSON.stringify (table.order()) );
|
||||
setCookie ('devicesList',JSON.stringify (table.column(12, { 'search': 'applied' }).data().toArray()) );
|
||||
} );
|
||||
|
||||
$('#tableDevices').on( 'search.dt', function () {
|
||||
setCookie ('devicesList', JSON.stringify (table.column(12, { 'search': 'applied' }).data().toArray()) );
|
||||
} );
|
||||
};
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function getDevicesTotals () {
|
||||
// stop timer
|
||||
stopTimerRefreshData();
|
||||
|
||||
// get totals and put in boxes
|
||||
$.get('php/server/devices.php?action=getDevicesTotals', function(data) {
|
||||
var totalsDevices = JSON.parse(data);
|
||||
|
||||
$('#devicesAll').html (totalsDevices[0].toLocaleString());
|
||||
$('#devicesConnected').html (totalsDevices[1].toLocaleString());
|
||||
$('#devicesFavorites').html (totalsDevices[2].toLocaleString());
|
||||
$('#devicesNew').html (totalsDevices[3].toLocaleString());
|
||||
$('#devicesDown').html (totalsDevices[4].toLocaleString());
|
||||
$('#devicesArchived').html (totalsDevices[5].toLocaleString());
|
||||
|
||||
// Timer for refresh data
|
||||
newTimerRefreshData (getDevicesTotals);
|
||||
} );
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
function getDevicesList (status) {
|
||||
// Save status selected
|
||||
deviceStatus = status;
|
||||
|
||||
// Define color & title for the status selected
|
||||
switch (deviceStatus) {
|
||||
case 'all': tableTitle = 'All Devices'; color = 'aqua'; break;
|
||||
case 'connected': tableTitle = 'Connected Devices'; color = 'green'; break;
|
||||
case 'favorites': tableTitle = 'Favorites'; color = 'yellow'; break;
|
||||
case 'new': tableTitle = 'New Devices'; color = 'yellow'; break;
|
||||
case 'down': tableTitle = 'Down Alerts'; color = 'red'; break;
|
||||
case 'archived': tableTitle = 'Archived Devices'; color = 'gray'; break;
|
||||
default: tableTitle = 'Devices'; color = 'gray'; break;
|
||||
}
|
||||
|
||||
// Set title and color
|
||||
$('#tableDevicesTitle')[0].className = 'box-title text-'+ color;
|
||||
$('#tableDevicesBox')[0].className = 'box box-'+ color;
|
||||
$('#tableDevicesTitle').html (tableTitle);
|
||||
|
||||
// Define new datasource URL and reload
|
||||
$('#tableDevices').DataTable().ajax.url(
|
||||
'php/server/devices.php?action=getDevicesList&status=' + deviceStatus).load();
|
||||
};
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<?php
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
63
front/js/graph_online_history.js
Normal file
@@ -0,0 +1,63 @@
|
||||
function pia_draw_graph_online_history(pia_js_graph_online_history_time, pia_js_graph_online_history_ondev, pia_js_graph_online_history_dodev, pia_js_graph_online_history_ardev) {
|
||||
var xValues = pia_js_graph_online_history_time;
|
||||
new Chart("OnlineChart", {
|
||||
type: "bar",
|
||||
data: {
|
||||
labels: xValues,
|
||||
datasets: [{
|
||||
label: 'Online',
|
||||
data: pia_js_graph_online_history_ondev,
|
||||
borderColor: "rgba(0, 166, 89)",
|
||||
fill: true,
|
||||
backgroundColor: "rgba(0, 166, 89, .6)",
|
||||
pointStyle: 'circle',
|
||||
pointRadius: 3,
|
||||
pointHoverRadius: 3
|
||||
}, {
|
||||
label: 'Offline/Down',
|
||||
data: pia_js_graph_online_history_dodev,
|
||||
borderColor: "rgba(222, 74, 56)",
|
||||
fill: true,
|
||||
backgroundColor: "rgba(222, 74, 56, .6)",
|
||||
}, {
|
||||
label: 'Archived',
|
||||
data: pia_js_graph_online_history_ardev,
|
||||
borderColor: "rgba(220,220,220)",
|
||||
fill: true,
|
||||
backgroundColor: "rgba(220,220,220, .6)",
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
legend: {
|
||||
display: true,
|
||||
labels: {
|
||||
fontColor: "#A0A0A0",
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero:true,
|
||||
fontColor: '#A0A0A0'
|
||||
},
|
||||
gridLines: {
|
||||
color: "rgba(0, 0, 0, 0)",
|
||||
},
|
||||
stacked: true,
|
||||
}],
|
||||
xAxes: [{
|
||||
ticks: {
|
||||
fontColor: '#A0A0A0',
|
||||
},
|
||||
gridLines: {
|
||||
color: "rgba(0, 0, 0, 0)",
|
||||
},
|
||||
stacked: true,
|
||||
}],
|
||||
},
|
||||
tooltips: {
|
||||
mode: 'index'
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
2
front/lib/AdminLTE/.npmignore
Normal file
@@ -0,0 +1,2 @@
|
||||
documentation/
|
||||
composer.json
|
||||
24
front/lib/AdminLTE/.travis.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
language: node_js
|
||||
|
||||
node_js:
|
||||
- 8
|
||||
- 9
|
||||
- 10
|
||||
- 11
|
||||
- 12
|
||||
|
||||
env:
|
||||
- INSTALL=bower
|
||||
- INSTALL=yarn
|
||||
- INSTALL=npm
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
|
||||
install:
|
||||
- if [ "bower" == $INSTALL ]; then yarn global add bower && bower install; fi
|
||||
- if [ "yarn" == $INSTALL ]; then yarn install; fi
|
||||
- if [ "npm" == $INSTALL ]; then npm install; fi
|
||||
|
||||
script:
|
||||
- echo 'Tests must be configured'
|
||||
312
front/lib/AdminLTE/Gruntfile.js
Normal file
@@ -0,0 +1,312 @@
|
||||
// AdminLTE Gruntfile
|
||||
module.exports = function (grunt) { // jshint ignore:line
|
||||
'use strict';
|
||||
|
||||
grunt.initConfig({
|
||||
pkg : grunt.file.readJSON('package.json'),
|
||||
watch : {
|
||||
less : {
|
||||
// Compiles less files upon saving
|
||||
files: ['build/less/*.less'],
|
||||
tasks: ['less:development', 'less:production', 'replace', 'notify:less']
|
||||
},
|
||||
js : {
|
||||
// Compile js files upon saving
|
||||
files: ['build/js/*.js'],
|
||||
tasks: ['js', 'notify:js']
|
||||
},
|
||||
skins: {
|
||||
// Compile any skin less files upon saving
|
||||
files: ['build/less/skins/*.less'],
|
||||
tasks: ['less:skins', 'less:minifiedSkins', 'notify:less']
|
||||
}
|
||||
},
|
||||
// Notify end of tasks
|
||||
notify: {
|
||||
less: {
|
||||
options: {
|
||||
title : 'AdminLTE',
|
||||
message: 'LESS finished running'
|
||||
}
|
||||
},
|
||||
js : {
|
||||
options: {
|
||||
title : 'AdminLTE',
|
||||
message: 'JS bundler finished running'
|
||||
}
|
||||
}
|
||||
},
|
||||
// 'less'-task configuration
|
||||
// This task will compile all less files upon saving to create both AdminLTE.css and AdminLTE.min.css
|
||||
less : {
|
||||
// Development not compressed
|
||||
development : {
|
||||
files: {
|
||||
// compilation.css : source.less
|
||||
'dist/css/AdminLTE.css' : 'build/less/AdminLTE.less',
|
||||
// AdminLTE without plugins
|
||||
'dist/css/alt/AdminLTE-without-plugins.css' : 'build/less/AdminLTE-without-plugins.less',
|
||||
// Separate plugins
|
||||
'dist/css/alt/AdminLTE-select2.css' : 'build/less/select2.less',
|
||||
'dist/css/alt/AdminLTE-fullcalendar.css' : 'build/less/fullcalendar.less',
|
||||
'dist/css/alt/AdminLTE-bootstrap-social.css': 'build/less/bootstrap-social.less'
|
||||
}
|
||||
},
|
||||
// Production compressed version
|
||||
production : {
|
||||
options: {
|
||||
compress: true
|
||||
},
|
||||
files : {
|
||||
// compilation.css : source.less
|
||||
'dist/css/AdminLTE.min.css' : 'build/less/AdminLTE.less',
|
||||
// AdminLTE without plugins
|
||||
'dist/css/alt/AdminLTE-without-plugins.min.css' : 'build/less/AdminLTE-without-plugins.less',
|
||||
// Separate plugins
|
||||
'dist/css/alt/AdminLTE-select2.min.css' : 'build/less/select2.less',
|
||||
'dist/css/alt/AdminLTE-fullcalendar.min.css' : 'build/less/fullcalendar.less',
|
||||
'dist/css/alt/AdminLTE-bootstrap-social.min.css': 'build/less/bootstrap-social.less'
|
||||
}
|
||||
},
|
||||
// Non minified skin files
|
||||
skins : {
|
||||
files: {
|
||||
'dist/css/skins/skin-blue.css' : 'build/less/skins/skin-blue.less',
|
||||
'dist/css/skins/skin-black.css' : 'build/less/skins/skin-black.less',
|
||||
'dist/css/skins/skin-yellow.css' : 'build/less/skins/skin-yellow.less',
|
||||
'dist/css/skins/skin-green.css' : 'build/less/skins/skin-green.less',
|
||||
'dist/css/skins/skin-red.css' : 'build/less/skins/skin-red.less',
|
||||
'dist/css/skins/skin-purple.css' : 'build/less/skins/skin-purple.less',
|
||||
'dist/css/skins/skin-blue-light.css' : 'build/less/skins/skin-blue-light.less',
|
||||
'dist/css/skins/skin-black-light.css' : 'build/less/skins/skin-black-light.less',
|
||||
'dist/css/skins/skin-yellow-light.css': 'build/less/skins/skin-yellow-light.less',
|
||||
'dist/css/skins/skin-green-light.css' : 'build/less/skins/skin-green-light.less',
|
||||
'dist/css/skins/skin-red-light.css' : 'build/less/skins/skin-red-light.less',
|
||||
'dist/css/skins/skin-purple-light.css': 'build/less/skins/skin-purple-light.less',
|
||||
'dist/css/skins/_all-skins.css' : 'build/less/skins/_all-skins.less'
|
||||
}
|
||||
},
|
||||
// Skins minified
|
||||
minifiedSkins: {
|
||||
options: {
|
||||
compress: true
|
||||
},
|
||||
files : {
|
||||
'dist/css/skins/skin-blue.min.css' : 'build/less/skins/skin-blue.less',
|
||||
'dist/css/skins/skin-black.min.css' : 'build/less/skins/skin-black.less',
|
||||
'dist/css/skins/skin-yellow.min.css' : 'build/less/skins/skin-yellow.less',
|
||||
'dist/css/skins/skin-green.min.css' : 'build/less/skins/skin-green.less',
|
||||
'dist/css/skins/skin-red.min.css' : 'build/less/skins/skin-red.less',
|
||||
'dist/css/skins/skin-purple.min.css' : 'build/less/skins/skin-purple.less',
|
||||
'dist/css/skins/skin-blue-light.min.css' : 'build/less/skins/skin-blue-light.less',
|
||||
'dist/css/skins/skin-black-light.min.css' : 'build/less/skins/skin-black-light.less',
|
||||
'dist/css/skins/skin-yellow-light.min.css': 'build/less/skins/skin-yellow-light.less',
|
||||
'dist/css/skins/skin-green-light.min.css' : 'build/less/skins/skin-green-light.less',
|
||||
'dist/css/skins/skin-red-light.min.css' : 'build/less/skins/skin-red-light.less',
|
||||
'dist/css/skins/skin-purple-light.min.css': 'build/less/skins/skin-purple-light.less',
|
||||
'dist/css/skins/_all-skins.min.css' : 'build/less/skins/_all-skins.less'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Uglify task info. Compress the js files.
|
||||
uglify: {
|
||||
options : {
|
||||
mangle : true,
|
||||
output: {
|
||||
comments: 'some'
|
||||
},
|
||||
},
|
||||
production: {
|
||||
files: {
|
||||
'dist/js/adminlte.min.js': ['dist/js/adminlte.js']
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Concatenate JS Files
|
||||
concat: {
|
||||
options: {
|
||||
separator: '\n\n',
|
||||
banner : '/*! AdminLTE app.js\n'
|
||||
+ '* ================\n'
|
||||
+ '* Main JS application file for AdminLTE v2. This file\n'
|
||||
+ '* should be included in all pages. It controls some layout\n'
|
||||
+ '* options and implements exclusive AdminLTE plugins.\n'
|
||||
+ '*\n'
|
||||
+ '* @author Colorlib\n'
|
||||
+ '* @support <https://github.com/ColorlibHQ/AdminLTE/issues>\n'
|
||||
+ '* @version <%= pkg.version %>\n'
|
||||
+ '* @repository <%= pkg.repository.url %>\n'
|
||||
+ '* @license MIT <http://opensource.org/licenses/MIT>\n'
|
||||
+ '*/\n\n'
|
||||
+ '// Make sure jQuery has been loaded\n'
|
||||
+ 'if (typeof jQuery === \'undefined\') {\n'
|
||||
+ 'throw new Error(\'AdminLTE requires jQuery\')\n'
|
||||
+ '}\n\n'
|
||||
},
|
||||
dist : {
|
||||
src : [
|
||||
'build/js/BoxRefresh.js',
|
||||
'build/js/BoxWidget.js',
|
||||
'build/js/ControlSidebar.js',
|
||||
'build/js/DirectChat.js',
|
||||
'build/js/PushMenu.js',
|
||||
'build/js/TodoList.js',
|
||||
'build/js/Tree.js',
|
||||
'build/js/Layout.js',
|
||||
],
|
||||
dest: 'dist/js/adminlte.js'
|
||||
}
|
||||
},
|
||||
|
||||
// Replace image paths in AdminLTE without plugins
|
||||
replace: {
|
||||
withoutPlugins : {
|
||||
src : ['dist/css/alt/AdminLTE-without-plugins.css'],
|
||||
dest : 'dist/css/alt/AdminLTE-without-plugins.css',
|
||||
replacements: [
|
||||
{
|
||||
from: '../img',
|
||||
to : '../../img'
|
||||
}
|
||||
]
|
||||
},
|
||||
withoutPluginsMin: {
|
||||
src : ['dist/css/alt/AdminLTE-without-plugins.min.css'],
|
||||
dest : 'dist/css/alt/AdminLTE-without-plugins.min.css',
|
||||
replacements: [
|
||||
{
|
||||
from: '../img',
|
||||
to : '../../img'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
// Build the documentation files
|
||||
includes: {
|
||||
build: {
|
||||
src : ['*.html'], // Source files
|
||||
dest : 'documentation/', // Destination directory
|
||||
flatten: true,
|
||||
cwd : 'documentation/build',
|
||||
options: {
|
||||
silent : true,
|
||||
includePath: 'documentation/build/include'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Optimize images
|
||||
image: {
|
||||
dynamic: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
cwd : 'build/img/',
|
||||
src : ['**/*.{png,jpg,gif,svg,jpeg}'],
|
||||
dest : 'dist/img/'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
// Validate JS code
|
||||
jshint: {
|
||||
options: {
|
||||
jshintrc: 'build/js/.jshintrc'
|
||||
},
|
||||
grunt : {
|
||||
options: {
|
||||
jshintrc: 'build/grunt/.jshintrc'
|
||||
},
|
||||
src : 'Gruntfile.js'
|
||||
},
|
||||
core : {
|
||||
src: 'build/js/*.js'
|
||||
},
|
||||
demo : {
|
||||
src: 'dist/js/demo.js'
|
||||
},
|
||||
pages : {
|
||||
src: 'dist/js/pages/*.js'
|
||||
}
|
||||
},
|
||||
|
||||
jscs: {
|
||||
options: {
|
||||
config: 'build/js/.jscsrc'
|
||||
},
|
||||
core : {
|
||||
src: '<%= jshint.core.src %>'
|
||||
},
|
||||
pages : {
|
||||
src: '<%= jshint.pages.src %>'
|
||||
}
|
||||
},
|
||||
|
||||
// Validate CSS files
|
||||
csslint: {
|
||||
options: {
|
||||
csslintrc: 'build/less/.csslintrc'
|
||||
},
|
||||
dist : [
|
||||
'dist/css/AdminLTE.css'
|
||||
]
|
||||
},
|
||||
|
||||
// Validate Bootstrap HTML
|
||||
bootlint: {
|
||||
options: {
|
||||
relaxerror: ['W005']
|
||||
},
|
||||
files : ['pages/**/*.html', '*.html']
|
||||
},
|
||||
|
||||
// Delete images in build directory
|
||||
// After compressing the images in the build/img dir, there is no need
|
||||
// for them
|
||||
clean: {
|
||||
build: ['build/img/*']
|
||||
}
|
||||
});
|
||||
|
||||
// Load all grunt tasks
|
||||
|
||||
// LESS Compiler
|
||||
grunt.loadNpmTasks('grunt-contrib-less');
|
||||
// Watch File Changes
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
// Compress JS Files
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
// Include Files Within HTML
|
||||
grunt.loadNpmTasks('grunt-includes');
|
||||
// Optimize images
|
||||
grunt.loadNpmTasks('grunt-image');
|
||||
// Validate JS code
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-jscs');
|
||||
// Delete not needed files
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
// Lint CSS
|
||||
grunt.loadNpmTasks('grunt-contrib-csslint');
|
||||
// Lint Bootstrap
|
||||
grunt.loadNpmTasks('grunt-bootlint');
|
||||
// Concatenate JS files
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
// Notify
|
||||
grunt.loadNpmTasks('grunt-notify');
|
||||
// Replace
|
||||
grunt.loadNpmTasks('grunt-text-replace');
|
||||
|
||||
// Linting task
|
||||
grunt.registerTask('lint', ['jshint', 'csslint', 'bootlint']);
|
||||
// JS task
|
||||
grunt.registerTask('js', ['concat', 'uglify']);
|
||||
// CSS Task
|
||||
grunt.registerTask('css', ['less:development', 'less:production', 'replace']);
|
||||
|
||||
// The default task (running 'grunt' in console) is 'watch'
|
||||
grunt.registerTask('default', ['watch']);
|
||||
};
|
||||
20
front/lib/AdminLTE/LICENSE
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014-2017 Abdullah Almsaeed
|
||||
|
||||
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.
|
||||
55
front/lib/AdminLTE/README.md
Normal file
@@ -0,0 +1,55 @@
|
||||
Introduction
|
||||
============
|
||||
|
||||
[](https://travis-ci.org/ColorlibHQ/AdminLTE)
|
||||

|
||||
[](https://www.npmjs.com/package/admin-lte)
|
||||
[](https://packagist.org/packages/almasaeed2010/adminlte)
|
||||
[](https://cdnjs.com/libraries/admin-lte)
|
||||
|
||||
**AdminLTE** -- is a fully responsive admin template. Based on **[Bootstrap 3 & 4](https://github.com/twbs/bootstrap)** framework. Highly customizable and easy to use. Fits many screen resolutions from small mobile devices to large desktops. Check out the live preview now and see for yourself.
|
||||
|
||||
**Download & Preview on [AdminLTE.IO](https://adminlte.io)**
|
||||
|
||||
### Looking for More Templates?
|
||||
- **[Admin Templates](http://dashboardpack.com/)** by DashboardPack
|
||||
- **[Bootstrap Templates](https://colorlib.com/wp/cat/bootstrap/)** by Colorlib
|
||||
- **[Admin Dashboards](https://colorlib.com/wp/free-bootstrap-admin-dashboard-templates/)** by varios template designers and developers based on Bootstrap, Vue, React, Angular and more.
|
||||
|
||||
## Documentation & Installation Guide
|
||||
Visit the [online documentation](https://adminlte.io/docs) for the most
|
||||
updated guide.
|
||||
|
||||

|
||||
|
||||
### Contribution
|
||||
Contribution are always **welcome and recommended**! Here is how:
|
||||
|
||||
- Fork the repository ([here is the guide](https://help.github.com/articles/fork-a-repo/)).
|
||||
- Clone to your machine ```git clone https://github.com/YOUR_USERNAME/AdminLTE.git```
|
||||
- Make your changes
|
||||
- Create a pull request
|
||||
|
||||
#### Contribution Requirements:
|
||||
|
||||
- When you contribute, you agree to give a non-exclusive license to AdminLTE.IO to use that contribution in any context as we (AdminLTE.IO) see appropriate.
|
||||
- If you use content provided by another party, it must be appropriately licensed using an [open source](http://opensource.org/licenses) license.
|
||||
- Contributions are only accepted through Github pull requests.
|
||||
- Finally, contributed code must work in all supported browsers (see above for browser support).
|
||||
|
||||
### License
|
||||
AdminLTE is an open source project by [AdminLTE.IO](https://adminlte.io) that is licensed under [MIT](http://opensource.org/licenses/MIT). AdminLTE.IO
|
||||
reserves the right to change the license of future releases. Wondering what you can or can't do? View the [license guide](https://adminlte.io/docs/license).
|
||||
|
||||
### Legacy Releases
|
||||
AdminLTE 1.x can be easily upgraded to 2.x using [this guide](https://adminlte.io/themes/AdminLTE/documentation/index.html#upgrade), but if you intend to keep using AdminLTE 1.x, you can download the latest release from the [releases](https://github.com/ColorlibHQ/AdminLTE/releases) section above.
|
||||
|
||||
### Change log
|
||||
**For the most recent change log, visit the [releases page](https://github.com/ColorlibHQ/AdminLTE/releases).** We will add detailed release notes to each new release.
|
||||
|
||||
### Image Credits
|
||||
- [Pixeden](http://www.pixeden.com/psd-web-elements/flat-responsive-showcase-psd)
|
||||
- [Graphicsfuel](http://www.graphicsfuel.com/2013/02/13-high-resolution-blur-backgrounds/)
|
||||
- [Pickaface](http://pickaface.net/)
|
||||
- [Unsplash](https://unsplash.com/)
|
||||
- [Uifaces](http://uifaces.com/)
|
||||
64
front/lib/AdminLTE/bower.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"name": "admin-lte",
|
||||
"homepage": "https://adminlte.io",
|
||||
"authors": [
|
||||
"Abdullah Almsaeed <abdullah@almsaeedstudio.com>"
|
||||
],
|
||||
"description": "Admin dashboard and control panel template",
|
||||
"main": [
|
||||
"index2.html",
|
||||
"dist/css/AdminLTE.css",
|
||||
"dist/js/adminlte.js",
|
||||
"build/less/AdminLTE.less"
|
||||
],
|
||||
"keywords": [
|
||||
"css",
|
||||
"js",
|
||||
"html",
|
||||
"template",
|
||||
"admin",
|
||||
"bootstrap",
|
||||
"theme",
|
||||
"backend",
|
||||
"responsive"
|
||||
],
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"composer.json",
|
||||
"documentation"
|
||||
],
|
||||
"dependencies": {
|
||||
"chart.js": "^1.0",
|
||||
"ckeditor": "^4.7",
|
||||
"bootstrap-colorpicker": "^2.5.1",
|
||||
"bootstrap": "^3.4",
|
||||
"jquery": "^3.4.1",
|
||||
"datatables.net": "^1.10.15",
|
||||
"datatables.net-bs": "^2.1.1",
|
||||
"bootstrap-datepicker": "^1.7",
|
||||
"bootstrap-daterangepicker": "^2.1.25",
|
||||
"moment": "^2.18.1",
|
||||
"fastclick": "^1.0.6",
|
||||
"Flot": "flot#^0.8.3",
|
||||
"fullcalendar": "^3.4",
|
||||
"inputmask": "jquery.inputmask#^3.3.7",
|
||||
"ion.rangeSlider": "ionrangeslider#^2.2",
|
||||
"jvectormap": "^1.2.2",
|
||||
"jquery-knob": "^1.2.13",
|
||||
"morris.js": "^0.5.1",
|
||||
"PACE": "pace#^1.0.2",
|
||||
"select2": "^4.0.7",
|
||||
"jquery-slimscroll": "slimscroll#^1.3.8",
|
||||
"jquery-sparkline": "^2.1.3",
|
||||
"font-awesome": "^4.7",
|
||||
"Ionicons": "ionicons#^2.0.1",
|
||||
"jquery-ui": "^1.12.1",
|
||||
"seiyria-bootstrap-slider": "^10.6.2"
|
||||
},
|
||||
"resolutions": {
|
||||
"jquery": "^3.4.1"
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
*.min.js
|
||||
!excanvas.min.js
|
||||
node_modules/
|
||||
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M476.7,422.2L270.1,72.7c-2.9-5-8.3-8.7-14.1-8.7c-5.9,0-11.3,3.7-14.1,8.7L35.3,422.2c-2.8,5-4.8,13-1.9,17.9
|
||||
c2.9,4.9,8.2,7.9,14,7.9h417.1c5.8,0,11.1-3,14-7.9C481.5,435.2,479.5,427.1,476.7,422.2z M288,400h-64v-48h64V400z M288,320h-64
|
||||
V176h64V320z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M476.7,422.2L270.1,72.7c-2.9-5-8.3-8.7-14.1-8.7c-5.9,0-11.3,3.7-14.1,8.7L35.3,422.2c-2.8,5-4.8,13-1.9,17.9
|
||||
c2.9,4.9,8.2,7.9,14,7.9h417.1c5.8,0,11.1-3,14-7.9C481.5,435.2,479.5,427.1,476.7,422.2z M288,400h-64v-48h64V400z M288,320h-64
|
||||
V176h64V320z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 755 B After Width: | Height: | Size: 766 B |
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M320,480H192v-96h128V480z M304,320h-96L192,32h128L304,320z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M320,480H192v-96h128V480z M304,320h-96L192,32h128L304,320z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 565 B After Width: | Height: | Size: 574 B |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M256,48C141.125,48,48,141.125,48,256s93.125,208,208,208s208-93.125,208-208S370.875,48,256,48z M363,277h-86v86h-42v-86
|
||||
h-86v-42h86v-86h42v86h86V277z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M256,48C141.125,48,48,141.125,48,256s93.125,208,208,208s208-93.125,208-208S370.875,48,256,48z M363,277h-86v86h-42v-86
|
||||
h-86v-42h86v-86h42v86h86V277z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 662 B After Width: | Height: | Size: 674 B |
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_7_">
|
||||
<g>
|
||||
<path d="M416,277.333H277.333V416h-42.666V277.333H96v-42.666h138.667V96h42.666v138.667H416V277.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_7_">
|
||||
<g>
|
||||
<path d="M416,277.333H277.333V416h-42.666V277.333H96v-42.666h138.667V96h42.666v138.667H416V277.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 615 B After Width: | Height: | Size: 626 B |
@@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_2_">
|
||||
<g>
|
||||
<path d="M470,124.837l-98.443-81.78l-27.814,32.931l98.442,81.769L470,124.837z M167.192,74.919L139.366,42L42,124.837
|
||||
l27.814,32.919L167.192,74.919z M266.701,172.628h-32.101v127.446l101.649,60.539l16.051-26.553l-85.6-49.917V172.628z
|
||||
M256,87.665c-107,0-192.601,86.021-192.601,191.166C63.399,383.98,149,470,256,470c105.936,0,192.601-86.02,192.601-191.169
|
||||
C448.601,173.687,361.936,87.665,256,87.665z M256,427.52c-82.393,0-149.8-66.906-149.8-148.688
|
||||
c0-81.777,67.407-148.684,149.8-148.684c82.394,0,149.8,66.906,149.8,148.684C405.8,361.671,338.394,427.52,256,427.52z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_2_">
|
||||
<g>
|
||||
<path d="M470,124.837l-98.443-81.78l-27.814,32.931l98.442,81.769L470,124.837z M167.192,74.919L139.366,42L42,124.837
|
||||
l27.814,32.919L167.192,74.919z M266.701,172.628h-32.101v127.446l101.649,60.539l16.051-26.553l-85.6-49.917V172.628z
|
||||
M256,87.665c-107,0-192.601,86.021-192.601,191.166C63.399,383.98,149,470,256,470c105.936,0,192.601-86.02,192.601-191.169
|
||||
C448.601,173.687,361.936,87.665,256,87.665z M256,427.52c-82.393,0-149.8-66.906-149.8-148.688
|
||||
c0-81.777,67.407-148.684,149.8-148.684c82.394,0,149.8,66.906,149.8,148.684C405.8,361.671,338.394,427.52,256,427.52z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_30_">
|
||||
<g>
|
||||
<path d="M256,48C141.6,48,48,141.601,48,256s93.6,208,208,208c114.4,0,208-93.601,208-208S370.4,48,256,48z M280,360h-48v-40h48
|
||||
V360z M280,272h-48V144h48V272z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_30_">
|
||||
<g>
|
||||
<path d="M256,48C141.6,48,48,141.601,48,256s93.6,208,208,208c114.4,0,208-93.601,208-208S370.4,48,256,48z M280,360h-48v-40h48
|
||||
V360z M280,272h-48V144h48V272z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 687 B |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon">
|
||||
<g>
|
||||
<path d="M96,176h80V96H96V176z M216,416h80v-80h-80V416z M96,416h80v-80H96V416z M96,296h80v-80H96V296z M216,296h80v-80h-80V296z
|
||||
M336,96v80h80V96H336z M216,176h80V96h-80V176z M336,296h80v-80h-80V296z M336,416h80v-80h-80V416z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon">
|
||||
<g>
|
||||
<path d="M96,176h80V96H96V176z M216,416h80v-80h-80V416z M96,416h80v-80H96V416z M96,296h80v-80H96V296z M216,296h80v-80h-80V296z
|
||||
M336,96v80h80V96H336z M216,176h80V96h-80V176z M336,296h80v-80h-80V296z M336,416h80v-80h-80V416z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 739 B After Width: | Height: | Size: 751 B |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M453.594,100.001l-32.353-39.299C415.469,52.627,405.083,48,394.664,48H117.335c-10.416,0-20.801,4.627-26.576,12.702
|
||||
l-32.351,39.299C51.468,106.923,48,117.335,48,128.886v288.89C48,443.2,68.8,464,94.225,464h323.553
|
||||
C443.202,464,464,443.2,464,417.775v-288.89C464,117.335,460.537,106.923,453.594,100.001z M256,383.109L128.89,256h80.89v-46.224
|
||||
h92.443V256h80.89L256,383.109z M96.534,94.221l18.486-23.111h277.331l21.965,23.111H96.534z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M453.594,100.001l-32.353-39.299C415.469,52.627,405.083,48,394.664,48H117.335c-10.416,0-20.801,4.627-26.576,12.702
|
||||
l-32.351,39.299C51.468,106.923,48,117.335,48,128.886v288.89C48,443.2,68.8,464,94.225,464h323.553
|
||||
C443.202,464,464,443.2,464,417.775v-288.89C464,117.335,460.537,106.923,453.594,100.001z M256,383.109L128.89,256h80.89v-46.224
|
||||
h92.443V256h80.89L256,383.109z M96.534,94.221l18.486-23.111h277.331l21.965,23.111H96.534z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 932 B After Width: | Height: | Size: 944 B |
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M427,234.625H167.296l119.702-119.702L256,85L85,256l171,171l29.922-29.924L167.296,277.375H427V234.625z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M427,234.625H167.296l119.702-119.702L256,85L85,256l171,171l29.922-29.924L167.296,277.375H427V234.625z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 637 B |
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M277.375,85v259.704l119.702-119.702L427,256L256,427L85,256l29.924-29.922l119.701,118.626V85H277.375z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M277.375,85v259.704l119.702-119.702L427,256L256,427L85,256l29.924-29.922l119.701,118.626V85H277.375z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 636 B |
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M256,48C141.125,48,48,141.125,48,256s93.125,208,208,208s208-93.125,208-208S370.875,48,256,48z M256,320l-96-96h192
|
||||
L256,320z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M256,48C141.125,48,48,141.125,48,256s93.125,208,208,208s208-93.125,208-208S370.875,48,256,48z M256,320l-96-96h192
|
||||
L256,320z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 635 B |
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="128,192 256,320 384,192 "/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="128,192 256,320 384,192 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 542 B |
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M464,256c0-114.875-93.125-208-208-208S48,141.125,48,256s93.125,208,208,208S464,370.875,464,256z M192,256l96-96v192
|
||||
L192,256z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M464,256c0-114.875-93.125-208-208-208S48,141.125,48,256s93.125,208,208,208S464,370.875,464,256z M192,256l96-96v192
|
||||
L192,256z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 636 B |
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="320,128 192,256 320,384 "/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="320,128 192,256 320,384 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 542 B |
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M256,464c114.875,0,208-93.125,208-208S370.875,48,256,48S48,141.125,48,256S141.125,464,256,464z M224,352V160l96,96
|
||||
L224,352z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M256,464c114.875,0,208-93.125,208-208S370.875,48,256,48S48,141.125,48,256S141.125,464,256,464z M224,352V160l96,96
|
||||
L224,352z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 635 B |
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="192,128 320,256 192,384 "/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="192,128 320,256 192,384 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 542 B |
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M464,256c0-114.875-93.125-208-208-208S48,141.125,48,256s93.125,208,208,208S464,370.875,464,256z M352,288H160l96-96
|
||||
L352,288z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M464,256c0-114.875-93.125-208-208-208S48,141.125,48,256s93.125,208,208,208S464,370.875,464,256z M352,288H160l96-96
|
||||
L352,288z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 636 B |
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="128,320 256,192 384,320 "/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="128,320 256,192 384,320 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 542 B |
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M85,277.375h259.704L225.002,397.077L256,427l171-171L256,85l-29.922,29.924l118.626,119.701H85V277.375z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M85,277.375h259.704L225.002,397.077L256,427l171-171L256,85l-29.922,29.924l118.626,119.701H85V277.375z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 637 B |
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M277.375,427V167.296l119.702,119.702L427,256L256,85L85,256l29.924,29.922l119.701-118.626V427H277.375z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_8_">
|
||||
<g>
|
||||
<path d="M277.375,427V167.296l119.702,119.702L427,256L256,85L85,256l29.924,29.922l119.701-118.626V427H277.375z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 637 B |
@@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_3_">
|
||||
<g>
|
||||
<path d="M341.334,128v234.666C341.334,409.604,302.938,448,256,448c-46.937,0-85.333-38.396-85.333-85.334V117.334
|
||||
C170.667,87.469,194.135,64,224,64c29.864,0,53.333,23.469,53.333,53.334v245.333c0,11.729-9.605,21.333-21.334,21.333
|
||||
c-11.729,0-21.333-9.604-21.333-21.333V160h-32v202.667C202.667,392.531,226.135,416,256,416
|
||||
c29.865,0,53.334-23.469,53.334-53.333V117.334C309.334,70.401,270.938,32,224,32c-46.938,0-85.334,38.401-85.334,85.334v245.332
|
||||
C138.667,427.729,190.938,480,256,480c65.062,0,117.334-52.271,117.334-117.334V128H341.334z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_3_">
|
||||
<g>
|
||||
<path d="M341.334,128v234.666C341.334,409.604,302.938,448,256,448c-46.937,0-85.333-38.396-85.333-85.334V117.334
|
||||
C170.667,87.469,194.135,64,224,64c29.864,0,53.333,23.469,53.333,53.334v245.333c0,11.729-9.605,21.333-21.334,21.333
|
||||
c-11.729,0-21.333-9.604-21.333-21.333V160h-32v202.667C202.667,392.531,226.135,416,256,416
|
||||
c29.865,0,53.334-23.469,53.334-53.333V117.334C309.334,70.401,270.938,32,224,32c-46.938,0-85.334,38.401-85.334,85.334v245.332
|
||||
C138.667,427.729,190.938,480,256,480c65.062,0,117.334-52.271,117.334-117.334V128H341.334z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_37_">
|
||||
<g>
|
||||
<path d="M234.667,277.333V408H128v40h256v-40H277.333V277.333L448,106.667V64H64v42.667L234.667,277.333z M160,149.333
|
||||
l-42.667-42.666h277.334L352,149.333H160z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_37_">
|
||||
<g>
|
||||
<path d="M234.667,277.333V408H128v40h256v-40H277.333V277.333L448,106.667V64H64v42.667L234.667,277.333z M160,149.333
|
||||
l-42.667-42.666h277.334L352,149.333H160z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 676 B After Width: | Height: | Size: 688 B |
@@ -1,19 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_13_">
|
||||
<g>
|
||||
<path d="M330.666,131.202c18.668,0,33.598-14.935,33.598-33.601S349.334,64,330.666,64C312,64,297.07,78.935,297.07,97.601
|
||||
S312,131.202,330.666,131.202z M386.666,261.334c-51.332,0-93.332,42-93.332,93.333s42,93.333,93.332,93.333
|
||||
C438,448,480,406,480,354.667S438,261.334,386.666,261.334z M386.666,420c-36.402,0-65.332-28.93-65.332-65.333
|
||||
s28.93-65.333,65.332-65.333c36.404,0,65.334,28.93,65.334,65.333S423.07,420,386.666,420z M305.597,224H384v-32h-58.845
|
||||
l-34.62-60.134c-5.605-9.333-15.869-15.864-27.07-15.864c-8.399,0-16.798,3.732-22.399,9.333l-71.732,69.065
|
||||
c-5.601,5.601-9.333,14-9.333,22.399c0,12.131,9.202,21.465,18.535,27.065L240,282.134V368h32V256l-39.333-32l42.929-44.533
|
||||
L305.597,224z M125.333,261.334C74,261.334,32,303.334,32,354.667S74,448,125.333,448c51.333,0,93.333-42,93.333-93.333
|
||||
S176.667,261.334,125.333,261.334z M125.333,420C88.934,420,60,391.07,60,354.667s28.934-65.333,65.333-65.333
|
||||
c36.399,0,65.333,28.93,65.333,65.333S161.732,420,125.333,420z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_13_">
|
||||
<g>
|
||||
<path d="M330.666,131.202c18.668,0,33.598-14.935,33.598-33.601S349.334,64,330.666,64C312,64,297.07,78.935,297.07,97.601
|
||||
S312,131.202,330.666,131.202z M386.666,261.334c-51.332,0-93.332,42-93.332,93.333s42,93.333,93.332,93.333
|
||||
C438,448,480,406,480,354.667S438,261.334,386.666,261.334z M386.666,420c-36.402,0-65.332-28.93-65.332-65.333
|
||||
s28.93-65.333,65.332-65.333c36.404,0,65.334,28.93,65.334,65.333S423.07,420,386.666,420z M305.597,224H384v-32h-58.845
|
||||
l-34.62-60.134c-5.605-9.333-15.869-15.864-27.07-15.864c-8.399,0-16.798,3.732-22.399,9.333l-71.732,69.065
|
||||
c-5.601,5.601-9.333,14-9.333,22.399c0,12.131,9.202,21.465,18.535,27.065L240,282.134V368h32V256l-39.333-32l42.929-44.533
|
||||
L305.597,224z M125.333,261.334C74,261.334,32,303.334,32,354.667S74,448,125.333,448c51.333,0,93.333-42,93.333-93.333
|
||||
S176.667,261.334,125.333,261.334z M125.333,420C88.934,420,60,391.07,60,354.667s28.934-65.333,65.333-65.333
|
||||
c36.399,0,65.333,28.93,65.333,65.333S161.732,420,125.333,420z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,16 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M84.255,413h1.063c34.123,0,63.977-19.021,85.305-42.494c21.325,23.473,51.18,42.762,85.304,42.762
|
||||
s63.979-19.334,85.305-42.806C362.559,393.934,392.412,413,426.535,413h1.062l51.253-138.78c2.126-5.329,1.063-11.641-1.07-16.976
|
||||
c-2.136-5.333-7.237-8.487-12.567-10.623L427,234.133v-98.15C427,112.51,407.344,93,383.884,93h-63.979l-15.993-53h-95.969
|
||||
l-15.995,53h-63.979C104.511,93,85,112.51,85,135.982v98.15l-38.074,12.533c-5.33,2.136-10.582,5.334-12.718,10.667
|
||||
c-2.135,5.335-3.158,10.49-1.031,16.887L84.255,413z M128,136h256v84.261l-128-41.605l-128,41.605V136z"/>
|
||||
<path d="M341.231,408.007c-52.253,36.267-118.356,36.258-170.608-0.009c0,0-57.638,64.002-106.632,64.002h21.327
|
||||
c29.854,0,58.646-11.726,85.305-25.594c53.315,27.734,117.293,27.728,170.608-0.007C367.89,460.268,396.681,472,426.535,472h21.328
|
||||
C400.212,472,341.231,408.007,341.231,408.007z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M84.255,413h1.063c34.123,0,63.977-19.021,85.305-42.494c21.325,23.473,51.18,42.762,85.304,42.762
|
||||
s63.979-19.334,85.305-42.806C362.559,393.934,392.412,413,426.535,413h1.062l51.253-138.78c2.126-5.329,1.063-11.641-1.07-16.976
|
||||
c-2.136-5.333-7.237-8.487-12.567-10.623L427,234.133v-98.15C427,112.51,407.344,93,383.884,93h-63.979l-15.993-53h-95.969
|
||||
l-15.995,53h-63.979C104.511,93,85,112.51,85,135.982v98.15l-38.074,12.533c-5.33,2.136-10.582,5.334-12.718,10.667
|
||||
c-2.135,5.335-3.158,10.49-1.031,16.887L84.255,413z M128,136h256v84.261l-128-41.605l-128,41.605V136z"/>
|
||||
<path d="M341.231,408.007c-52.253,36.267-118.356,36.258-170.608-0.009c0,0-57.638,64.002-106.632,64.002h21.327
|
||||
c29.854,0,58.646-11.726,85.305-25.594c53.315,27.734,117.293,27.728,170.608-0.007C367.89,460.268,396.681,472,426.535,472h21.328
|
||||
C400.212,472,341.231,408.007,341.231,408.007z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M360,64H152c-22.002,0-40,17.998-40,40v344l144-64l144,64V104C400,81.998,382.002,64,360,64z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M360,64H152c-22.002,0-40,17.998-40,40v344l144-64l144,64V104C400,81.998,382.002,64,360,64z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 579 B After Width: | Height: | Size: 586 B |
@@ -1,18 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_26_">
|
||||
<g>
|
||||
<path d="M256,170.136c25.499,0,49.567,10.025,67.771,28.229C341.975,216.568,352,240.637,352,266.136
|
||||
c0,17.621-4.422,34.031-13.144,48.773c-8.339,14.098-20.437,26.036-34.985,34.526L288,358.697v18.376V448h-64v-70.927v-18.376
|
||||
l-15.871-9.262C178.442,332.111,160,300.192,160,266.136c0-25.499,10.025-49.567,28.229-67.771
|
||||
C206.433,180.161,230.501,170.136,256,170.136 M277.333,32c-6.396,0-42.666,0-42.666,0v64h42.666V32L277.333,32z M406.396,85.864
|
||||
L368,124.271l29.864,29.865l38.406-38.396L406.396,85.864L406.396,85.864z M105.604,85.864l-29.875,29.875l38.406,38.396
|
||||
L144,124.271L105.604,85.864L105.604,85.864z M256,138.136c-70.396,0-128,57.604-128,128c0,46.938,25.604,88.531,64,110.938V480
|
||||
h128V377.073c38.396-22.406,64-62.938,64-110.938C384,195.739,326.396,138.136,256,138.136L256,138.136z M480,244.802h-64v42.667
|
||||
h64V244.802L480,244.802z M96,244.802H32v42.667h64V244.802L96,244.802z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_26_">
|
||||
<g>
|
||||
<path d="M256,170.136c25.499,0,49.567,10.025,67.771,28.229C341.975,216.568,352,240.637,352,266.136
|
||||
c0,17.621-4.422,34.031-13.144,48.773c-8.339,14.098-20.437,26.036-34.985,34.526L288,358.697v18.376V448h-64v-70.927v-18.376
|
||||
l-15.871-9.262C178.442,332.111,160,300.192,160,266.136c0-25.499,10.025-49.567,28.229-67.771
|
||||
C206.433,180.161,230.501,170.136,256,170.136 M277.333,32c-6.396,0-42.666,0-42.666,0v64h42.666V32L277.333,32z M406.396,85.864
|
||||
L368,124.271l29.864,29.865l38.406-38.396L406.396,85.864L406.396,85.864z M105.604,85.864l-29.875,29.875l38.406,38.396
|
||||
L144,124.271L105.604,85.864L105.604,85.864z M256,138.136c-70.396,0-128,57.604-128,128c0,46.938,25.604,88.531,64,110.938V480
|
||||
h128V377.073c38.396-22.406,64-62.938,64-110.938C384,195.739,326.396,138.136,256,138.136L256,138.136z M480,244.802h-64v42.667
|
||||
h64V244.802L480,244.802z M96,244.802H32v42.667h64V244.802L96,244.802z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,18 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_14_">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M80,352c0,19.198,13.864,24.531,26.667,36.271v38.396c0,11.729,9.599,21.334,21.333,21.334h21.333
|
||||
c11.734,0,21.334-9.604,21.334-21.334v-21.333h170.666v21.333c0,11.729,9.604,21.334,21.334,21.334H384
|
||||
c11.729,0,21.333-9.604,21.333-21.334v-38.396C418.136,376.531,432,370.136,432,352V148.334C432,73.667,349.864,64,256,64
|
||||
S80,73.667,80,148.334V352z M160,367.989c-18.136,0-32-13.864-32-32c0-18.135,13.864-32,32-32s32,13.865,32,32
|
||||
C192,354.125,178.136,367.989,160,367.989z M352,367.989c-18.136,0-32-13.864-32-32c0-18.135,13.864-32,32-32s32,13.865,32,32
|
||||
C384,354.125,370.136,367.989,352,367.989z M384,245.333H128V138.667h256V245.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_14_">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M80,352c0,19.198,13.864,24.531,26.667,36.271v38.396c0,11.729,9.599,21.334,21.333,21.334h21.333
|
||||
c11.734,0,21.334-9.604,21.334-21.334v-21.333h170.666v21.333c0,11.729,9.604,21.334,21.334,21.334H384
|
||||
c11.729,0,21.333-9.604,21.333-21.334v-38.396C418.136,376.531,432,370.136,432,352V148.334C432,73.667,349.864,64,256,64
|
||||
S80,73.667,80,148.334V352z M160,367.989c-18.136,0-32-13.864-32-32c0-18.135,13.864-32,32-32s32,13.865,32,32
|
||||
C192,354.125,178.136,367.989,160,367.989z M352,367.989c-18.136,0-32-13.864-32-32c0-18.135,13.864-32,32-32s32,13.865,32,32
|
||||
C384,354.125,370.136,367.989,352,367.989z M384,245.333H128V138.667h256V245.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M368.005,272h-96v96h96V272z M336.005,64v32h-160V64h-48v32h-24.01c-22.002,0-40,17.998-40,40v272
|
||||
c0,22.002,17.998,40,40,40h304.01c22.002,0,40-17.998,40-40V136c0-22.002-17.998-40-40-40h-24V64H336.005z M408.005,408h-304.01
|
||||
V196h304.01V408z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M368.005,272h-96v96h96V272z M336.005,64v32h-160V64h-48v32h-24.01c-22.002,0-40,17.998-40,40v272
|
||||
c0,22.002,17.998,40,40,40h304.01c22.002,0,40-17.998,40-40V136c0-22.002-17.998-40-40-40h-24V64H336.005z M408.005,408h-304.01
|
||||
V196h304.01V408z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 739 B After Width: | Height: | Size: 750 B |
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M426.666,330.667c-26.666,0-52.271-4.271-75.729-11.729c-7.469-2.136-16-1.073-21.332,5.333l-46.939,46.928
|
||||
c-60.802-30.928-109.864-80-140.802-140.803l46.939-46.927c5.332-5.333,7.462-13.864,5.332-21.333
|
||||
c-8.537-24.531-12.802-50.136-12.802-76.803C181.333,73.604,171.734,64,160,64H85.333C73.599,64,64,73.604,64,85.333
|
||||
C64,285.864,226.136,448,426.666,448c11.73,0,21.334-9.604,21.334-21.333V352C448,340.271,438.396,330.667,426.666,330.667z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M426.666,330.667c-26.666,0-52.271-4.271-75.729-11.729c-7.469-2.136-16-1.073-21.332,5.333l-46.939,46.928
|
||||
c-60.802-30.928-109.864-80-140.802-140.803l46.939-46.927c5.332-5.333,7.462-13.864,5.332-21.333
|
||||
c-8.537-24.531-12.802-50.136-12.802-76.803C181.333,73.604,171.734,64,160,64H85.333C73.599,64,64,73.604,64,85.333
|
||||
C64,285.864,226.136,448,426.666,448c11.73,0,21.334-9.604,21.334-21.333V352C448,340.271,438.396,330.667,426.666,330.667z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 924 B After Width: | Height: | Size: 934 B |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<circle cx="256" cy="280" r="63"/>
|
||||
<path d="M440,96h-88l-32-32H192l-32,32H72c-22.092,0-40,17.908-40,40v272c0,22.092,17.908,40,40,40h368c22.092,0,40-17.908,40-40
|
||||
V136C480,113.908,462.092,96,440,96z M256,392c-61.855,0-112-50.145-112-112s50.145-112,112-112s112,50.145,112,112
|
||||
S317.855,392,256,392z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<circle cx="256" cy="280" r="63"/>
|
||||
<path d="M440,96h-88l-32-32H192l-32,32H72c-22.092,0-40,17.908-40,40v272c0,22.092,17.908,40,40,40h368c22.092,0,40-17.908,40-40
|
||||
V136C480,113.908,462.092,96,440,96z M256,392c-61.855,0-112-50.145-112-112s50.145-112,112-112s112,50.145,112,112
|
||||
S317.855,392,256,392z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 790 B After Width: | Height: | Size: 802 B |
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M256,48C140.559,48,48,140.559,48,256c0,115.436,92.559,208,208,208c115.435,0,208-92.564,208-208
|
||||
C464,140.559,371.436,48,256,48z M360.002,330.881l-29.12,29.117L256,285.117l-74.881,74.881l-29.121-29.117L226.881,256
|
||||
l-74.883-74.881l29.121-29.116L256,226.881l74.881-74.878l29.12,29.116L285.119,256L360.002,330.881z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M256,48C140.559,48,48,140.559,48,256c0,115.436,92.559,208,208,208c115.435,0,208-92.564,208-208
|
||||
C464,140.559,371.436,48,256,48z M360.002,330.881l-29.12,29.117L256,285.117l-74.881,74.881l-29.121-29.117L226.881,256
|
||||
l-74.883-74.881l29.121-29.116L256,226.881l74.881-74.878l29.12,29.116L285.119,256L360.002,330.881z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 813 B After Width: | Height: | Size: 824 B |
@@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_15_">
|
||||
<g>
|
||||
<path d="M403.208,117.333c-4.271-12.802-16-21.333-29.875-21.333H138.667c-13.875,0-25.604,8.531-29.875,21.333L64,234.667v160
|
||||
C64,406.396,73.604,416,85.333,416h21.334c11.729,0,21.333-9.604,21.333-21.333V384h256v10.667
|
||||
c0,11.729,9.604,21.333,21.333,21.333h21.334c11.729,0,21.333-9.604,21.333-21.333v-160L403.208,117.333z M138.667,320
|
||||
c-18.125,0-32-13.865-32-32s13.875-32,32-32s32,13.866,32,32S156.792,320,138.667,320z M373.333,320c-18.125,0-32-13.865-32-32
|
||||
s13.875-32,32-32s32,13.866,32,32S391.458,320,373.333,320z M106.667,213.333l32-85.333h234.666l32,85.333H106.667z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_15_">
|
||||
<g>
|
||||
<path d="M403.208,117.333c-4.271-12.802-16-21.333-29.875-21.333H138.667c-13.875,0-25.604,8.531-29.875,21.333L64,234.667v160
|
||||
C64,406.396,73.604,416,85.333,416h21.334c11.729,0,21.333-9.604,21.333-21.333V384h256v10.667
|
||||
c0,11.729,9.604,21.333,21.333,21.333h21.334c11.729,0,21.333-9.604,21.333-21.333v-160L403.208,117.333z M138.667,320
|
||||
c-18.125,0-32-13.865-32-32s13.875-32,32-32s32,13.866,32,32S156.792,320,138.667,320z M373.333,320c-18.125,0-32-13.865-32-32
|
||||
s13.875-32,32-32s32,13.866,32,32S391.458,320,373.333,320z M106.667,213.333l32-85.333h234.666l32,85.333H106.667z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#010101" d="M169.6,377.6c-22.882,0-41.6,18.718-41.6,41.601c0,22.882,18.718,41.6,41.6,41.6s41.601-18.718,41.601-41.6
|
||||
C211.2,396.317,192.481,377.6,169.6,377.6z M48,51.2v41.6h41.6l74.883,151.682l-31.308,50.954c-3.118,5.2-5.2,12.482-5.2,19.765
|
||||
c0,27.85,19.025,41.6,44.825,41.6H416v-40H177.893c-3.118,0-5.2-2.082-5.2-5.2c0-1.036,2.207-5.2,2.207-5.2l20.782-32.8h154.954
|
||||
c15.601,0,29.128-8.317,36.4-21.836l74.882-128.8c1.237-2.461,2.082-6.246,2.082-10.399c0-11.446-9.364-19.765-20.8-19.765H135.364
|
||||
L115.6,51.2H48z M374.399,377.6c-22.882,0-41.6,18.718-41.6,41.601c0,22.882,18.718,41.6,41.6,41.6S416,442.082,416,419.2
|
||||
C416,396.317,397.281,377.6,374.399,377.6z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#010101" d="M169.6,377.6c-22.882,0-41.6,18.718-41.6,41.601c0,22.882,18.718,41.6,41.6,41.6s41.601-18.718,41.601-41.6
|
||||
C211.2,396.317,192.481,377.6,169.6,377.6z M48,51.2v41.6h41.6l74.883,151.682l-31.308,50.954c-3.118,5.2-5.2,12.482-5.2,19.765
|
||||
c0,27.85,19.025,41.6,44.825,41.6H416v-40H177.893c-3.118,0-5.2-2.082-5.2-5.2c0-1.036,2.207-5.2,2.207-5.2l20.782-32.8h154.954
|
||||
c15.601,0,29.128-8.317,36.4-21.836l74.882-128.8c1.237-2.461,2.082-6.246,2.082-10.399c0-11.446-9.364-19.765-20.8-19.765H135.364
|
||||
L115.6,51.2H48z M374.399,377.6c-22.882,0-41.6,18.718-41.6,41.601c0,22.882,18.718,41.6,41.6,41.6S416,442.082,416,419.2
|
||||
C416,396.317,397.281,377.6,374.399,377.6z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M391.553,64H57.607C53.131,64,48,67.745,48,72.159v214.217c0,4.413,5.131,8.624,9.607,8.624H115v88.894L205.128,295
|
||||
h186.425c4.477,0,7.447-4.211,7.447-8.624V72.159C399,67.745,396.029,64,391.553,64z"/>
|
||||
<path d="M456.396,127H424v166.57c0,15.987-6.915,26.43-25.152,26.43H218.096l-38.905,39h129.688L399,448v-89h57.396
|
||||
c4.478,0,7.604-4.262,7.604-8.682V136.103C464,131.689,460.874,127,456.396,127z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M391.553,64H57.607C53.131,64,48,67.745,48,72.159v214.217c0,4.413,5.131,8.624,9.607,8.624H115v88.894L205.128,295
|
||||
h186.425c4.477,0,7.447-4.211,7.447-8.624V72.159C399,67.745,396.029,64,391.553,64z"/>
|
||||
<path d="M456.396,127H424v166.57c0,15.987-6.915,26.43-25.152,26.43H218.096l-38.905,39h129.688L399,448v-89h57.396
|
||||
c4.478,0,7.604-4.262,7.604-8.682V136.103C464,131.689,460.874,127,456.396,127z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 892 B After Width: | Height: | Size: 904 B |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_23_">
|
||||
<g>
|
||||
<path d="M405.333,64H106.667C83.198,64,64,83.198,64,106.667v298.666C64,428.802,83.198,448,106.667,448h298.666
|
||||
C428.802,448,448,428.802,448,405.333V106.667C448,83.198,428.802,64,405.333,64z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_23_">
|
||||
<g>
|
||||
<path d="M405.333,64H106.667C83.198,64,64,83.198,64,106.667v298.666C64,428.802,83.198,448,106.667,448h298.666
|
||||
C428.802,448,448,428.802,448,405.333V106.667C448,83.198,428.802,64,405.333,64z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 708 B After Width: | Height: | Size: 720 B |
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_25_">
|
||||
<g>
|
||||
<path d="M405.333,106.667v298.666H106.667V106.667H405.333 M405.333,64H106.667C83.198,64,64,83.198,64,106.667v298.666
|
||||
C64,428.802,83.198,448,106.667,448h298.666C428.802,448,448,428.802,448,405.333V106.667C448,83.198,428.802,64,405.333,64
|
||||
L405.333,64z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_25_">
|
||||
<g>
|
||||
<path d="M405.333,106.667v298.666H106.667V106.667H405.333 M405.333,64H106.667C83.198,64,64,83.198,64,106.667v298.666
|
||||
C64,428.802,83.198,448,106.667,448h298.666C428.802,448,448,428.802,448,405.333V106.667C448,83.198,428.802,64,405.333,64
|
||||
L405.333,64z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 772 B After Width: | Height: | Size: 785 B |
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_24_">
|
||||
<g>
|
||||
<path d="M168.531,215.469l-29.864,29.864l96,96L448,128l-29.864-29.864L234.667,280.531L168.531,215.469z M405.333,405.333
|
||||
H106.667V106.667H320V64H106.667C83.198,64,64,83.198,64,106.667v298.666C64,428.802,83.198,448,106.667,448h298.666
|
||||
C428.802,448,448,428.802,448,405.333V234.667h-42.667V405.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_24_">
|
||||
<g>
|
||||
<path d="M168.531,215.469l-29.864,29.864l96,96L448,128l-29.864-29.864L234.667,280.531L168.531,215.469z M405.333,405.333
|
||||
H106.667V106.667H320V64H106.667C83.198,64,64,83.198,64,106.667v298.666C64,428.802,83.198,448,106.667,448h298.666
|
||||
C428.802,448,448,428.802,448,405.333V234.667h-42.667V405.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 817 B After Width: | Height: | Size: 830 B |
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_22_">
|
||||
<g>
|
||||
<path d="M405.333,64H106.667C83.198,64,64,83.198,64,106.667v298.666C64,428.802,83.198,448,106.667,448h298.666
|
||||
C428.802,448,448,428.802,448,405.333V106.667C448,83.198,428.802,64,405.333,64z M213.333,362.667L106.667,256l29.864-29.864
|
||||
l76.802,76.802l162.136-162.136l29.864,29.865L213.333,362.667z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<g id="Icon_22_">
|
||||
<g>
|
||||
<path d="M405.333,64H106.667C83.198,64,64,83.198,64,106.667v298.666C64,428.802,83.198,448,106.667,448h298.666
|
||||
C428.802,448,448,428.802,448,405.333V106.667C448,83.198,428.802,64,405.333,64z M213.333,362.667L106.667,256l29.864-29.864
|
||||
l76.802,76.802l162.136-162.136l29.864,29.865L213.333,362.667z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 816 B After Width: | Height: | Size: 829 B |
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M170.718,216.482L141.6,245.6L235.2,339.2l208-208l-29.118-29.118L235.2,279.918L170.718,216.482z M422.4,256
|
||||
c0,91.518-74.883,166.4-166.4,166.4S89.6,347.518,89.6,256S164.482,89.6,256,89.6c15.6,0,31.2,2.082,45.764,6.241L334,63.6
|
||||
C310.082,53.2,284.082,48,256,48C141.6,48,48,141.6,48,256s93.6,208,208,208s208-93.6,208-208H422.4z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M170.718,216.482L141.6,245.6L235.2,339.2l208-208l-29.118-29.118L235.2,279.918L170.718,216.482z M422.4,256
|
||||
c0,91.518-74.883,166.4-166.4,166.4S89.6,347.518,89.6,256S164.482,89.6,256,89.6c15.6,0,31.2,2.082,45.764,6.241L334,63.6
|
||||
C310.082,53.2,284.082,48,256,48C141.6,48,48,141.6,48,256s93.6,208,208,208s208-93.6,208-208H422.4z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 814 B After Width: | Height: | Size: 823 B |
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M405.333,80h-87.35C310.879,52.396,285.821,32,256,32s-54.879,20.396-61.983,48h-87.35C83.198,80,64,99.198,64,122.667
|
||||
v314.665C64,460.801,83.198,480,106.667,480h298.666C428.802,480,448,460.801,448,437.332V122.667C448,99.198,428.802,80,405.333,80
|
||||
z M256,80c11.729,0,21.333,9.599,21.333,21.333s-9.604,21.334-21.333,21.334s-21.333-9.6-21.333-21.334S244.271,80,256,80z M408,440
|
||||
H104V120h40v72h224v-72h40V440z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M405.333,80h-87.35C310.879,52.396,285.821,32,256,32s-54.879,20.396-61.983,48h-87.35C83.198,80,64,99.198,64,122.667
|
||||
v314.665C64,460.801,83.198,480,106.667,480h298.666C428.802,480,448,460.801,448,437.332V122.667C448,99.198,428.802,80,405.333,80
|
||||
z M256,80c11.729,0,21.333,9.599,21.333,21.333s-9.604,21.334-21.333,21.334s-21.333-9.6-21.333-21.334S244.271,80,256,80z M408,440
|
||||
H104V120h40v72h224v-72h40V440z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 904 B |