initial commit

This commit is contained in:
Marco Locatelli
2021-03-09 15:22:10 +01:00
commit ce2e4c523e
101 changed files with 17308 additions and 0 deletions
+207
View File
@@ -0,0 +1,207 @@
import config
import RPi.GPIO as GPIO
ScanMode = 0
# gain channel
ADS1256_GAIN_E = {'ADS1256_GAIN_1' : 0, # GAIN 1
'ADS1256_GAIN_2' : 1, # GAIN 2
'ADS1256_GAIN_4' : 2, # GAIN 4
'ADS1256_GAIN_8' : 3, # GAIN 8
'ADS1256_GAIN_16' : 4,# GAIN 16
'ADS1256_GAIN_32' : 5,# GAIN 32
'ADS1256_GAIN_64' : 6,# GAIN 64
}
# data rate
ADS1256_DRATE_E = {'ADS1256_30000SPS' : 0xF0, # reset the default values
'ADS1256_15000SPS' : 0xE0,
'ADS1256_7500SPS' : 0xD0,
'ADS1256_3750SPS' : 0xC0,
'ADS1256_2000SPS' : 0xB0,
'ADS1256_1000SPS' : 0xA1,
'ADS1256_500SPS' : 0x92,
'ADS1256_100SPS' : 0x82,
'ADS1256_60SPS' : 0x72,
'ADS1256_50SPS' : 0x63,
'ADS1256_30SPS' : 0x53,
'ADS1256_25SPS' : 0x43,
'ADS1256_15SPS' : 0x33,
'ADS1256_10SPS' : 0x20,
'ADS1256_5SPS' : 0x13,
'ADS1256_2d5SPS' : 0x03
}
# registration definition
REG_E = {'REG_STATUS' : 0, # x1H
'REG_MUX' : 1, # 01H
'REG_ADCON' : 2, # 20H
'REG_DRATE' : 3, # F0H
'REG_IO' : 4, # E0H
'REG_OFC0' : 5, # xxH
'REG_OFC1' : 6, # xxH
'REG_OFC2' : 7, # xxH
'REG_FSC0' : 8, # xxH
'REG_FSC1' : 9, # xxH
'REG_FSC2' : 10, # xxH
}
# command definition
CMD = {'CMD_WAKEUP' : 0x00, # Completes SYNC and Exits Standby Mode 0000 0000 (00h)
'CMD_RDATA' : 0x01, # Read Data 0000 0001 (01h)
'CMD_RDATAC' : 0x03, # Read Data Continuously 0000 0011 (03h)
'CMD_SDATAC' : 0x0F, # Stop Read Data Continuously 0000 1111 (0Fh)
'CMD_RREG' : 0x10, # Read from REG rrr 0001 rrrr (1xh)
'CMD_WREG' : 0x50, # Write to REG rrr 0101 rrrr (5xh)
'CMD_SELFCAL' : 0xF0, # Offset and Gain Self-Calibration 1111 0000 (F0h)
'CMD_SELFOCAL' : 0xF1, # Offset Self-Calibration 1111 0001 (F1h)
'CMD_SELFGCAL' : 0xF2, # Gain Self-Calibration 1111 0010 (F2h)
'CMD_SYSOCAL' : 0xF3, # System Offset Calibration 1111 0011 (F3h)
'CMD_SYSGCAL' : 0xF4, # System Gain Calibration 1111 0100 (F4h)
'CMD_SYNC' : 0xFC, # Synchronize the A/D Conversion 1111 1100 (FCh)
'CMD_STANDBY' : 0xFD, # Begin Standby Mode 1111 1101 (FDh)
'CMD_RESET' : 0xFE, # Reset to Power-Up Values 1111 1110 (FEh)
}
class ADS1256:
def __init__(self):
self.rst_pin = config.RST_PIN
self.cs_pin = config.CS_PIN
self.drdy_pin = config.DRDY_PIN
# Hardware reset
def ADS1256_reset(self):
config.digital_write(self.rst_pin, GPIO.HIGH)
config.delay_ms(200)
config.digital_write(self.rst_pin, GPIO.LOW)
config.delay_ms(200)
config.digital_write(self.rst_pin, GPIO.HIGH)
def ADS1256_WriteCmd(self, reg):
config.digital_write(self.cs_pin, GPIO.LOW)#cs 0
config.spi_writebyte([reg])
config.digital_write(self.cs_pin, GPIO.HIGH)#cs 1
def ADS1256_WriteReg(self, reg, data):
config.digital_write(self.cs_pin, GPIO.LOW)#cs 0
config.spi_writebyte([CMD['CMD_WREG'] | reg, 0x00, data])
config.digital_write(self.cs_pin, GPIO.HIGH)#cs 1
def ADS1256_Read_data(self, reg):
config.digital_write(self.cs_pin, GPIO.LOW)#cs 0
config.spi_writebyte([CMD['CMD_RREG'] | reg, 0x00])
data = config.spi_readbytes(1)
config.digital_write(self.cs_pin, GPIO.HIGH)#cs 1
return data
def ADS1256_WaitDRDY(self):
for i in range(0,400000,1):
if(config.digital_read(self.drdy_pin) == 0):
break
if(i >= 400000):
print ("Time Out ...\r\n")
def ADS1256_ReadChipID(self):
self.ADS1256_WaitDRDY()
id = self.ADS1256_Read_data(REG_E['REG_STATUS'])
id = id[0] >> 4
# print 'ID',id
return id
#The configuration parameters of ADC, gain and data rate
def ADS1256_ConfigADC(self, gain, drate):
self.ADS1256_WaitDRDY()
buf = [0,0,0,0,0,0,0,0]
buf[0] = (0<<3) | (1<<2) | (1<<1)
buf[1] = 0x08
buf[2] = (0<<5) | (0<<3) | (gain<<0)
buf[3] = drate
config.digital_write(self.cs_pin, GPIO.LOW)#cs 0
config.spi_writebyte([CMD['CMD_WREG'] | 0, 0x03])
config.spi_writebyte(buf)
config.digital_write(self.cs_pin, GPIO.HIGH)#cs 1
config.delay_ms(1)
def ADS1256_SetChannal(self, Channal):
if Channal > 7:
return 0
self.ADS1256_WriteReg(REG_E['REG_MUX'], (Channal<<4) | (1<<3))
def ADS1256_SetDiffChannal(self, Channal):
if Channal == 0:
self.ADS1256_WriteReg(REG_E['REG_MUX'], (0 << 4) | 1) #DiffChannal AIN0-AIN1
elif Channal == 1:
self.ADS1256_WriteReg(REG_E['REG_MUX'], (2 << 4) | 3) #DiffChannal AIN2-AIN3
elif Channal == 2:
self.ADS1256_WriteReg(REG_E['REG_MUX'], (4 << 4) | 5) #DiffChannal AIN4-AIN5
elif Channal == 3:
self.ADS1256_WriteReg(REG_E['REG_MUX'], (6 << 4) | 7) #DiffChannal AIN6-AIN7
def ADS1256_SetMode(self, Mode):
ScanMode = Mode
def ADS1256_init(self):
if (config.module_init() != 0):
return -1
self.ADS1256_reset()
id = self.ADS1256_ReadChipID()
if id == 3 :
print("ID Read success ")
else:
print("ID Read failed ")
return -1
self.ADS1256_ConfigADC(ADS1256_GAIN_E['ADS1256_GAIN_1'], ADS1256_DRATE_E['ADS1256_30000SPS'])
return 0
def ADS1256_Read_ADC_Data(self):
self.ADS1256_WaitDRDY()
config.digital_write(self.cs_pin, GPIO.LOW)#cs 0
config.spi_writebyte([CMD['CMD_RDATA']])
# config.delay_ms(10)
buf = config.spi_readbytes(3)
config.digital_write(self.cs_pin, GPIO.HIGH)#cs 1
read = (buf[0]<<16) & 0xff0000
read |= (buf[1]<<8) & 0xff00
read |= (buf[2]) & 0xff
if (read & 0x800000):
read &= 0xF000000
return read
def ADS1256_GetChannalValue(self, Channel):
if(ScanMode == 0):# 0 Single-ended input 8 channel1 Differential input 4 channe
if(Channel>=8):
return 0
self.ADS1256_SetChannal(Channel)
self.ADS1256_WriteCmd(CMD['CMD_SYNC'])
# config.delay_ms(10)
self.ADS1256_WriteCmd(CMD['CMD_WAKEUP'])
# config.delay_ms(200)
Value = self.ADS1256_Read_ADC_Data()
else:
if(Channel>=4):
return 0
self.ADS1256_SetDiffChannal(Channel)
self.ADS1256_WriteCmd(CMD['CMD_SYNC'])
# config.delay_ms(10)
self.ADS1256_WriteCmd(CMD['CMD_WAKEUP'])
# config.delay_ms(10)
Value = self.ADS1256_Read_ADC_Data()
return Value
def ADS1256_GetAll(self):
ADC_Value = [0,0,0,0,0,0,0,0]
for i in range(0,8,1):
ADC_Value[i] = self.ADS1256_GetChannalValue(i)
return ADC_Value
### END OF FILE ###
Binary file not shown.
+85
View File
@@ -0,0 +1,85 @@
#!/usr/bin/python
# -*- coding:utf-8 -*-
# ***Flythis***
# by M Loca
import time
import datetime
import ADS1256
import RPi.GPIO as GPIO
import redis
#configurazione per lavorare su server redis locale
REDIS_PORT = 6379
REDIS_HOST = '127.0.0.1'
redSrv0 = redis.Redis(
host=REDIS_HOST,
port=REDIS_PORT,
db=0)
#intervallo in millisecondi fra un campionamento e il successivo
sampleTime=500
try:
CH = ADS1256.ADS1256()
CH.ADS1256_init()
#funzione stampa otto valori letti su terminale
def videoPrint(CHvalue):
for CHcount in range(0,8,+1):
print("CH "+str(CHcount)+"= %lf"%(CHvalue[CHcount]*5.0/0x7fffff))
#funzione salva time+data e otto valori letti su file
def fileSave(CHvalue):
try:
logFile = open("PyLog.txt", "a")
except FileNotFoundError:
print("Creating new PyLog.txt")
logFile = open("PyLog.txt", "w+")
logFile.write("\nTime: "+str(now))
for CHcount in range(0,8,+1):
logFile.write(" | CH "+str(CHcount)+" = %lf"%(CHvalue[CHcount]*5.0/0x7fffff))
#funzione salva time+data e otto valori letti su redis
def redisSave(CHvalue):
redTime = 'RTDATA:CH:TIME'
redSrv0.set(redTime,str(now))
for CHcount in range(0,8,+1):
redArea = 'RTDATA:CH:'+str(CHcount)
strVal = "%lf" % (CHvalue[CHcount]*5.0/0x7fffff)
redSrv0.set(redArea,strVal)
#ciclo principale, chiama le tre funzioni definite sopra
while(1):
now = datetime.datetime.now()
CHvalue = CH.ADS1256_GetAll()
#videoPrint(CHvalue)
#fileSave(CHvalue)
redisSave(CHvalue)
time.sleep(sampleTime/1000)
#eccezione da ctrl+c in terminale e chiusura
except KeyboardInterrupt:
GPIO.cleanup()
print ("\r\nProgram End. Ctrl+C from user")
try:
logFile = open("PyLog.txt", "a")
except FileNotFoundError:
print("Creating new PyLog.txt")
logFile = open("PyLog.txt", "w+")
logFile.write("\r\nProgram end. Ctrl+C from user at time: "+str(now))
logFile.close()
exit()
#eccezione da errore e chiusura
except Exception as errorMessage:
GPIO.cleanup()
print("\r\nCaught error " + str(errorMessage))
try:
logFile = open("PyLog.txt", "a")
except FileNotFoundError:
print("Creating new PyLog.txt")
logFile = open("PyLog.txt", "w+")
logFile.write("\r\nCaught error: "+str(errorMessage)+" at time: "+str(now))
logFile.close()
exit()
+13
View File
@@ -0,0 +1,13 @@
Program end by Ctrl+C from user at time: 2021-03-02 10:58:32.924038
Program end by Ctrl+C from user at time: 2021-03-02 15:31:02.592220
Program end. Ctrl+C from user at time: 2021-03-03 09:16:55.728488
Program end. Ctrl+C from user at time: 2021-03-03 10:33:35.124096
Program end. Ctrl+C from user at time: 2021-03-03 10:51:21.859527
Program end. Ctrl+C from user at time: 2021-03-03 10:52:51.564834
Program end. Ctrl+C from user at time: 2021-03-05 10:55:41.203884
Program end. Ctrl+C from user at time: 2021-03-05 14:58:00.328326
Program end. Ctrl+C from user at time: 2021-03-09 11:54:37.081347
Program end. Ctrl+C from user at time: 2021-03-09 12:28:40.268269
Program end. Ctrl+C from user at time: 2021-03-09 12:54:10.962510
Program end. Ctrl+C from user at time: 2021-03-09 15:08:18.134550
Binary file not shown.
Binary file not shown.
+70
View File
@@ -0,0 +1,70 @@
# /*****************************************************************************
# * | File : EPD_1in54.py
# * | Author : Waveshare team
# * | Function : Hardware underlying interface
# * | Info :
# *----------------
# * | This version: V1.0
# * | Date : 2019-01-24
# * | Info :
# ******************************************************************************/
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation 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
# furished 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 OR 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.
#
import spidev
import RPi.GPIO as GPIO
import time
# Pin definition
RST_PIN = 18
CS_PIN = 22
DRDY_PIN = 17
# SPI device, bus = 0, device = 0
SPI = spidev.SpiDev(0, 0)
def digital_write(pin, value):
GPIO.output(pin, value)
def digital_read(pin):
return GPIO.input(DRDY_PIN)
def delay_ms(delaytime):
time.sleep(delaytime // 1000.0)
def spi_writebyte(data):
SPI.writebytes(data)
def spi_readbytes(reg):
return SPI.readbytes(reg)
def module_init():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(RST_PIN, GPIO.OUT)
GPIO.setup(CS_PIN, GPIO.OUT)
#GPIO.setup(DRDY_PIN, GPIO.IN)
GPIO.setup(DRDY_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
SPI.max_speed_hz = 20000
SPI.mode = 0b01
return 0;
### END OF FILE ###
BIN
View File
Binary file not shown.
+76
View File
@@ -0,0 +1,76 @@
/******************************************************************************
* File Name : readme.txt
* Description : Readme file
* Date : July-28-2017
******************************************************************************
*
* Copyright (c) 2017 Waveshare
* All rights reserved.
*
* THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
== Development Environment ==
* OS: Raspbian for Raspberry Pi
* Libraries required:
SPI library of Python
== Raspberry Pi GPIO Pin map ==
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT5 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT5 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | ALT0 | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | ALT0 | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | OUT | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | OUT | 1 | 35 || 36 | 1 | OUT | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
== Hardware connection ==
ADC => Raspberry Pi
* 5V -> 5V
* 3.3V -> 3.3V
* DIN -> MOSI
* SCLK -> SCLK
* GND -> GND
* RST -> 12 (Physical, BCM: GPIO. 1, 18)
* CS -> 15 (Physical, BCM: GPIO. 3, 22)
* DRDY -> 11 (Physical, BCM: GPIO. 0, 17)
== How to use ==
1, install the Python libraries.
2, change the current directory to where the demo files located.
3, run the demo with:
sudo python3 main.py
*/
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/python
from flask import Flask, render_template, jsonify
#from flask_bootstrap import Bootstrap
import datetime
import redis
import socket
#create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#connect to the server on local computer
s.connect(("8.8.8.8", 80))
#volendo stampo a video IPv4
#print("Indirizzo Ipv4 assegnato: ",s.getsockname()[0])
#assegno a variabile indirizzo ip per usi futuri
ipv4 = s.getsockname()[0]
s.close()
#configurazione per lavorare su server redis locale
REDIS_PORT = 6379
REDIS_HOST = '127.0.0.1'
redSrv0 = redis.Redis(
host=REDIS_HOST,
port=REDIS_PORT,
db=0)
flaskApp = Flask(__name__)
@flaskApp.route("/")
#funzione main: passa al template html i dati che dovranno popolarlo. legge direttamente da redis
def main():
channelsData = {
'title' : 'Flythis',
'timeNow' : datetime.datetime.now(),
'timeLog' : redSrv0.get('RTDATA:CH:TIME').decode('utf-8'),
'Ch0' : redSrv0.get('RTDATA:CH:0').decode('utf-8'),
'Ch1' : redSrv0.get('RTDATA:CH:1').decode('utf-8'),
'Ch2' : redSrv0.get('RTDATA:CH:2').decode('utf-8'),
'Ch3' : redSrv0.get('RTDATA:CH:3').decode('utf-8'),
'Ch4' : redSrv0.get('RTDATA:CH:4').decode('utf-8'),
'Ch5' : redSrv0.get('RTDATA:CH:5').decode('utf-8'),
'Ch6' : redSrv0.get('RTDATA:CH:6').decode('utf-8'),
'Ch7' : redSrv0.get('RTDATA:CH:7').decode('utf-8')
}
#assegno il template html di riferimento
return render_template('FlythisTrap.html', **channelsData)
# definisco una NUOVA route a cui rispondere su chiamta in metodo GET
@flaskApp.route("/api/v1/channels/all", methods=['GET'])
def api_channels_all():
#funzione api_channels_all: legge direttamente da redis, ritorna jsonify
channelsData = {
'title' : 'Flythis',
'timeNow' : datetime.datetime.now(),
'timeLog' : redSrv0.get('RTDATA:CH:TIME').decode('utf-8'),
'Ch0' : redSrv0.get('RTDATA:CH:0').decode('utf-8'),
'Ch1' : redSrv0.get('RTDATA:CH:1').decode('utf-8'),
'Ch2' : redSrv0.get('RTDATA:CH:2').decode('utf-8'),
'Ch3' : redSrv0.get('RTDATA:CH:3').decode('utf-8'),
'Ch4' : redSrv0.get('RTDATA:CH:4').decode('utf-8'),
'Ch5' : redSrv0.get('RTDATA:CH:5').decode('utf-8'),
'Ch6' : redSrv0.get('RTDATA:CH:6').decode('utf-8'),
'Ch7' : redSrv0.get('RTDATA:CH:7').decode('utf-8')
}
# restituisce in formato json i dati letti da redis
return jsonify(channelsData)
#dichiaro host ipv4 (ottenuto sopra utilizzando il modulo socket)
if __name__ == "__main__":
flaskApp.run(host=ipv4, port=80, debug=True)
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2013-2020 Start Bootstrap LLC
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.
+2609
View File
File diff suppressed because it is too large Load Diff
+56
View File
@@ -0,0 +1,56 @@
{
"title": "SB Admin",
"name": "startbootstrap-sb-admin",
"version": "6.0.2",
"scripts": {
"build": "npm run clean && npm run build:pug && npm run build:scss && npm run build:scripts && npm run build:assets",
"build:assets": "node scripts/build-assets.js",
"build:pug": "node scripts/build-pug.js",
"build:scripts": "node scripts/build-scripts.js",
"build:scss": "node scripts/build-scss.js",
"clean": "node scripts/clean.js",
"start": "npm run build && node scripts/start.js",
"start:debug": "npm run build && node scripts/start-debug.js"
},
"description": "A free admin dashboard template based on Bootstrap 4, created by Start Bootstrap.",
"keywords": [
"css",
"sass",
"html",
"responsive",
"theme",
"template",
"admin",
"app",
"dashboard"
],
"homepage": "https://startbootstrap.com/template/sb-admin",
"bugs": {
"url": "https://github.com/StartBootstrap/startbootstrap-sb-admin/issues",
"email": "feedback@startbootstrap.com"
},
"license": "MIT",
"author": "Start Bootstrap",
"contributors": [
"David Miller (https://davidmiller.io/)"
],
"repository": {
"type": "git",
"url": "https://github.com/StartBootstrap/startbootstrap-sb-admin.git"
},
"dependencies": {
"bootstrap": "4.5.3"
},
"devDependencies": {
"autoprefixer": "10.0.1",
"browser-sync": "2.26.13",
"chokidar": "3.4.3",
"concurrently": "5.3.0",
"postcss": "8.1.4",
"prettier": "2.1.2",
"pug": "3.0.0",
"sass": "1.28.0",
"shelljs": "0.8.4",
"upath": "2.0.0"
}
}
+5
View File
@@ -0,0 +1,5 @@
'use strict';
const renderAssets = require('./render-assets');
renderAssets();
+19
View File
@@ -0,0 +1,19 @@
'use strict';
const upath = require('upath');
const sh = require('shelljs');
const renderPug = require('./render-pug');
const srcPath = upath.resolve(upath.dirname(__filename), '../src');
sh.find(srcPath).forEach(_processFile);
function _processFile(filePath) {
if (
filePath.match(/\.pug$/)
&& !filePath.match(/include/)
&& !filePath.match(/mixin/)
&& !filePath.match(/\/pug\/layouts\//)
) {
renderPug(filePath);
}
}
+5
View File
@@ -0,0 +1,5 @@
'use strict';
const renderScripts = require('./render-scripts');
renderScripts();
+5
View File
@@ -0,0 +1,5 @@
'use strict';
const renderSCSS = require('./render-scss');
renderSCSS();
+7
View File
@@ -0,0 +1,7 @@
const sh = require('shelljs');
const upath = require('upath');
const destPath = upath.resolve(upath.dirname(__filename), '../dist');
sh.rm('-rf', `${destPath}/*`)
+11
View File
@@ -0,0 +1,11 @@
'use strict';
const fs = require('fs');
const upath = require('upath');
const sh = require('shelljs');
module.exports = function renderAssets() {
const sourcePath = upath.resolve(upath.dirname(__filename), '../src/assets');
const destPath = upath.resolve(upath.dirname(__filename), '../dist/.');
sh.cp('-R', sourcePath, destPath)
};
+35
View File
@@ -0,0 +1,35 @@
'use strict';
const fs = require('fs');
const upath = require('upath');
const pug = require('pug');
const sh = require('shelljs');
const prettier = require('prettier');
module.exports = function renderPug(filePath) {
const destPath = filePath.replace(/src\/pug\/\pages/, 'dist').replace(/\.pug$/, '.html');
const srcPath = upath.resolve(upath.dirname(__filename), '../src');
console.log(`### INFO: Rendering ${filePath} to ${destPath}`);
const html = pug.renderFile(filePath, {
doctype: 'html',
filename: filePath,
basedir: srcPath
});
const destPathDirname = upath.dirname(destPath);
if (!sh.test('-e', destPathDirname)) {
sh.mkdir('-p', destPathDirname);
}
const prettified = prettier.format(html, {
printWidth: 1000,
tabWidth: 4,
singleQuote: true,
proseWrap: 'preserve',
endOfLine: 'lf',
parser: 'html',
htmlWhitespaceSensitivity: 'ignore'
});
fs.writeFileSync(destPath, prettified);
};
+26
View File
@@ -0,0 +1,26 @@
'use strict';
const fs = require('fs');
const packageJSON = require('../package.json');
const upath = require('upath');
const sh = require('shelljs');
module.exports = function renderScripts() {
const sourcePath = upath.resolve(upath.dirname(__filename), '../src/js');
const destPath = upath.resolve(upath.dirname(__filename), '../dist/.');
sh.cp('-R', sourcePath, destPath)
const sourcePathScriptsJS = upath.resolve(upath.dirname(__filename), '../src/js/scripts.js');
const destPathScriptsJS = upath.resolve(upath.dirname(__filename), '../dist/js/scripts.js');
const copyright = `/*!
* Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage})
* Copyright 2013-${new Date().getFullYear()} ${packageJSON.author}
* Licensed under ${packageJSON.license} (https://github.com/StartBootstrap/${packageJSON.name}/blob/master/LICENSE)
*/
`
const scriptsJS = fs.readFileSync(sourcePathScriptsJS);
fs.writeFileSync(destPathScriptsJS, copyright + scriptsJS);
};
+42
View File
@@ -0,0 +1,42 @@
'use strict';
const autoprefixer = require('autoprefixer')
const fs = require('fs');
const packageJSON = require('../package.json');
const upath = require('upath');
const postcss = require('postcss')
const sass = require('sass');
const sh = require('shelljs');
const stylesPath = '../src/scss/styles.scss';
const destPath = upath.resolve(upath.dirname(__filename), '../dist/css/styles.css');
module.exports = function renderSCSS() {
const results = sass.renderSync({
data: entryPoint,
includePaths: [
upath.resolve(upath.dirname(__filename), '../node_modules')
],
});
const destPathDirname = upath.dirname(destPath);
if (!sh.test('-e', destPathDirname)) {
sh.mkdir('-p', destPathDirname);
}
postcss([ autoprefixer ]).process(results.css, {from: 'styles.css', to: 'styles.css'}).then(result => {
result.warnings().forEach(warn => {
console.warn(warn.toString())
})
fs.writeFileSync(destPath, result.css.toString());
})
};
const entryPoint = `/*!
* Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage})
* Copyright 2013-${new Date().getFullYear()} ${packageJSON.author}
* Licensed under ${packageJSON.license} (https://github.com/StartBootstrap/${packageJSON.name}/blob/master/LICENSE)
*/
@import "${stylesPath}"
`
+86
View File
@@ -0,0 +1,86 @@
'use strict';
const _ = require('lodash');
const chokidar = require('chokidar');
const upath = require('upath');
const renderAssets = require('./render-assets');
const renderPug = require('./render-pug');
const renderScripts = require('./render-scripts');
const renderSCSS = require('./render-scss');
const watcher = chokidar.watch('src', {
persistent: true,
});
let READY = false;
process.title = 'pug-watch';
process.stdout.write('Loading');
let allPugFiles = {};
watcher.on('add', filePath => _processFile(upath.normalize(filePath), 'add'));
watcher.on('change', filePath => _processFile(upath.normalize(filePath), 'change'));
watcher.on('ready', () => {
READY = true;
console.log(' READY TO ROLL!');
});
_handleSCSS();
function _processFile(filePath, watchEvent) {
if (!READY) {
if (filePath.match(/\.pug$/)) {
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) {
allPugFiles[filePath] = true;
}
}
process.stdout.write('.');
return;
}
console.log(`### INFO: File event: ${watchEvent}: ${filePath}`);
if (filePath.match(/\.pug$/)) {
return _handlePug(filePath, watchEvent);
}
if (filePath.match(/\.scss$/)) {
if (watchEvent === 'change') {
return _handleSCSS(filePath, watchEvent);
}
return;
}
if (filePath.match(/src\/js\//)) {
return renderScripts();
}
if (filePath.match(/src\/assets\//)) {
return renderAssets();
}
}
function _handlePug(filePath, watchEvent) {
if (watchEvent === 'change') {
if (filePath.match(/includes/) || filePath.match(/mixins/) || filePath.match(/\/pug\/layouts\//)) {
return _renderAllPug();
}
return renderPug(filePath);
}
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) {
return renderPug(filePath);
}
}
function _renderAllPug() {
console.log('### INFO: Rendering All');
_.each(allPugFiles, (value, filePath) => {
renderPug(filePath);
});
}
function _handleSCSS() {
renderSCSS();
}
+24
View File
@@ -0,0 +1,24 @@
const concurrently = require('concurrently');
const upath = require('upath');
const browserSyncPath = upath.resolve(upath.dirname(__filename), '../node_modules/.bin/browser-sync');
concurrently([
{ command: 'node --inspect scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' },
{
command: `${browserSyncPath} dist -w --no-online`,
name: 'SB_BROWSER_SYNC',
prefixColor: 'bgBlue.bold',
}
], {
prefix: 'name',
killOthers: ['failure', 'success'],
}).then(success, failure);
function success() {
console.log('Success');
}
function failure() {
console.log('Failure');
}
+24
View File
@@ -0,0 +1,24 @@
const concurrently = require('concurrently');
const upath = require('upath');
const browserSyncPath = upath.resolve(upath.dirname(__filename), '../node_modules/.bin/browser-sync');
concurrently([
{ command: 'node scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' },
{
command: `"${browserSyncPath}" --reload-delay 2000 --reload-debounce 2000 dist -w --no-online`,
name: 'SB_BROWSER_SYNC',
prefixColor: 'bgGreen.bold',
}
], {
prefix: 'name',
killOthers: ['failure', 'success'],
}).then(success, failure);
function success() {
console.log('Success');
}
function failure() {
console.log('Failure');
}
+54
View File
@@ -0,0 +1,54 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Area Chart Example
var ctx = document.getElementById("myAreaChart");
var myLineChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["Mar 1", "Mar 2", "Mar 3", "Mar 4", "Mar 5", "Mar 6", "Mar 7", "Mar 8", "Mar 9", "Mar 10", "Mar 11", "Mar 12", "Mar 13"],
datasets: [{
label: "Sessions",
lineTension: 0.3,
backgroundColor: "rgba(2,117,216,0.2)",
borderColor: "rgba(2,117,216,1)",
pointRadius: 5,
pointBackgroundColor: "rgba(2,117,216,1)",
pointBorderColor: "rgba(255,255,255,0.8)",
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(2,117,216,1)",
pointHitRadius: 50,
pointBorderWidth: 2,
data: [10000, 30162, 26263, 18394, 18287, 28682, 31274, 33259, 25849, 24159, 32651, 31984, 38451],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'date'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 7
}
}],
yAxes: [{
ticks: {
min: 0,
max: 40000,
maxTicksLimit: 5
},
gridLines: {
color: "rgba(0, 0, 0, .125)",
}
}],
},
legend: {
display: false
}
}
});
+46
View File
@@ -0,0 +1,46 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Bar Chart Example
var ctx = document.getElementById("myBarChart");
var myLineChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["January", "February", "March", "April", "May", "June"],
datasets: [{
label: "Revenue",
backgroundColor: "rgba(2,117,216,1)",
borderColor: "rgba(2,117,216,1)",
data: [4215, 5312, 6251, 7841, 9821, 14984],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'month'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 6
}
}],
yAxes: [{
ticks: {
min: 0,
max: 15000,
maxTicksLimit: 5
},
gridLines: {
display: true
}
}],
},
legend: {
display: false
}
}
});
+16
View File
@@ -0,0 +1,16 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Pie Chart Example
var ctx = document.getElementById("myPieChart");
var myPieChart = new Chart(ctx, {
type: 'pie',
data: {
labels: ["Blue", "Red", "Yellow", "Green"],
datasets: [{
data: [12.21, 15.58, 11.25, 8.32],
backgroundColor: ['#007bff', '#dc3545', '#ffc107', '#28a745'],
}],
},
});
@@ -0,0 +1,4 @@
// Call the dataTables jQuery plugin
$(document).ready(function() {
$('#dataTable').DataTable();
});
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 KiB

