initial commit
This commit is contained in:
@@ -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.
@@ -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()
|
||||
@@ -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.
@@ -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 ###
|
||||
Binary file not shown.
@@ -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
|
||||
|
||||
*/
|
||||
|
||||
@@ -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)
|
||||
@@ -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.
|
||||
Generated
+2609
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
const renderAssets = require('./render-assets');
|
||||
|
||||
renderAssets();
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
const renderScripts = require('./render-scripts');
|
||||
|
||||
renderScripts();
|
||||
@@ -0,0 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
const renderSCSS = require('./render-scss');
|
||||
|
||||
renderSCSS();
|
||||
@@ -0,0 +1,7 @@
|
||||
const sh = require('shelljs');
|
||||
const upath = require('upath');
|
||||
|
||||
const destPath = upath.resolve(upath.dirname(__filename), '../dist');
|
||||
|
||||
sh.rm('-rf', `${destPath}/*`)
|
||||
|
||||
@@ -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)
|
||||
};
|
||||
@@ -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);
|
||||
};
|
||||
@@ -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);
|
||||
};
|
||||
@@ -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}"
|
||||
`
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
@@ -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 |
@@ -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);
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 © Your Website 2020
|
||||
div
|
||||
a(href='#') Privacy Policy
|
||||
|
|
||||
| ·
|
||||
|
|
||||
a(href='#') Terms & 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')
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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')
|
||||
@@ -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}
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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!
|
||||
@@ -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!
|
||||
@@ -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
|
||||
@@ -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')
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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.
@@ -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 |
@@ -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);
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Steamware srl 2021</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -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 © Your Website 2020</div>
|
||||
<div>
|
||||
<a href="#">Privacy Policy</a>
|
||||
·
|
||||
<a href="#">Terms & 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>
|
||||
@@ -0,0 +1,8 @@
|
||||
from flask import Flask
|
||||
from flask_bootstrap import Bootstrap
|
||||
|
||||
def create_app():
|
||||
app = Flask(__name__)
|
||||
Bootstrap(app)
|
||||
|
||||
return app
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
@@ -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`
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
@@ -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
Reference in New Issue
Block a user