+17
View File
@@ -0,0 +1,17 @@
(function($) {
"use strict";
// Add active state to sidbar nav links
var path = window.location.href; // because the 'href' property of the DOM element is the absolute path
$("#layoutSidenav_nav .sb-sidenav a.nav-link").each(function() {
if (this.href === path) {
$(this).addClass("active");
}
});
// Toggle the side navigation
$("#sidebarToggle").on("click", function(e) {
e.preventDefault();
$("body").toggleClass("sb-sidenav-toggled");
});
})(jQuery);
+29
View File
@@ -0,0 +1,29 @@
doctype html
block config
- var pageTitle = "Page Title"
html(lang='en')
head
include includes/head/meta.pug
include includes/head/title.pug
include includes/head/css.pug
include includes/head/icons.pug
body.bg-primary
#layoutAuthentication
#layoutAuthentication_content
main
block content
#layoutAuthentication_footer
include includes/footer.pug
include includes/scripts.pug
+33
View File
@@ -0,0 +1,33 @@
doctype html
block config
- var pageTitle = "Page Title"
html(lang='en')
head
include includes/head/meta.pug
include includes/head/title.pug
include includes/head/css.pug
include includes/head/icons.pug
body(class=bodyClass)
include includes/navigation/topnav.pug
#layoutSidenav
#layoutSidenav_nav
include includes/navigation/sidenav.pug
#layoutSidenav_content
main
block content
include includes/footer.pug
include includes/scripts.pug
+29
View File
@@ -0,0 +1,29 @@
doctype html
block config
- var pageTitle = "404 Error"
html(lang='en')
head
include includes/head/meta.pug
include includes/head/title.pug
include includes/head/css.pug
include includes/head/icons.pug
body
#layoutError
#layoutError_content
main
block content
#layoutError_footer
include includes/footer.pug
include includes/scripts.pug
@@ -0,0 +1,11 @@
footer.py-4.bg-light.mt-auto
.container-fluid
.d-flex.align-items-center.justify-content-between.small
.text-muted
| Copyright &copy; Your Website 2020
div
a(href='#') Privacy Policy
|
| &middot;
|
a(href='#') Terms &amp; Conditions
@@ -0,0 +1,2 @@
block css
link(href='css/styles.css', rel='stylesheet')
@@ -0,0 +1 @@
script(src='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js', crossorigin="anonymous")
@@ -0,0 +1,6 @@
block meta
meta(charset='utf-8')
meta(http-equiv='X-UA-Compatible', content='IE=edge')
meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no')
meta(name='description', content='')
meta(name='author', content='')
@@ -0,0 +1 @@
title #{pageTitle} - SB Admin
@@ -0,0 +1,72 @@
nav(class=['sb-sidenav', 'accordion'] class=sidenavStyle)#sidenavAccordion
.sb-sidenav-menu
.nav
.sb-sidenav-menu-heading
| Core
a.nav-link(href='index.html')
.sb-nav-link-icon
i.fas.fa-tachometer-alt
| Dashboard
.sb-sidenav-menu-heading
| Interface
a.nav-link.collapsed(href='#', data-toggle='collapse' data-target='#collapseLayouts' aria-expanded='false' aria-controls='collapseLayouts')
.sb-nav-link-icon
i.fas.fa-columns
| Layouts
.sb-sidenav-collapse-arrow
i.fas.fa-angle-down
#collapseLayouts.collapse(aria-labelledby='headingOne', data-parent='#sidenavAccordion')
nav.sb-sidenav-menu-nested.nav
a.nav-link(href='layout-static.html') Static Navigation
a.nav-link(href='layout-sidenav-light.html') Light Sidenav
a.nav-link.collapsed(href='#', data-toggle='collapse' data-target='#collapsePages' aria-expanded='false' aria-controls='collapsePages')
.sb-nav-link-icon
i.fas.fa-book-open
| Pages
.sb-sidenav-collapse-arrow
i.fas.fa-angle-down
#collapsePages.collapse(aria-labelledby='headingTwo', data-parent='#sidenavAccordion')
nav.sb-sidenav-menu-nested.nav.accordion#sidenavAccordionPages
a.nav-link.collapsed(href='#', data-toggle='collapse' data-target='#pagesCollapseAuth' aria-expanded='false' aria-controls='pagesCollapseAuth')
| Authentication
.sb-sidenav-collapse-arrow
i.fas.fa-angle-down
#pagesCollapseAuth.collapse(aria-labelledby='headingOne', data-parent='#sidenavAccordionPages')
nav.sb-sidenav-menu-nested.nav
a.nav-link(href='login.html') Login
a.nav-link(href='register.html') Register
a.nav-link(href='password.html') Forgot Password
a.nav-link.collapsed(href='#', data-toggle='collapse' data-target='#pagesCollapseError' aria-expanded='false' aria-controls='pagesCollapseError')
| Error
.sb-sidenav-collapse-arrow
i.fas.fa-angle-down
#pagesCollapseError.collapse(aria-labelledby='headingOne', data-parent='#sidenavAccordionPages')
nav.sb-sidenav-menu-nested.nav
a.nav-link(href='401.html') 401 Page
a.nav-link(href='404.html') 404 Page
a.nav-link(href='500.html') 500 Page
.sb-sidenav-menu-heading
| Addons
a.nav-link(href='charts.html')
.sb-nav-link-icon
i.fas.fa-chart-area
| Charts
a.nav-link(href='tables.html')
.sb-nav-link-icon
i.fas.fa-table
| Tables
.sb-sidenav-footer
.small Logged in as:
| Start Bootstrap
@@ -0,0 +1,22 @@
nav.sb-topnav.navbar.navbar-expand.navbar-dark.bg-dark
a.navbar-brand(href='index.html')
| Start Bootstrap
button#sidebarToggle.btn.btn-link.btn-sm.order-1.order-lg-0(href='#')
i.fas.fa-bars
// Navbar Search
form.d-none.d-md-inline-block.form-inline.ml-auto.mr-0.mr-md-3.my-2.my-md-0
.input-group
input.form-control(type='text', placeholder='Search for...', aria-label='Search', aria-describedby='basic-addon2')
.input-group-append
button.btn.btn-primary(type='button')
i.fas.fa-search
// Navbar
ul.navbar-nav.ml-auto.ml-md-0
li.nav-item.dropdown
a#userDropdown.nav-link.dropdown-toggle(href='#', role='button', data-toggle='dropdown', aria-haspopup='true', aria-expanded='false')
i.fas.fa-user.fa-fw
.dropdown-menu.dropdown-menu-right(aria-labelledby='userDropdown')
a.dropdown-item(href='#') Settings
a.dropdown-item(href='#') Activity Log
.dropdown-divider
a.dropdown-item(href='login.html') Logout
@@ -0,0 +1,7 @@
block scripts
//- Load jQuery
script(src='https://code.jquery.com/jquery-3.5.1.slim.min.js', crossorigin='anonymous')
//- Load Bootstrap JS Bundle
script(src='https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js', crossorigin='anonymous')
//- Load Global Template Scripts
script(src='js/scripts.js')
+13
View File
@@ -0,0 +1,13 @@
extends ../layouts/error.pug
block content
.container
.row.justify-content-center
.col-lg-6
.text-center.mt-4
h1.display-1 401
p.lead Unauthorized
p Access to this resource is denied.
a(href='index.html')
i.fas.fa-arrow-left.mr-1
| Return to Dashboard
+12
View File
@@ -0,0 +1,12 @@
extends ../layouts/error.pug
block content
.container
.row.justify-content-center
.col-lg-6
.text-center.mt-4
img.mb-4.img-error(src='assets/img/error-404-monochrome.svg')
p.lead This requested URL was not found on this server.
a(href='index.html')
i.fas.fa-arrow-left.mr-1
| Return to Dashboard
+12
View File
@@ -0,0 +1,12 @@
extends ../layouts/error.pug
block content
.container
.row.justify-content-center
.col-lg-6
.text-center.mt-4
h1.display-1 500
p.lead Internal Server Error
a(href='index.html')
i.fas.fa-arrow-left.mr-1
| Return to Dashboard
+43
View File
@@ -0,0 +1,43 @@
extends ../layouts/dashboard.pug
block config
- var bodyClass = 'sb-nav-fixed'
- var pageTitle = 'Charts'
- var sidenavStyle = 'sb-sidenav-dark'
block content
.container-fluid
include includes/page-header.pug
.card.mb-4
.card-body.
Chart.js is a third party plugin that is used to generate the charts in this template. The charts below have been customized - for further customization options, please visit the official <a target='_blank' href='https://www.chartjs.org/docs/latest/'>Chart.js documentation</a>.
.card.mb-4
.card-header
i.fas.fa-chart-area.mr-1
| Area Chart Example
.card-body
canvas#myAreaChart(width='100%', height='30')
.card-footer.small.text-muted Updated yesterday at 11:59 PM
.row
.col-lg-6
.card.mb-4
.card-header
i.fas.fa-chart-bar.mr-1
| Bar Chart Example
.card-body
canvas#myBarChart(width='100%', height='50')
.card-footer.small.text-muted Updated yesterday at 11:59 PM
.col-lg-6
.card.mb-4
.card-header
i.fas.fa-chart-pie.mr-1
| Pie Chart Example
.card-body
canvas#myPieChart(width='100%', height='50')
.card-footer.small.text-muted Updated yesterday at 11:59 PM
append scripts
script(src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js', crossorigin='anonymous')
script(src='assets/demo/chart-area-demo.js')
script(src='assets/demo/chart-bar-demo.js')
script(src='assets/demo/chart-pie-demo.js')
+418
View File
@@ -0,0 +1,418 @@
.table-responsive
table#dataTable.table.table-bordered(width='100%', cellspacing='0')
thead
tr
th Name
th Position
th Office
th Age
th Start date
th Salary
tfoot
tr
th Name
th Position
th Office
th Age
th Start date
th Salary
tbody
tr
td Tiger Nixon
td System Architect
td Edinburgh
td 61
td 2011/04/25
td $320,800
tr
td Garrett Winters
td Accountant
td Tokyo
td 63
td 2011/07/25
td $170,750
tr
td Ashton Cox
td Junior Technical Author
td San Francisco
td 66
td 2009/01/12
td $86,000
tr
td Cedric Kelly
td Senior Javascript Developer
td Edinburgh
td 22
td 2012/03/29
td $433,060
tr
td Airi Satou
td Accountant
td Tokyo
td 33
td 2008/11/28
td $162,700
tr
td Brielle Williamson
td Integration Specialist
td New York
td 61
td 2012/12/02
td $372,000
tr
td Herrod Chandler
td Sales Assistant
td San Francisco
td 59
td 2012/08/06
td $137,500
tr
td Rhona Davidson
td Integration Specialist
td Tokyo
td 55
td 2010/10/14
td $327,900
tr
td Colleen Hurst
td Javascript Developer
td San Francisco
td 39
td 2009/09/15
td $205,500
tr
td Sonya Frost
td Software Engineer
td Edinburgh
td 23
td 2008/12/13
td $103,600
tr
td Jena Gaines
td Office Manager
td London
td 30
td 2008/12/19
td $90,560
tr
td Quinn Flynn
td Support Lead
td Edinburgh
td 22
td 2013/03/03
td $342,000
tr
td Charde Marshall
td Regional Director
td San Francisco
td 36
td 2008/10/16
td $470,600
tr
td Haley Kennedy
td Senior Marketing Designer
td London
td 43
td 2012/12/18
td $313,500
tr
td Tatyana Fitzpatrick
td Regional Director
td London
td 19
td 2010/03/17
td $385,750
tr
td Michael Silva
td Marketing Designer
td London
td 66
td 2012/11/27
td $198,500
tr
td Paul Byrd
td Chief Financial Officer (CFO)
td New York
td 64
td 2010/06/09
td $725,000
tr
td Gloria Little
td Systems Administrator
td New York
td 59
td 2009/04/10
td $237,500
tr
td Bradley Greer
td Software Engineer
td London
td 41
td 2012/10/13
td $132,000
tr
td Dai Rios
td Personnel Lead
td Edinburgh
td 35
td 2012/09/26
td $217,500
tr
td Jenette Caldwell
td Development Lead
td New York
td 30
td 2011/09/03
td $345,000
tr
td Yuri Berry
td Chief Marketing Officer (CMO)
td New York
td 40
td 2009/06/25
td $675,000
tr
td Caesar Vance
td Pre-Sales Support
td New York
td 21
td 2011/12/12
td $106,450
tr
td Doris Wilder
td Sales Assistant
td Sidney
td 23
td 2010/09/20
td $85,600
tr
td Angelica Ramos
td Chief Executive Officer (CEO)
td London
td 47
td 2009/10/09
td $1,200,000
tr
td Gavin Joyce
td Developer
td Edinburgh
td 42
td 2010/12/22
td $92,575
tr
td Jennifer Chang
td Regional Director
td Singapore
td 28
td 2010/11/14
td $357,650
tr
td Brenden Wagner
td Software Engineer
td San Francisco
td 28
td 2011/06/07
td $206,850
tr
td Fiona Green
td Chief Operating Officer (COO)
td San Francisco
td 48
td 2010/03/11
td $850,000
tr
td Shou Itou
td Regional Marketing
td Tokyo
td 20
td 2011/08/14
td $163,000
tr
td Michelle House
td Integration Specialist
td Sidney
td 37
td 2011/06/02
td $95,400
tr
td Suki Burks
td Developer
td London
td 53
td 2009/10/22
td $114,500
tr
td Prescott Bartlett
td Technical Author
td London
td 27
td 2011/05/07
td $145,000
tr
td Gavin Cortez
td Team Leader
td San Francisco
td 22
td 2008/10/26
td $235,500
tr
td Martena Mccray
td Post-Sales support
td Edinburgh
td 46
td 2011/03/09
td $324,050
tr
td Unity Butler
td Marketing Designer
td San Francisco
td 47
td 2009/12/09
td $85,675
tr
td Howard Hatfield
td Office Manager
td San Francisco
td 51
td 2008/12/16
td $164,500
tr
td Hope Fuentes
td Secretary
td San Francisco
td 41
td 2010/02/12
td $109,850
tr
td Vivian Harrell
td Financial Controller
td San Francisco
td 62
td 2009/02/14
td $452,500
tr
td Timothy Mooney
td Office Manager
td London
td 37
td 2008/12/11
td $136,200
tr
td Jackson Bradshaw
td Director
td New York
td 65
td 2008/09/26
td $645,750
tr
td Olivia Liang
td Support Engineer
td Singapore
td 64
td 2011/02/03
td $234,500
tr
td Bruno Nash
td Software Engineer
td London
td 38
td 2011/05/03
td $163,500
tr
td Sakura Yamamoto
td Support Engineer
td Tokyo
td 37
td 2009/08/19
td $139,575
tr
td Thor Walton
td Developer
td New York
td 61
td 2013/08/11
td $98,540
tr
td Finn Camacho
td Support Engineer
td San Francisco
td 47
td 2009/07/07
td $87,500
tr
td Serge Baldwin
td Data Coordinator
td Singapore
td 64
td 2012/04/09
td $138,575
tr
td Zenaida Frank
td Software Engineer
td New York
td 63
td 2010/01/04
td $125,250
tr
td Zorita Serrano
td Software Engineer
td San Francisco
td 56
td 2012/06/01
td $115,000
tr
td Jennifer Acosta
td Junior Javascript Developer
td Edinburgh
td 43
td 2013/02/01
td $75,650
tr
td Cara Stevens
td Sales Assistant
td New York
td 46
td 2011/12/06
td $145,600
tr
td Hermione Butler
td Regional Director
td London
td 47
td 2011/03/21
td $356,250
tr
td Lael Greer
td Systems Administrator
td London
td 21
td 2009/02/27
td $103,500
tr
td Jonas Alexander
td Developer
td San Francisco
td 30
td 2010/07/14
td $86,500
tr
td Shad Decker
td Regional Director
td Edinburgh
td 51
td 2008/11/13
td $183,000
tr
td Michael Bruce
td Javascript Developer
td Singapore
td 29
td 2011/06/27
td $183,000
tr
td Donna Snider
td Customer Support
td New York
td 27
td 2011/01/25
td $112,000
@@ -0,0 +1,9 @@
h1.mt-4 #{pageTitle}
if index
ol.breadcrumb.mb-4
li.breadcrumb-item.active #{pageTitle}
else
ol.breadcrumb.mb-4
li.breadcrumb-item
a(href='index.html') Dashboard
li.breadcrumb-item.active #{pageTitle}
+85
View File
@@ -0,0 +1,85 @@
extends ../layouts/dashboard.pug
block config
- var bodyClass = 'sb-nav-fixed'
- var pageTitle = 'Dashboard';
- var index = true;
- var sidenavStyle = 'sb-sidenav-dark'
append css
link(href='https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css', rel='stylesheet', crossorigin='anonymous')
block content
.container-fluid
include includes/page-header.pug
.row
.col-xl-3.col-md-6
.card.bg-primary.text-white.mb-4
.card-body
| Primary Card
.card-footer.d-flex.align-items-center.justify-content-between
a(href='#').small.text-white.stretched-link
| View Details
.small.text-white
i.fas.fa-angle-right
.col-xl-3.col-md-6
.card.bg-warning.text-white.mb-4
.card-body
| Warning Card
.card-footer.d-flex.align-items-center.justify-content-between
a(href='#').small.text-white.stretched-link
| View Details
.small.text-white
i.fas.fa-angle-right
.col-xl-3.col-md-6
.card.bg-success.text-white.mb-4
.card-body
| Success Card
.card-footer.d-flex.align-items-center.justify-content-between
a(href='#').small.text-white.stretched-link
| View Details
.small.text-white
i.fas.fa-angle-right
.col-xl-3.col-md-6
.card.bg-danger.text-white.mb-4
.card-body
| Danger Card
.card-footer.d-flex.align-items-center.justify-content-between
a(href='#').small.text-white.stretched-link
| View Details
.small.text-white
i.fas.fa-angle-right
.row
.col-xl-6
.card.mb-4
.card-header
i.fas.fa-chart-area.mr-1
| Area Chart Example
.card-body
canvas#myAreaChart(width='100%', height='40')
.col-xl-6
.card.mb-4
.card-header
i.fas.fa-chart-bar.mr-1
| Bar Chart Example
.card-body
canvas#myBarChart(width='100%', height='40')
.card.mb-4
.card-header
i.fas.fa-table.mr-1
| DataTable Example
.card-body
include includes/datatable.pug
append scripts
script(src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js', crossorigin='anonymous')
script(src='assets/demo/chart-area-demo.js')
script(src='assets/demo/chart-bar-demo.js')
script(src='https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js', crossorigin='anonymous')
script(src='https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js', crossorigin='anonymous')
script(src='assets/demo/datatables-demo.js')
@@ -0,0 +1,14 @@
extends ../layouts/dashboard.pug
block config
- var bodyClass = 'sb-nav-fixed'
- var pageTitle = 'Sidenav Light'
- var sidenavStyle = 'sb-sidenav-light'
block content
.container-fluid
include includes/page-header.pug
.card.mb-4
.card-body.
This page is an example of using the light side navigation option. By appending the <code>.sb-sidenav-light</code> class to the <code>.sb-sidenav</code> class, the side navigation will take on a light color scheme. The <code>.sb-sidenav-dark</code> is also available for a darker option.
+20
View File
@@ -0,0 +1,20 @@
extends ../layouts/dashboard.pug
block config
- var pageTitle = 'Static Navigation'
- var sidenavStyle = 'sb-sidenav-dark'
block content
.container-fluid
include includes/page-header.pug
.card.mb-4
.card-body
p.mb-0.
This page is an example of using static navigation. By removing the <code>.sb-nav-fixed</code> class from the <code>body</code>, the top navigation and side navigation will become static on scroll. Scroll down this page to see an example.
div(style='height: 100vh;')
.card.mb-4
.card-body
| When scrolling, the navigation stays at the top of the page. This is the end of the static navigation demo.
+27
View File
@@ -0,0 +1,27 @@
extends ../layouts/authentication.pug
block content
.container
.row.justify-content-center
.col-lg-5
.card.shadow-lg.border-0.rounded-lg.mt-5
.card-header
h3.text-center.font-weight-light.my-4 Login
.card-body
form
.form-group
label.small.mb-1(for='inputEmailAddress') Email
input#inputEmailAddress.form-control.py-4(type='email', placeholder='Enter email address')
.form-group
label.small.mb-1(for='inputPassword') Password
input#inputPassword.form-control.py-4(type='password', placeholder='Enter password')
.form-group
.custom-control.custom-checkbox
input#rememberPasswordCheck.custom-control-input(type='checkbox')
label.custom-control-label(for='rememberPasswordCheck') Remember password
.form-group.d-flex.align-items-center.justify-content-between.mt-4.mb-0
a.small(href='password.html') Forgot Password?
a.btn.btn-primary(href='index.html') Login
.card-footer.text-center
.small
a(href='register.html') Need an account? Sign up!
+21
View File
@@ -0,0 +1,21 @@
extends ../layouts/authentication.pug
block content
.container
.row.justify-content-center
.col-lg-5
.card.shadow-lg.border-0.rounded-lg.mt-5
.card-header
h3.text-center.font-weight-light.my-4 Password Recovery
.card-body
.small.mb-3.text-muted Enter your email address and we will send you a link to reset your password.
form
.form-group
label.small.mb-1(for='inputEmailAddress') Email
input#inputEmailAddress.form-control.py-4(type='email', aria-describedby='emailHelp', placeholder='Enter email address')
.form-group.d-flex.align-items-center.justify-content-between.mt-4.mb-0
a.small(href='login.html') Return to login
a.btn.btn-primary(href='login.html') Reset Password
.card-footer.text-center
.small
a(href='register.html') Need an account? Sign up!
+37
View File
@@ -0,0 +1,37 @@
extends ../layouts/authentication.pug
block content
.container
.row.justify-content-center
.col-lg-7
.card.shadow-lg.border-0.rounded-lg.mt-5
.card-header
h3.text-center.font-weight-light.my-4 Create Account
.card-body
form
.form-row
.col-md-6
.form-group
label.small.mb-1(for='inputFirstName') First Name
input#inputFirstName.form-control.py-4(type='text', placeholder='Enter first name')
.col-md-6
.form-group
label.small.mb-1(for='inputLastName') Last Name
input#inputLastName.form-control.py-4(type='text', placeholder='Enter last name')
.form-group
label.small.mb-1(for='inputEmailAddress') Email
input#inputEmailAddress.form-control.py-4(type='email', aria-describedby='emailHelp', placeholder='Enter email address')
.form-row
.col-md-6
.form-group
label.small.mb-1(for='inputPassword') Password
input#inputPassword.form-control.py-4(type='password', placeholder='Enter password')
.col-md-6
.form-group
label.small.mb-1(for='inputConfirmPassword') Confirm Password
input#inputConfirmPassword.form-control.py-4(type='password', placeholder='Confirm password')
.form-group.mt-4.mb-0
a.btn.btn-primary.btn-block(href='login.html') Create Account
.card-footer.text-center
.small
a(href='login.html') Have an account? Go to login
+28
View File
@@ -0,0 +1,28 @@
extends ../layouts/dashboard.pug
block config
- var bodyClass = 'sb-nav-fixed'
- var pageTitle = 'Tables'
- var sidenavStyle = 'sb-sidenav-dark'
append css
link(href='https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css', rel='stylesheet', crossorigin='anonymous')
block content
.container-fluid
include includes/page-header.pug
.card.mb-4
.card-body.
DataTables is a third party plugin that is used to generate the demo table below. For more information about DataTables, please visit the <a target='_blank' href='https://datatables.net/'>official DataTables documentation</a>.
.card.mb-4
.card-header
i.fas.fa-table.mr-1
| DataTable Example
.card-body
include includes/datatable.pug
append scripts
script(src='https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js', crossorigin='anonymous')
script(src='https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js', crossorigin='anonymous')
script(src='assets/demo/datatables-demo.js')
+14
View File
@@ -0,0 +1,14 @@
// Global styling for this template
html,
body {
height: 100%;
}
// Set spacing on containers for page symmetry
.container,
.container-fluid {
padding-left: $grid-gutter-width;
padding-right: $grid-gutter-width;
}
+9
View File
@@ -0,0 +1,9 @@
// Import Bootstrap variables for use within theme
@import "bootstrap/scss/functions.scss";
@import "bootstrap/scss/variables.scss";
// Import spacing variables
@import "./variables/spacing.scss";
// Import navigation variables
@import "./variables/navigation.scss";
@@ -0,0 +1,12 @@
#layoutAuthentication {
display: flex;
flex-direction: column;
min-height: 100vh;
#layoutAuthentication_content {
min-width: 0;
flex-grow: 1;
}
#layoutAuthentication_footer {
min-width: 0;
}
}
@@ -0,0 +1,78 @@
// Default behavior for the sidenav layout
// The default positioning for the sidenav is a static position
#layoutSidenav {
display: flex;
// Wraps the .sb-sidenav element and sets the size
#layoutSidenav_nav {
flex-basis: $sidenav-base-width;
flex-shrink: 0;
transition: transform 0.15s ease-in-out;
z-index: $zindex-sidenav;
// Mobile first transform - by default the sidenav will be moved off-canvas
transform: translateX(-$sidenav-base-width);
}
// Wraps the content when using the sidenav layout
#layoutSidenav_content {
position: relative;
display: flex;
flex-direction: column;
justify-content: space-between;
min-width: 0;
flex-grow: 1;
min-height: calc(100vh - #{$topnav-base-height});
margin-left: -$sidenav-base-width;
}
}
// Default behavior for the static sidenav collapse
.sb-sidenav-toggled {
#layoutSidenav {
#layoutSidenav_nav {
transform: translateX(0);
}
#layoutSidenav_content {
&:before {
content: "";
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: $black;
z-index: $zindex-content;
opacity: 0.5;
transition: opacity 0.3s ease-in-out;
}
}
}
}
// Responsive styling for the sidenav layout
@include media-breakpoint-up(lg) {
#layoutSidenav {
#layoutSidenav_nav {
transform: translateX(0);
}
#layoutSidenav_content {
margin-left: 0;
transition: margin 0.15s ease-in-out;
}
}
// Behavior for the sidenav collapse on screens larger than the med breakpoint
.sb-sidenav-toggled {
#layoutSidenav {
#layoutSidenav_nav {
transform: translateX(-$sidenav-base-width);
}
#layoutSidenav_content {
margin-left: -$sidenav-base-width;
// Removes the sidenav overlay on screens larger than the med breakpoint
&:before {
display: none;
}
}
}
}
}
@@ -0,0 +1,24 @@
.sb-nav-fixed {
.sb-topnav {
@extend .fixed-top;
z-index: $zindex-topnav;
}
#layoutSidenav {
#layoutSidenav_nav {
@extend .fixed-top;
width: $sidenav-base-width;
height: 100vh;
z-index: $zindex-sidenav;
.sb-sidenav {
padding-top: $topnav-base-height;
.sb-sidenav-menu {
overflow-y: auto;
}
}
}
#layoutSidenav_content {
padding-left: $sidenav-base-width;
top: $topnav-base-height;
}
}
}
+16
View File
@@ -0,0 +1,16 @@
#layoutError {
display: flex;
flex-direction: column;
min-height: 100vh;
#layoutError_content {
min-width: 0;
flex-grow: 1;
}
#layoutError_footer {
min-width: 0;
}
}
.img-error {
max-width: 20rem;
}
+7
View File
@@ -0,0 +1,7 @@
// Add styling for icons used within nav links
.nav,
.sb-sidenav-menu {
.nav-link .sb-nav-link-icon {
margin-right: 0.5rem;
}
}
+23
View File
@@ -0,0 +1,23 @@
// Base styling for the topnav
.sb-topnav {
padding-left: 0;
height: $topnav-base-height;
z-index: $zindex-topnav;
.navbar-brand {
width: $sidenav-base-width;
padding-left: $navbar-padding-x;
padding-right: $navbar-padding-x;
margin: 0;
}
&.navbar-dark {
#sidebarToggle {
color: $topnav-dark-toggler-color;
}
}
&.navbar-light {
#sidebarToggle {
color: $topnav-light-toggler-color;
}
}
}
@@ -0,0 +1,33 @@
// Dark theme for sidenav
// Append .sb-sidenav-dark to .sb-sidenav to use
.sb-sidenav-dark {
background-color: $sidenav-dark-bg;
color: $sidenav-dark-color;
.sb-sidenav-menu {
.sb-sidenav-menu-heading {
color: $sidenav-dark-heading-color;
}
.nav-link {
color: $sidenav-dark-link-color;
.sb-nav-link-icon {
color: $sidenav-dark-icon-color;
}
.sb-sidenav-collapse-arrow {
color: $sidenav-dark-icon-color;
}
&:hover {
color: $sidenav-dark-link-active-color;
}
&.active {
color: $sidenav-dark-link-active-color;
.sb-nav-link-icon {
color: $sidenav-dark-link-active-color;
}
}
}
}
.sb-sidenav-footer {
background-color: $sidenav-dark-footer-bg;
}
}
@@ -0,0 +1,33 @@
// Light theme for sidenav
// Append .sb-sidenav-light to .sb-sidenav to use
.sb-sidenav-light {
background-color: $sidenav-light-bg;
color: $sidenav-light-color;
.sb-sidenav-menu {
.sb-sidenav-menu-heading {
color: $sidenav-light-heading-color;
}
.nav-link {
color: $sidenav-light-link-color;
.sb-nav-link-icon {
color: $sidenav-light-icon-color;
}
.sb-sidenav-collapse-arrow {
color: $sidenav-light-icon-color;
}
&:hover {
color: $sidenav-light-link-active-color;
}
&.active {
color: $sidenav-light-link-active-color;
.sb-nav-link-icon {
color: $sidenav-light-link-active-color;
}
}
}
}
.sb-sidenav-footer {
background-color: $sidenav-light-footer-bg;
}
}
@@ -0,0 +1,49 @@
// Base styling for the sidenav
.sb-sidenav {
display: flex;
flex-direction: column;
height: 100%;
flex-wrap: nowrap;
.sb-sidenav-menu {
flex-grow: 1;
.nav {
flex-direction: column;
flex-wrap: nowrap;
.sb-sidenav-menu-heading {
padding: 1.75rem 1rem 0.75rem;
font-size: 0.75rem;
font-weight: bold;
text-transform: uppercase;
}
.nav-link {
display: flex;
align-items: center;
padding-top: 0.75rem;
padding-bottom: 0.75rem;
position: relative;
.sb-nav-link-icon {
font-size: 0.9rem;
}
.sb-sidenav-collapse-arrow {
display: inline-block;
margin-left: auto;
transition: transform 0.15s ease;
}
&.collapsed {
.sb-sidenav-collapse-arrow {
transform: rotate(-90deg);
}
}
}
.sb-sidenav-menu-nested {
margin-left: 1.5rem;
flex-direction: column;
}
}
}
.sb-sidenav-footer {
padding: 0.75rem;
flex-shrink: 0;
}
}
+21
View File
@@ -0,0 +1,21 @@
// Import Custom Variables
@import "variables.scss";
// Import Bootstrap
@import "bootstrap/scss/bootstrap.scss";
// Import Custom SCSS
@import "global.scss";
// Layout
@import "layout/authentication.scss";
@import "layout/dashboard-default.scss";
@import "layout/dashboard-fixed.scss";
@import "layout/error.scss";
// Navigation
@import "navigation/nav.scss";
@import "navigation/topnav.scss";
@import "navigation/sidenav/sidenav.scss";
@import "navigation/sidenav/sidenav-dark.scss";
@import "navigation/sidenav/sidenav-light.scss";
@@ -0,0 +1,28 @@
// Z index variables
$zindex-content: 1037 !default;
$zindex-sidenav: 1038 !default;
$zindex-topnav: 1039 !default;
// Color variables for the sidenav
// -- Sidenav Dark
$sidenav-dark-bg: $gray-900;
$sidenav-dark-color: fade-out($white, 0.5);
$sidenav-dark-heading-color: fade-out($white, 0.75);
$sidenav-dark-link-color: fade-out($white, 0.5);
$sidenav-dark-link-active-color: $white;
$sidenav-dark-icon-color: fade-out($white, 0.75);
$sidenav-dark-footer-bg: $gray-800;
// -- Sidenav Light
$sidenav-light-bg: $gray-100;
$sidenav-light-color: $gray-900;
$sidenav-light-heading-color: $gray-500;
$sidenav-light-link-color: $sidenav-light-color;
$sidenav-light-link-active-color: $primary;
$sidenav-light-icon-color: $gray-500;
$sidenav-light-footer-bg: $gray-200;
// Color variables for the topnav
$topnav-dark-toggler-color: fade-out($white, 0.5);
$topnav-light-toggler-color: $gray-900;
+7
View File
@@ -0,0 +1,7 @@
// Adjust column spacing for symmetry
$spacer: 1rem;
$grid-gutter-width: $spacer * 1.5;
// Spacing variables for navigation
$topnav-base-height: 56px;
$sidenav-base-width: 225px;
@@ -0,0 +1,54 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Area Chart Example
var ctx = document.getElementById("myAreaChart");
var myLineChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["Mar 1", "Mar 2", "Mar 3", "Mar 4", "Mar 5", "Mar 6", "Mar 7", "Mar 8", "Mar 9", "Mar 10", "Mar 11", "Mar 12", "Mar 13"],
datasets: [{
label: "Sessions",
lineTension: 0.3,
backgroundColor: "rgba(2,117,216,0.2)",
borderColor: "rgba(2,117,216,1)",
pointRadius: 5,
pointBackgroundColor: "rgba(2,117,216,1)",
pointBorderColor: "rgba(255,255,255,0.8)",
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(2,117,216,1)",
pointHitRadius: 50,
pointBorderWidth: 2,
data: [10000, 30162, 26263, 18394, 18287, 28682, 31274, 33259, 25849, 24159, 32651, 31984, 38451],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'date'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 7
}
}],
yAxes: [{
ticks: {
min: 0,
max: 40000,
maxTicksLimit: 5
},
gridLines: {
color: "rgba(0, 0, 0, .125)",
}
}],
},
legend: {
display: false
}
}
});
@@ -0,0 +1,46 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Bar Chart Example
var ctx = document.getElementById("myBarChart");
var myLineChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["January", "February", "March", "April", "May", "June"],
datasets: [{
label: "Revenue",
backgroundColor: "rgba(2,117,216,1)",
borderColor: "rgba(2,117,216,1)",
data: [4215, 5312, 6251, 7841, 9821, 14984],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'month'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 6
}
}],
yAxes: [{
ticks: {
min: 0,
max: 15000,
maxTicksLimit: 5
},
gridLines: {
display: true
}
}],
},
legend: {
display: false
}
}
});
@@ -0,0 +1,16 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Pie Chart Example
var ctx = document.getElementById("myPieChart");
var myPieChart = new Chart(ctx, {
type: 'pie',
data: {
labels: ["Blue", "Red", "Yellow", "Green"],
datasets: [{
data: [12.21, 15.58, 11.25, 8.32],
backgroundColor: ['#007bff', '#dc3545', '#ffc107', '#28a745'],
}],
},
});
@@ -0,0 +1,4 @@
// Call the dataTables jQuery plugin
$(document).ready(function() {
$('#dataTable').DataTable();
});
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
@font-face {
font-family: DsegSeven;
src: url('DsegSeven.woff') format('woff');
}
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

+22
View File
@@ -0,0 +1,22 @@
/*!
* Start Bootstrap - SB Admin v6.0.2 (https://startbootstrap.com/template/sb-admin)
* Copyright 2013-2020 Start Bootstrap
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-sb-admin/blob/master/LICENSE)
*/
(function($) {
"use strict";
// Add active state to sidbar nav links
var path = window.location.href; // because the 'href' property of the DOM element is the absolute path
$("#layoutSidenav_nav .sb-sidenav a.nav-link").each(function() {
if (this.href === path) {
$(this).addClass("active");
}
});
// Toggle the side navigation
$("#sidebarToggle").on("click", function(e) {
e.preventDefault();
$("body").toggleClass("sb-sidenav-toggled");
});
})(jQuery);
+53
View File
@@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>404 Error - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="layoutError">
<div id="layoutError_content">
<main>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<div class="text-center mt-4">
<h1 class="display-1">401</h1>
<p class="lead">Unauthorized</p>
<p>Access to this resource is denied.</p>
<a href="index.html">
<i class="fas fa-arrow-left mr-1"></i>
Return to Dashboard
</a>
</div>
</div>
</div>
</div>
</main>
</div>
<div id="layoutError_footer">
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+52
View File
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>404 Error - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="layoutError">
<div id="layoutError_content">
<main>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<div class="text-center mt-4">
<img class="mb-4 img-error" src="assets/img/error-404-monochrome.svg" />
<p class="lead">This requested URL was not found on this server.</p>
<a href="index.html">
<i class="fas fa-arrow-left mr-1"></i>
Return to Dashboard
</a>
</div>
</div>
</div>
</div>
</main>
</div>
<div id="layoutError_footer">
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+52
View File
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>404 Error - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="layoutError">
<div id="layoutError_content">
<main>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<div class="text-center mt-4">
<h1 class="display-1">500</h1>
<p class="lead">Internal Server Error</p>
<a href="index.html">
<i class="fas fa-arrow-left mr-1"></i>
Return to Dashboard
</a>
</div>
</div>
</div>
</div>
</main>
</div>
<div id="layoutError_footer">
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+247
View File
@@ -0,0 +1,247 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="FlyThis" />
<meta name="author" content="Marco Loca" />
<title>{{ title }}</title>
<link rel="shortcut icon" href="../static/img/steam.ico">
<link rel="stylesheet" href="../static/css/styles.css"/>
<link rel="stylesheet" href="../static/css/fonts.css">
<!--<link rel="stylesheet" crossorigin="anonymous" href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>-->
</head>
<body class="sb-nav-fixed">
<!--<body onLoad="timeRefresh(1000);"></body>
<script>
function timeRefresh(time) {
setTimeout("window.location.reload();", time)
}
</script>-->
<script>
var timeout = setTimeout(dataRefresh, 250);
function dataRefresh() {
document.getElementById("Ch01").textContent="pippo";
// $('#Ch01').text("pippo");
timeout = setTimeout(dataRefresh, 250);
}
</script>
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<h3>
<img src="../static/img/steam.ico" height="48" width="48">
Steamware</h3>
<!-- Navbar Search-->
<!--<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle" href="#"><i class="fas fa-bars"></i></button>
<form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">
<div class="input-group">
<input class="form-control" type="text" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2" />
<div class="input-group-append">
<button class="btn btn-primary" type="button"><i class="fas fa-search"></i></button>
</div>
</div>
</form>
<ul class="navbar-nav ml-auto ml-md-0">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="userDropdown" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<a class="dropdown-item" href="#">Settings</a>
<a class="dropdown-item" href="#">Activity Log</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="login.html">Logout</a>
</div>
</li>
</ul>-->
</nav>
<!-- Sidebar-->
<div id="layoutSidenav">
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<!--<div class="sb-sidenav-menu-heading">Core</div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Dashboard
</a>
<div class="sb-sidenav-menu-heading">Interface</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseLayouts" aria-expanded="false" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="fas fa-columns"></i></div>
Layouts
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="layout-static.html">Static Navigation</a>
<a class="nav-link" href="layout-sidenav-light.html">Light Sidenav</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="false" aria-controls="collapsePages">
<div class="sb-nav-link-icon"><i class="fas fa-book-open"></i></div>
Pages
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapsePages" aria-labelledby="headingTwo" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">
Authentication
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseAuth" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="login.html">Login</a>
<a class="nav-link" href="register.html">Register</a>
<a class="nav-link" href="password.html">Forgot Password</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseError" aria-expanded="false" aria-controls="pagesCollapseError">
Error
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseError" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
</nav>
</div>
</nav>
</div>
<div class="sb-sidenav-menu-heading">Addons</div>
<a class="nav-link" href="charts.html">
<div class="sb-nav-link-icon"><i class="fas fa-chart-area"></i></div>
Charts
</a>
<a class="nav-link" href="tables.html">
<div class="sb-nav-link-icon"><i class="fas fa-table"></i></div>
Tables
</a>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Logged in as:</div>
Start Bootstrap
</div>-->
</nav>
</div>
<div id="layoutSidenav_content">
<main>
<div class="container-fluid">
<h2>
<img src="../static/img/steam.ico">
FlyThis
</h2>
<div class="row">
<div class="col-xl-6">
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-chart-area mr-1"></i>
Server time
</div>
<p id="timeNow">{{ timeNow }}</p>
</div>
</div>
<div class="col-xl-6">
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-chart-bar mr-1"></i>
Last log time
</div>
<p id="timeLog">{{ timeLog }}</p>
</div>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table mr-1"></i>
Channels Reading
</div>
<div class="card-body">
<div class="row">
<div class="col-3">
Canale 1: <span id="Ch01">{{ Ch0 }}</span>
</div>
<div class="col-3">
Canale 1: <span id="Ch02">{{ Ch1 }}</span>
</div>
<div class="col-3">
Canale 1: <span id="Ch03">{{ Ch2 }}</span>
</div>
<div class="col-3">
Canale 1: <span id="Ch04">{{ Ch3 }}</span>
</div>
</div>
<div class="row">
<div class="col-3">
Canale 5
</div>
<div class="col-3">
Canale 6
</div>
<div class="col-3">
Canale 7
</div>
<div class="col-3">
Canale 8
</div>
</div>
<!-- <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>Channel 0</th>
<th>Channel 1</th>
<th>Channel 2</th>
<th>Channel 3</th>
<th>Channel 4</th>
<th>Channel 5</th>
<th>Channel 6</th>
<th>Channel 7</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ Ch0 }}</td>
<td>{{ Ch1 }}</td>
<td>{{ Ch2 }}</td>
<td>{{ Ch3 }}</td>
<td>{{ Ch4 }}</td>
<td>{{ Ch5 }}</td>
<td>{{ Ch6 }}</td>
<td>{{ Ch7 }}</td>
</tr>
</tbody>
</table> -->
</div>
</div>
</div>
</main>
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Steamware srl 2021</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js" crossorigin="anonymous"></script>
<!-- <script src="js/scripts.js"></script>
<script src="assets/demo/chart-area-demo.js"></script>
<script src="assets/demo/chart-bar-demo.js"></script>
<script src="assets/demo/datatables-demo.js"></script> -->
</body>
</html>
+70
View File
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" href="../static/css/style.css">
<link rel="stylesheet" href="../static/css/fonts.css">
<link rel="shortcut icon" href="../static/img/steam.ico">
<!-- Prova di refresh del contenuto number 1:
<script language="javascript">
window.setInterval("refreshDiv()", 1000);
function refreshDiv(){
document.getElementById("dataZone").innerHTML;
}
</script>-->
<!-- Prova di refresh del contenuto number 2:
<script src="jquery-3.5.1.min.js"></script>
<script>
$(document).ready(function(){
setInterval(function(){
$("#dataZone").load(window.location.href + " #dataZone" );
}, 1000); });
</script>-->
<!-- refresh solo dati
<script language="javascript">
window.setInterval("refreshDiv()", 1000);
function refreshDiv(){
// chiamata a REST -- dati json (è un oggetto dati)
// chiama a getElementById e 1:1 sostituzione dell'inner html
}
</script>-->
</head>
<body>
<!--<body onLoad="timeRefresh(1000);">
<script>
function timeRefresh(time) {
setTimeout("window.location.reload();", time)
}
</script>-->
<!--Area visualizzata da utente: stampa dati passati da FlythisServer.py-->
<h1>Flythis</h1>
<h2>Steamware srl</h2>
<div id="dataZone">
<h3>Server time:</h3>
<p id="timeNow">{{ timeNow }}</p>
<h3>Last log time:</h3>
<p id="timeLog">{{ timeLog }}</p>
<h3>Channel 0:</h3>
<p id="labelCh0">{{ Ch0 }}</p>
<h3>Channel 1:</h3>
<p id="labelCh1">{{ Ch1 }}</p>
<h3>Channel 2:</h3>
<p id="labelCh2">{{ Ch2 }}</p>
<h3>Channel 3:</h3>
<p id="labelCh3">{{ Ch3 }}<p>
<h3>Channel 4:</h3>
<p id="labelCh4">{{ Ch4 }}</p>
<h3>Channel 5:</h3>
<p id="labelCh5">{{ Ch5 }}</p>
<h3>Channel 6:</h3>
<p id="labelCh6">{{ Ch6 }}</p>
<h3>Channel 7:</h3>
<p id="labelCh7">{{ Ch7 }}</p>
</div>
</body>
</html>
+178
View File
@@ -0,0 +1,178 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Charts - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body class="sb-nav-fixed">
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle" href="#"><i class="fas fa-bars"></i></button>
<!-- Navbar Search-->
<form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">
<div class="input-group">
<input class="form-control" type="text" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2" />
<div class="input-group-append">
<button class="btn btn-primary" type="button"><i class="fas fa-search"></i></button>
</div>
</div>
</form>
<!-- Navbar-->
<ul class="navbar-nav ml-auto ml-md-0">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="userDropdown" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<a class="dropdown-item" href="#">Settings</a>
<a class="dropdown-item" href="#">Activity Log</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="login.html">Logout</a>
</div>
</li>
</ul>
</nav>
<div id="layoutSidenav">
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<div class="sb-sidenav-menu-heading">Core</div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Dashboard
</a>
<div class="sb-sidenav-menu-heading">Interface</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseLayouts" aria-expanded="false" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="fas fa-columns"></i></div>
Layouts
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="layout-static.html">Static Navigation</a>
<a class="nav-link" href="layout-sidenav-light.html">Light Sidenav</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="false" aria-controls="collapsePages">
<div class="sb-nav-link-icon"><i class="fas fa-book-open"></i></div>
Pages
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapsePages" aria-labelledby="headingTwo" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">
Authentication
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseAuth" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="login.html">Login</a>
<a class="nav-link" href="register.html">Register</a>
<a class="nav-link" href="password.html">Forgot Password</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseError" aria-expanded="false" aria-controls="pagesCollapseError">
Error
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseError" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
</nav>
</div>
</nav>
</div>
<div class="sb-sidenav-menu-heading">Addons</div>
<a class="nav-link" href="charts.html">
<div class="sb-nav-link-icon"><i class="fas fa-chart-area"></i></div>
Charts
</a>
<a class="nav-link" href="tables.html">
<div class="sb-nav-link-icon"><i class="fas fa-table"></i></div>
Tables
</a>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Logged in as:</div>
Start Bootstrap
</div>
</nav>
</div>
<div id="layoutSidenav_content">
<main>
<div class="container-fluid">
<h1 class="mt-4">Charts</h1>
<ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="index.html">Dashboard</a></li>
<li class="breadcrumb-item active">Charts</li>
</ol>
<div class="card mb-4">
<div class="card-body">
Chart.js is a third party plugin that is used to generate the charts in this template. The charts below have been customized - for further customization options, please visit the official
<a target="_blank" href="https://www.chartjs.org/docs/latest/">Chart.js documentation</a>
.
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-chart-area mr-1"></i>
Area Chart Example
</div>
<div class="card-body"><canvas id="myAreaChart" width="100%" height="30"></canvas></div>
<div class="card-footer small text-muted">Updated yesterday at 11:59 PM</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-chart-bar mr-1"></i>
Bar Chart Example
</div>
<div class="card-body"><canvas id="myBarChart" width="100%" height="50"></canvas></div>
<div class="card-footer small text-muted">Updated yesterday at 11:59 PM</div>
</div>
</div>
<div class="col-lg-6">
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-chart-pie mr-1"></i>
Pie Chart Example
</div>
<div class="card-body"><canvas id="myPieChart" width="100%" height="50"></canvas></div>
<div class="card-footer small text-muted">Updated yesterday at 11:59 PM</div>
</div>
</div>
</div>
</div>
</main>
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" crossorigin="anonymous"></script>
<script src="assets/demo/chart-area-demo.js"></script>
<script src="assets/demo/chart-bar-demo.js"></script>
<script src="assets/demo/chart-pie-demo.js"></script>
</body>
</html>
+148
View File
@@ -0,0 +1,148 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Sidenav Light - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body class="sb-nav-fixed">
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle" href="#"><i class="fas fa-bars"></i></button>
<!-- Navbar Search-->
<form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">
<div class="input-group">
<input class="form-control" type="text" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2" />
<div class="input-group-append">
<button class="btn btn-primary" type="button"><i class="fas fa-search"></i></button>
</div>
</div>
</form>
<!-- Navbar-->
<ul class="navbar-nav ml-auto ml-md-0">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="userDropdown" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<a class="dropdown-item" href="#">Settings</a>
<a class="dropdown-item" href="#">Activity Log</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="login.html">Logout</a>
</div>
</li>
</ul>
</nav>
<div id="layoutSidenav">
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-light" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<div class="sb-sidenav-menu-heading">Core</div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Dashboard
</a>
<div class="sb-sidenav-menu-heading">Interface</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseLayouts" aria-expanded="false" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="fas fa-columns"></i></div>
Layouts
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="layout-static.html">Static Navigation</a>
<a class="nav-link" href="layout-sidenav-light.html">Light Sidenav</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="false" aria-controls="collapsePages">
<div class="sb-nav-link-icon"><i class="fas fa-book-open"></i></div>
Pages
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapsePages" aria-labelledby="headingTwo" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">
Authentication
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseAuth" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="login.html">Login</a>
<a class="nav-link" href="register.html">Register</a>
<a class="nav-link" href="password.html">Forgot Password</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseError" aria-expanded="false" aria-controls="pagesCollapseError">
Error
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseError" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
</nav>
</div>
</nav>
</div>
<div class="sb-sidenav-menu-heading">Addons</div>
<a class="nav-link" href="charts.html">
<div class="sb-nav-link-icon"><i class="fas fa-chart-area"></i></div>
Charts
</a>
<a class="nav-link" href="tables.html">
<div class="sb-nav-link-icon"><i class="fas fa-table"></i></div>
Tables
</a>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Logged in as:</div>
Start Bootstrap
</div>
</nav>
</div>
<div id="layoutSidenav_content">
<main>
<div class="container-fluid">
<h1 class="mt-4">Sidenav Light</h1>
<ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="index.html">Dashboard</a></li>
<li class="breadcrumb-item active">Sidenav Light</li>
</ol>
<div class="card mb-4">
<div class="card-body">
This page is an example of using the light side navigation option. By appending the
<code>.sb-sidenav-light</code>
class to the
<code>.sb-sidenav</code>
class, the side navigation will take on a light color scheme. The
<code>.sb-sidenav-dark</code>
is also available for a darker option.
</div>
</div>
</div>
</main>
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+150
View File
@@ -0,0 +1,150 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Static Navigation - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body>
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle" href="#"><i class="fas fa-bars"></i></button>
<!-- Navbar Search-->
<form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">
<div class="input-group">
<input class="form-control" type="text" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2" />
<div class="input-group-append">
<button class="btn btn-primary" type="button"><i class="fas fa-search"></i></button>
</div>
</div>
</form>
<!-- Navbar-->
<ul class="navbar-nav ml-auto ml-md-0">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="userDropdown" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<a class="dropdown-item" href="#">Settings</a>
<a class="dropdown-item" href="#">Activity Log</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="login.html">Logout</a>
</div>
</li>
</ul>
</nav>
<div id="layoutSidenav">
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<div class="sb-sidenav-menu-heading">Core</div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Dashboard
</a>
<div class="sb-sidenav-menu-heading">Interface</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseLayouts" aria-expanded="false" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="fas fa-columns"></i></div>
Layouts
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="layout-static.html">Static Navigation</a>
<a class="nav-link" href="layout-sidenav-light.html">Light Sidenav</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="false" aria-controls="collapsePages">
<div class="sb-nav-link-icon"><i class="fas fa-book-open"></i></div>
Pages
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapsePages" aria-labelledby="headingTwo" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">
Authentication
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseAuth" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="login.html">Login</a>
<a class="nav-link" href="register.html">Register</a>
<a class="nav-link" href="password.html">Forgot Password</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseError" aria-expanded="false" aria-controls="pagesCollapseError">
Error
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseError" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
</nav>
</div>
</nav>
</div>
<div class="sb-sidenav-menu-heading">Addons</div>
<a class="nav-link" href="charts.html">
<div class="sb-nav-link-icon"><i class="fas fa-chart-area"></i></div>
Charts
</a>
<a class="nav-link" href="tables.html">
<div class="sb-nav-link-icon"><i class="fas fa-table"></i></div>
Tables
</a>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Logged in as:</div>
Start Bootstrap
</div>
</nav>
</div>
<div id="layoutSidenav_content">
<main>
<div class="container-fluid">
<h1 class="mt-4">Static Navigation</h1>
<ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="index.html">Dashboard</a></li>
<li class="breadcrumb-item active">Static Navigation</li>
</ol>
<div class="card mb-4">
<div class="card-body">
<p class="mb-0">
This page is an example of using static navigation. By removing the
<code>.sb-nav-fixed</code>
class from the
<code>body</code>
, the top navigation and side navigation will become static on scroll. Scroll down this page to see an example.
</p>
</div>
</div>
<div style="height: 100vh"></div>
<div class="card mb-4"><div class="card-body">When scrolling, the navigation stays at the top of the page. This is the end of the static navigation demo.</div></div>
</div>
</main>
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+72
View File
@@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Page Title - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body class="bg-primary">
<div id="layoutAuthentication">
<div id="layoutAuthentication_content">
<main>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-5">
<div class="card shadow-lg border-0 rounded-lg mt-5">
<div class="card-header"><h3 class="text-center font-weight-light my-4">Login</h3></div>
<div class="card-body">
<form>
<div class="form-group">
<label class="small mb-1" for="inputEmailAddress">Email</label>
<input class="form-control py-4" id="inputEmailAddress" type="email" placeholder="Enter email address" />
</div>
<div class="form-group">
<label class="small mb-1" for="inputPassword">Password</label>
<input class="form-control py-4" id="inputPassword" type="password" placeholder="Enter password" />
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input class="custom-control-input" id="rememberPasswordCheck" type="checkbox" />
<label class="custom-control-label" for="rememberPasswordCheck">Remember password</label>
</div>
</div>
<div class="form-group d-flex align-items-center justify-content-between mt-4 mb-0">
<a class="small" href="password.html">Forgot Password?</a>
<a class="btn btn-primary" href="index.html">Login</a>
</div>
</form>
</div>
<div class="card-footer text-center">
<div class="small"><a href="register.html">Need an account? Sign up!</a></div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<div id="layoutAuthentication_footer">
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+16
View File
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0;url=index.html">
<title>SB Admin</title>
<script language="javascript">
window.location.href = "index.html"
</script>
</head>
<body>
Go to <a href="index.html">templates/index.html</a>
</body>
</html>
+63
View File
@@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Page Title - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body class="bg-primary">
<div id="layoutAuthentication">
<div id="layoutAuthentication_content">
<main>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-5">
<div class="card shadow-lg border-0 rounded-lg mt-5">
<div class="card-header"><h3 class="text-center font-weight-light my-4">Password Recovery</h3></div>
<div class="card-body">
<div class="small mb-3 text-muted">Enter your email address and we will send you a link to reset your password.</div>
<form>
<div class="form-group">
<label class="small mb-1" for="inputEmailAddress">Email</label>
<input class="form-control py-4" id="inputEmailAddress" type="email" aria-describedby="emailHelp" placeholder="Enter email address" />
</div>
<div class="form-group d-flex align-items-center justify-content-between mt-4 mb-0">
<a class="small" href="login.html">Return to login</a>
<a class="btn btn-primary" href="login.html">Reset Password</a>
</div>
</form>
</div>
<div class="card-footer text-center">
<div class="small"><a href="register.html">Need an account? Sign up!</a></div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<div id="layoutAuthentication_footer">
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+87
View File
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Page Title - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body class="bg-primary">
<div id="layoutAuthentication">
<div id="layoutAuthentication_content">
<main>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="card shadow-lg border-0 rounded-lg mt-5">
<div class="card-header"><h3 class="text-center font-weight-light my-4">Create Account</h3></div>
<div class="card-body">
<form>
<div class="form-row">
<div class="col-md-6">
<div class="form-group">
<label class="small mb-1" for="inputFirstName">First Name</label>
<input class="form-control py-4" id="inputFirstName" type="text" placeholder="Enter first name" />
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="small mb-1" for="inputLastName">Last Name</label>
<input class="form-control py-4" id="inputLastName" type="text" placeholder="Enter last name" />
</div>
</div>
</div>
<div class="form-group">
<label class="small mb-1" for="inputEmailAddress">Email</label>
<input class="form-control py-4" id="inputEmailAddress" type="email" aria-describedby="emailHelp" placeholder="Enter email address" />
</div>
<div class="form-row">
<div class="col-md-6">
<div class="form-group">
<label class="small mb-1" for="inputPassword">Password</label>
<input class="form-control py-4" id="inputPassword" type="password" placeholder="Enter password" />
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="small mb-1" for="inputConfirmPassword">Confirm Password</label>
<input class="form-control py-4" id="inputConfirmPassword" type="password" placeholder="Confirm password" />
</div>
</div>
</div>
<div class="form-group mt-4 mb-0"><a class="btn btn-primary btn-block" href="login.html">Create Account</a></div>
</form>
</div>
<div class="card-footer text-center">
<div class="small"><a href="login.html">Have an account? Go to login</a></div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<div id="layoutAuthentication_footer">
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>
+638
View File
@@ -0,0 +1,638 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Tables - SB Admin</title>
<link href="css/styles.css" rel="stylesheet" />
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
</head>
<body class="sb-nav-fixed">
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle" href="#"><i class="fas fa-bars"></i></button>
<!-- Navbar Search-->
<form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">
<div class="input-group">
<input class="form-control" type="text" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2" />
<div class="input-group-append">
<button class="btn btn-primary" type="button"><i class="fas fa-search"></i></button>
</div>
</div>
</form>
<!-- Navbar-->
<ul class="navbar-nav ml-auto ml-md-0">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="userDropdown" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<a class="dropdown-item" href="#">Settings</a>
<a class="dropdown-item" href="#">Activity Log</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="login.html">Logout</a>
</div>
</li>
</ul>
</nav>
<div id="layoutSidenav">
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<div class="sb-sidenav-menu-heading">Core</div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Dashboard
</a>
<div class="sb-sidenav-menu-heading">Interface</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseLayouts" aria-expanded="false" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="fas fa-columns"></i></div>
Layouts
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="layout-static.html">Static Navigation</a>
<a class="nav-link" href="layout-sidenav-light.html">Light Sidenav</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="false" aria-controls="collapsePages">
<div class="sb-nav-link-icon"><i class="fas fa-book-open"></i></div>
Pages
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapsePages" aria-labelledby="headingTwo" data-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">
Authentication
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseAuth" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="login.html">Login</a>
<a class="nav-link" href="register.html">Register</a>
<a class="nav-link" href="password.html">Forgot Password</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#pagesCollapseError" aria-expanded="false" aria-controls="pagesCollapseError">
Error
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseError" aria-labelledby="headingOne" data-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
</nav>
</div>
</nav>
</div>
<div class="sb-sidenav-menu-heading">Addons</div>
<a class="nav-link" href="charts.html">
<div class="sb-nav-link-icon"><i class="fas fa-chart-area"></i></div>
Charts
</a>
<a class="nav-link" href="tables.html">
<div class="sb-nav-link-icon"><i class="fas fa-table"></i></div>
Tables
</a>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Logged in as:</div>
Start Bootstrap
</div>
</nav>
</div>
<div id="layoutSidenav_content">
<main>
<div class="container-fluid">
<h1 class="mt-4">Tables</h1>
<ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="index.html">Dashboard</a></li>
<li class="breadcrumb-item active">Tables</li>
</ol>
<div class="card mb-4">
<div class="card-body">
DataTables is a third party plugin that is used to generate the demo table below. For more information about DataTables, please visit the
<a target="_blank" href="https://datatables.net/">official DataTables documentation</a>
.
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<i class="fas fa-table mr-1"></i>
DataTable Example
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>$320,800</td>
</tr>
<tr>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>$170,750</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009/01/12</td>
<td>$86,000</td>
</tr>
<tr>
<td>Cedric Kelly</td>
<td>Senior Javascript Developer</td>
<td>Edinburgh</td>
<td>22</td>
<td>2012/03/29</td>
<td>$433,060</td>
</tr>
<tr>
<td>Airi Satou</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>33</td>
<td>2008/11/28</td>
<td>$162,700</td>
</tr>
<tr>
<td>Brielle Williamson</td>
<td>Integration Specialist</td>
<td>New York</td>
<td>61</td>
<td>2012/12/02</td>
<td>$372,000</td>
</tr>
<tr>
<td>Herrod Chandler</td>
<td>Sales Assistant</td>
<td>San Francisco</td>
<td>59</td>
<td>2012/08/06</td>
<td>$137,500</td>
</tr>
<tr>
<td>Rhona Davidson</td>
<td>Integration Specialist</td>
<td>Tokyo</td>
<td>55</td>
<td>2010/10/14</td>
<td>$327,900</td>
</tr>
<tr>
<td>Colleen Hurst</td>
<td>Javascript Developer</td>
<td>San Francisco</td>
<td>39</td>
<td>2009/09/15</td>
<td>$205,500</td>
</tr>
<tr>
<td>Sonya Frost</td>
<td>Software Engineer</td>
<td>Edinburgh</td>
<td>23</td>
<td>2008/12/13</td>
<td>$103,600</td>
</tr>
<tr>
<td>Jena Gaines</td>
<td>Office Manager</td>
<td>London</td>
<td>30</td>
<td>2008/12/19</td>
<td>$90,560</td>
</tr>
<tr>
<td>Quinn Flynn</td>
<td>Support Lead</td>
<td>Edinburgh</td>
<td>22</td>
<td>2013/03/03</td>
<td>$342,000</td>
</tr>
<tr>
<td>Charde Marshall</td>
<td>Regional Director</td>
<td>San Francisco</td>
<td>36</td>
<td>2008/10/16</td>
<td>$470,600</td>
</tr>
<tr>
<td>Haley Kennedy</td>
<td>Senior Marketing Designer</td>
<td>London</td>
<td>43</td>
<td>2012/12/18</td>
<td>$313,500</td>
</tr>
<tr>
<td>Tatyana Fitzpatrick</td>
<td>Regional Director</td>
<td>London</td>
<td>19</td>
<td>2010/03/17</td>
<td>$385,750</td>
</tr>
<tr>
<td>Michael Silva</td>
<td>Marketing Designer</td>
<td>London</td>
<td>66</td>
<td>2012/11/27</td>
<td>$198,500</td>
</tr>
<tr>
<td>Paul Byrd</td>
<td>Chief Financial Officer (CFO)</td>
<td>New York</td>
<td>64</td>
<td>2010/06/09</td>
<td>$725,000</td>
</tr>
<tr>
<td>Gloria Little</td>
<td>Systems Administrator</td>
<td>New York</td>
<td>59</td>
<td>2009/04/10</td>
<td>$237,500</td>
</tr>
<tr>
<td>Bradley Greer</td>
<td>Software Engineer</td>
<td>London</td>
<td>41</td>
<td>2012/10/13</td>
<td>$132,000</td>
</tr>
<tr>
<td>Dai Rios</td>
<td>Personnel Lead</td>
<td>Edinburgh</td>
<td>35</td>
<td>2012/09/26</td>
<td>$217,500</td>
</tr>
<tr>
<td>Jenette Caldwell</td>
<td>Development Lead</td>
<td>New York</td>
<td>30</td>
<td>2011/09/03</td>
<td>$345,000</td>
</tr>
<tr>
<td>Yuri Berry</td>
<td>Chief Marketing Officer (CMO)</td>
<td>New York</td>
<td>40</td>
<td>2009/06/25</td>
<td>$675,000</td>
</tr>
<tr>
<td>Caesar Vance</td>
<td>Pre-Sales Support</td>
<td>New York</td>
<td>21</td>
<td>2011/12/12</td>
<td>$106,450</td>
</tr>
<tr>
<td>Doris Wilder</td>
<td>Sales Assistant</td>
<td>Sidney</td>
<td>23</td>
<td>2010/09/20</td>
<td>$85,600</td>
</tr>
<tr>
<td>Angelica Ramos</td>
<td>Chief Executive Officer (CEO)</td>
<td>London</td>
<td>47</td>
<td>2009/10/09</td>
<td>$1,200,000</td>
</tr>
<tr>
<td>Gavin Joyce</td>
<td>Developer</td>
<td>Edinburgh</td>
<td>42</td>
<td>2010/12/22</td>
<td>$92,575</td>
</tr>
<tr>
<td>Jennifer Chang</td>
<td>Regional Director</td>
<td>Singapore</td>
<td>28</td>
<td>2010/11/14</td>
<td>$357,650</td>
</tr>
<tr>
<td>Brenden Wagner</td>
<td>Software Engineer</td>
<td>San Francisco</td>
<td>28</td>
<td>2011/06/07</td>
<td>$206,850</td>
</tr>
<tr>
<td>Fiona Green</td>
<td>Chief Operating Officer (COO)</td>
<td>San Francisco</td>
<td>48</td>
<td>2010/03/11</td>
<td>$850,000</td>
</tr>
<tr>
<td>Shou Itou</td>
<td>Regional Marketing</td>
<td>Tokyo</td>
<td>20</td>
<td>2011/08/14</td>
<td>$163,000</td>
</tr>
<tr>
<td>Michelle House</td>
<td>Integration Specialist</td>
<td>Sidney</td>
<td>37</td>
<td>2011/06/02</td>
<td>$95,400</td>
</tr>
<tr>
<td>Suki Burks</td>
<td>Developer</td>
<td>London</td>
<td>53</td>
<td>2009/10/22</td>
<td>$114,500</td>
</tr>
<tr>
<td>Prescott Bartlett</td>
<td>Technical Author</td>
<td>London</td>
<td>27</td>
<td>2011/05/07</td>
<td>$145,000</td>
</tr>
<tr>
<td>Gavin Cortez</td>
<td>Team Leader</td>
<td>San Francisco</td>
<td>22</td>
<td>2008/10/26</td>
<td>$235,500</td>
</tr>
<tr>
<td>Martena Mccray</td>
<td>Post-Sales support</td>
<td>Edinburgh</td>
<td>46</td>
<td>2011/03/09</td>
<td>$324,050</td>
</tr>
<tr>
<td>Unity Butler</td>
<td>Marketing Designer</td>
<td>San Francisco</td>
<td>47</td>
<td>2009/12/09</td>
<td>$85,675</td>
</tr>
<tr>
<td>Howard Hatfield</td>
<td>Office Manager</td>
<td>San Francisco</td>
<td>51</td>
<td>2008/12/16</td>
<td>$164,500</td>
</tr>
<tr>
<td>Hope Fuentes</td>
<td>Secretary</td>
<td>San Francisco</td>
<td>41</td>
<td>2010/02/12</td>
<td>$109,850</td>
</tr>
<tr>
<td>Vivian Harrell</td>
<td>Financial Controller</td>
<td>San Francisco</td>
<td>62</td>
<td>2009/02/14</td>
<td>$452,500</td>
</tr>
<tr>
<td>Timothy Mooney</td>
<td>Office Manager</td>
<td>London</td>
<td>37</td>
<td>2008/12/11</td>
<td>$136,200</td>
</tr>
<tr>
<td>Jackson Bradshaw</td>
<td>Director</td>
<td>New York</td>
<td>65</td>
<td>2008/09/26</td>
<td>$645,750</td>
</tr>
<tr>
<td>Olivia Liang</td>
<td>Support Engineer</td>
<td>Singapore</td>
<td>64</td>
<td>2011/02/03</td>
<td>$234,500</td>
</tr>
<tr>
<td>Bruno Nash</td>
<td>Software Engineer</td>
<td>London</td>
<td>38</td>
<td>2011/05/03</td>
<td>$163,500</td>
</tr>
<tr>
<td>Sakura Yamamoto</td>
<td>Support Engineer</td>
<td>Tokyo</td>
<td>37</td>
<td>2009/08/19</td>
<td>$139,575</td>
</tr>
<tr>
<td>Thor Walton</td>
<td>Developer</td>
<td>New York</td>
<td>61</td>
<td>2013/08/11</td>
<td>$98,540</td>
</tr>
<tr>
<td>Finn Camacho</td>
<td>Support Engineer</td>
<td>San Francisco</td>
<td>47</td>
<td>2009/07/07</td>
<td>$87,500</td>
</tr>
<tr>
<td>Serge Baldwin</td>
<td>Data Coordinator</td>
<td>Singapore</td>
<td>64</td>
<td>2012/04/09</td>
<td>$138,575</td>
</tr>
<tr>
<td>Zenaida Frank</td>
<td>Software Engineer</td>
<td>New York</td>
<td>63</td>
<td>2010/01/04</td>
<td>$125,250</td>
</tr>
<tr>
<td>Zorita Serrano</td>
<td>Software Engineer</td>
<td>San Francisco</td>
<td>56</td>
<td>2012/06/01</td>
<td>$115,000</td>
</tr>
<tr>
<td>Jennifer Acosta</td>
<td>Junior Javascript Developer</td>
<td>Edinburgh</td>
<td>43</td>
<td>2013/02/01</td>
<td>$75,650</td>
</tr>
<tr>
<td>Cara Stevens</td>
<td>Sales Assistant</td>
<td>New York</td>
<td>46</td>
<td>2011/12/06</td>
<td>$145,600</td>
</tr>
<tr>
<td>Hermione Butler</td>
<td>Regional Director</td>
<td>London</td>
<td>47</td>
<td>2011/03/21</td>
<td>$356,250</td>
</tr>
<tr>
<td>Lael Greer</td>
<td>Systems Administrator</td>
<td>London</td>
<td>21</td>
<td>2009/02/27</td>
<td>$103,500</td>
</tr>
<tr>
<td>Jonas Alexander</td>
<td>Developer</td>
<td>San Francisco</td>
<td>30</td>
<td>2010/07/14</td>
<td>$86,500</td>
</tr>
<tr>
<td>Shad Decker</td>
<td>Regional Director</td>
<td>Edinburgh</td>
<td>51</td>
<td>2008/11/13</td>
<td>$183,000</td>
</tr>
<tr>
<td>Michael Bruce</td>
<td>Javascript Developer</td>
<td>Singapore</td>
<td>29</td>
<td>2011/06/27</td>
<td>$183,000</td>
</tr>
<tr>
<td>Donna Snider</td>
<td>Customer Support</td>
<td>New York</td>
<td>27</td>
<td>2011/01/25</td>
<td>$112,000</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</main>
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Your Website 2020</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js" crossorigin="anonymous"></script>
<script src="assets/demo/datatables-demo.js"></script>
</body>
</html>
+8
View File
@@ -0,0 +1,8 @@
from flask import Flask
from flask_bootstrap import Bootstrap
def create_app():
app = Flask(__name__)
Bootstrap(app)
return app
+14
View File
@@ -0,0 +1,14 @@
{
"Channels":
{
"TIME": "2021.03.02T08:03:45",
"CH0": 1.2345,
"CH1": 2.3456,
"CH2": 1.5673,
"CH3": 3.4567,
"CH4": 4.5678,
"CH5": 5.6789,
"CH6": 6.7890,
"CH7": 7.6543
}
}
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/python
# -*- coding:utf-8 -*-
import threading
import time
import datetime
for IOcount in range(0,8,+1):
print(IOcount)
+16
View File
@@ -0,0 +1,16 @@
# To get the IPv4 IP address of the local machine using
# Using socket module and socket.socket() and connect()
# and socket.getsockname() Method in Python
# Import Module
import socket
# Create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# connect to the server on local computer
s.connect(("8.8.8.8", 80))
# Print Output
print("HostName: ",s.getsockname()[0])
s.close()
+2
View File
@@ -0,0 +1,2 @@
netStatus=`cat /sys/class/net/eth0/operstate`
iaddr=`ifconfig eth0 | grep "inet " | cut -d 'n' -f 2 | cut -d ' ' -f 2`
+28
View File
@@ -0,0 +1,28 @@
# stampo a video
# print ("0 ADC = %lf"%(ADC_Value[0]*5.0/0x7fffff))
# print ("1 ADC = %lf"%(ADC_Value[1]*5.0/0x7fffff))
# print ("2 ADC = %lf"%(ADC_Value[2]*5.0/0x7fffff))
# print ("3 ADC = %lf"%(ADC_Value[3]*5.0/0x7fffff))
# print ("4 ADC = %lf"%(ADC_Value[4]*5.0/0x7fffff))
# print ("5 ADC = %lf"%(ADC_Value[5]*5.0/0x7fffff))
# print ("6 ADC = %lf"%(ADC_Value[6]*5.0/0x7fffff))
# print ("7 ADC = %lf"%(ADC_Value[7]*5.0/0x7fffff))
# print ("\33[9A")
# scrivo in redis
# strVal = "%lf" % (ADC_Value[0]*5.0/0x7fffff)
# redSrv.set('RTDATA:ADC:0',strVal)
# va scritto su redis in DB0 e area RTDATA:ADC:0 ... RTDATA:ADC:7 gli otto valori, il timestamp di salvataggio lo metti in RTDATA:ADC:TIME
# logFile.write("\nTime: ")
# logFile.write(str(now))
# logFile.write(" | 0 ADC = %lf"%(ADC_Value[0]*5.0/0x7fffff))
# logFile.write(" | 1 ADC = %lf"%(ADC_Value[1]*5.0/0x7fffff))
# logFile.write(" | 2 ADC = %lf"%(ADC_Value[2]*5.0/0x7fffff))
# logFile.write(" | 3 ADC = %lf"%(ADC_Value[3]*5.0/0x7fffff))
# logFile.write(" | 4 ADC = %lf"%(ADC_Value[4]*5.0/0x7fffff))
# logFile.write(" | 5 ADC = %lf"%(ADC_Value[5]*5.0/0x7fffff))
# logFile.write(" | 6 ADC = %lf"%(ADC_Value[6]*5.0/0x7fffff))
# logFile.write(" | 7 ADC = %lf"%(ADC_Value[7]*5.0/0x7fffff))
# logFile.write(" | ")
# logFile.close()
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/python3
import redis
REDIS_PORT = 6397
REDIS_HOST = '127.0.0.1'
redSrv = redis.Redis(
host=REDIS_HOST,
port=REDIS_PORT,
db=0)
+20
View File
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<head>
<script langauge="javascript">
var counter = 0;
window.setInterval("refreshDiv()", 5000);
function refreshDiv(){
counter = counter + 1;
document.getElementById("test").innerHTML = "Testing " + counter;
}
</script>
</head>
<body>
<div id="test">
Testing
</div>
<div id="staticBlock">
This is a static block
</div>
</body>
</html>

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