add the server-tornado
parent
17ba8dbdc8
commit
9953cd9aa2
|
@ -0,0 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<script type="text/javascript" src="jquery-1.11.2.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="jade"></div>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,22 @@
|
|||
|
||||
|
||||
$(document).ready(function () {
|
||||
$('.jade').each(function(index, div) {
|
||||
|
||||
// var j = new jade_defs.jade();
|
||||
// jade_defs.services(j);
|
||||
// j.setup(div);
|
||||
});
|
||||
});
|
||||
|
||||
class Jade{
|
||||
constructor(){
|
||||
|
||||
this.top_level = $( '<div class="jade-top-level">' +
|
||||
' <div class="jade-tabs-div">'+
|
||||
'</div>');
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
import tornado.ioloop #开启循环,让服务一直等待请求的到来
|
||||
import tornado.web #web服务基本功能都封装在此模块中
|
||||
import tornado.options #从命令行中读取设置
|
||||
from tornado.options import define,options #导入包
|
||||
from handler import main, auth
|
||||
# import _thread,threading
|
||||
from spice import app_spice
|
||||
|
||||
define('port',default='8000',help='Listening port',type=int) #定义如何接受传进来的东西
|
||||
|
||||
|
||||
class Application(tornado.web.Application): #引入Application类,重写方法,这样做的好处在于可以自定义,添加另一些功能
|
||||
def __init__(self):
|
||||
handlers = [
|
||||
(r'/',main.IndexHandler),
|
||||
(r'/login',auth.LoginHandler),
|
||||
(r'/logout',auth.LogoutHandler),
|
||||
(r'/register',auth.RegisterHandler),
|
||||
(r'/spice',main.Spice_Xyce_Handler),
|
||||
]
|
||||
settings = dict(
|
||||
debug = False, #调试模式,修改后自动重启服务,不需要自动重启,生产情况下切勿开启,安全性
|
||||
template_path='template', #模板文件目录,想要Tornado能够正确的找到html文件,需要在 Application 中指定文件的位置
|
||||
static_path='static', #静态文件目录,可用于用于访问js,css,图片之类的添加此配置之后,tornado就能自己找到静态文件
|
||||
login_url='/login', #没有登录则跳转至此
|
||||
cookie_secret='1q2w3e4r', # 加密cookie的字符串
|
||||
pycket={ #固定写法packet,用于保存用户登录信息
|
||||
'engine': 'redis',
|
||||
'storage': {
|
||||
'host': 'localhost',
|
||||
'port': 6379,
|
||||
'db_sessions': 5,
|
||||
'db_notifications': 11,
|
||||
'max_connections': 2 ** 33,
|
||||
},
|
||||
'cookie': {
|
||||
# 'expires_secends': 1*60
|
||||
'expires_days': 1,
|
||||
'max_age': 100
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
super(Application,self).__init__(handlers,**settings) #用super方法将父类的init方法重新执行一遍,然后将handlers和settings传进去,完成初始化
|
||||
|
||||
|
||||
app = Application() #实例化
|
||||
|
||||
|
||||
if __name__ == '__main__': #当.py文件被直接运行时,代码块将被运行;当.py文件以模块形式被导入时,代码块不被运行。
|
||||
|
||||
# 开启 bokeh 服务
|
||||
app_spice.app_spice_begin()
|
||||
|
||||
tornado.options.parse_command_line()
|
||||
app.listen(options.port) ##如果一个与define语句中同名的设置在命令行中被给出,那么它将成为全局的options的一个属性 即 options.port 相当于define的url的port
|
||||
print("Server start on port {}".format(str(options.port))) #提示服务启动占用端口
|
||||
tornado.ioloop.IOLoop.current().start() #执行ioloop
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
import datetime
|
||||
from .database import *
|
||||
|
||||
|
||||
#用户密码匹配判断函数
|
||||
def authenticate(username,password):
|
||||
passwd_db = DB_Check_byName(username)
|
||||
if passwd_db:
|
||||
if password == passwd_db:
|
||||
return True
|
||||
return False
|
||||
|
||||
# 数据库中增加新用户
|
||||
def add_user(username,password,email=''):
|
||||
create_time=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
result = DB_Insert_User({'username':username,'password':password,'email':email,'date':create_time})
|
||||
return result
|
||||
|
||||
# USER_DATA = {
|
||||
# 'name':'user1',
|
||||
# 'password':'1234'
|
||||
# }
|
||||
|
||||
# USER_DB = [USER_DATA]
|
||||
|
||||
# def authenticate(username,password):#用户密码匹配判断函数
|
||||
# if username and password:
|
||||
# for i in USER_DB:
|
||||
# if username == i['name'] and password == i['password']: #是否与保存的一致
|
||||
# return True
|
||||
# return False
|
||||
|
||||
# def add_user(username,password):
|
||||
# USER_DB.append({'name':username,'password':password})
|
|
@ -0,0 +1,59 @@
|
|||
from .main import AuthBaseHandler
|
||||
from .account import authenticate, add_user
|
||||
|
||||
class LoginHandler(AuthBaseHandler):
|
||||
def get(self,*args,**kwargs):
|
||||
self.render('login.html')
|
||||
|
||||
def post(self,*args,**kwargs):
|
||||
username = self.get_argument('username',None)
|
||||
password = self.get_argument('password',None)
|
||||
|
||||
# check the password
|
||||
passed = authenticate(username,password)
|
||||
|
||||
if passed:
|
||||
# 保存cookie信息到redis数据库
|
||||
self.session.set('username',username) #将前面设置的cookie设置为username,保存用户登录信息
|
||||
print(self.session.get('username'))
|
||||
next_url = self.get_argument('next', '') # 获取之前页面的路由
|
||||
if next_url:
|
||||
self.redirect(next_url) #跳转主页路由
|
||||
else:
|
||||
self.redirect('/')
|
||||
else:
|
||||
self.write({'msg':'login fail'}) #不通过,有问题
|
||||
|
||||
|
||||
|
||||
class LogoutHandler(AuthBaseHandler):
|
||||
def get(self, *args, **kwargs):
|
||||
#self.session.set('username','') #将用户的cookie清除
|
||||
self.session.delete('username')
|
||||
self.redirect('/login')
|
||||
|
||||
# def post(self,*args,**kwargs):
|
||||
# self.session.delete('username')
|
||||
# self.redirect('/login')
|
||||
|
||||
class RegisterHandler(AuthBaseHandler):
|
||||
def get(self, *args, **kwargs):
|
||||
print('register')
|
||||
self.render('register.html')
|
||||
|
||||
def post(self, *args, **kwargs):
|
||||
print('registerpost')
|
||||
|
||||
username = self.get_argument('username','')
|
||||
password1 = self.get_argument('password1','')
|
||||
password2 = self.get_argument('password2','')
|
||||
|
||||
if username and password1 and (password1 == password2):
|
||||
success = add_user(username,password1)
|
||||
if success:
|
||||
self.redirect('/login')
|
||||
else:
|
||||
self.write({'msg':'register fail'})
|
||||
else:
|
||||
print('register again')
|
||||
self.render('register.html')
|
|
@ -0,0 +1,58 @@
|
|||
import pymysql
|
||||
|
||||
# 数据库定义参数
|
||||
database_ip = "localhost"
|
||||
database_user = "guest"
|
||||
database_passwd = "guest1234"
|
||||
database_name = "GUESTDB"
|
||||
table_name = "user_info"
|
||||
|
||||
|
||||
# 打开数据库连接
|
||||
db = pymysql.connect( database_ip, database_user, database_passwd, database_name )
|
||||
|
||||
# 使用cursor()方法获取操作游标
|
||||
cursor = db.cursor()
|
||||
|
||||
def DB_Check_byName(user_name):
|
||||
sql = "SELECT * FROM %s WHERE user_name='%s' " % (table_name,user_name)
|
||||
try:
|
||||
# 执行SQL语句
|
||||
cursor.execute(sql)
|
||||
# 获取所有记录列表
|
||||
results = cursor.fetchall()
|
||||
passwd = results[0][2]
|
||||
return passwd
|
||||
except:
|
||||
print("There is no the user's info !")
|
||||
return False
|
||||
|
||||
def DB_Insert_User(user_info):
|
||||
user_name = user_info["username"]
|
||||
user_passwd = user_info["password"]
|
||||
user_email = user_info["email"]
|
||||
user_date = user_info["date"]
|
||||
sql = "INSERT INTO user_info(user_name,user_passwd,user_email,user_register_date) VALUES('%s', '%s', '%s', '%s' )"% (user_name, user_passwd, user_email, user_date)
|
||||
try:
|
||||
# 执行sql语句
|
||||
cursor.execute(sql)
|
||||
# 执行sql语句
|
||||
db.commit()
|
||||
print("Insert user_info successfully!")
|
||||
return True
|
||||
except:
|
||||
# 发生错误时回滚
|
||||
db.rollback()
|
||||
print("Insert user_info error!")
|
||||
return False
|
||||
|
||||
|
||||
# if __name__ == "__main__":
|
||||
# res = authenticate('user5','1234')
|
||||
# print("authenticate result: ",res)
|
||||
# for i in range(10):
|
||||
# s = str(i)
|
||||
# res = add_user('user'+s,'1234','user'+s+'@qq.com')
|
||||
# print("add user", s ," res: ",res)
|
||||
# res = authenticate('user5','1234')
|
||||
# print("authenticate result: ",res)
|
|
@ -0,0 +1,30 @@
|
|||
import tornado.web
|
||||
from pycket.session import SessionMixin
|
||||
from bokeh.embed import server_document
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
env = Environment(loader=FileSystemLoader('template'))
|
||||
|
||||
class AuthBaseHandler(tornado.web.RequestHandler,SessionMixin):
|
||||
def get_current_user(self): #重写get_current_user()方法
|
||||
return self.session.get('username',None) #session是一种会话状态,跟数据库的session可能不一样
|
||||
|
||||
#添加装饰器,装饰需要验证的请求
|
||||
class IndexHandler(AuthBaseHandler):
|
||||
|
||||
@tornado.web.authenticated #@tornado.web.authenticated装饰器包裹get方法时,表示这个方法只有在用户合法时才会调用,authenticated装饰器会调用get_current_user()方法获取current_user的值,若值为False,则重定向到登录url装饰器判断有没有登录,如果没有则跳转到配置的路由下去,但是要在app.py里面设置login_url
|
||||
def get(self,*args,**kwargs):
|
||||
user = self.get_current_user()
|
||||
self.render('index.html',user=user)
|
||||
|
||||
|
||||
class Spice_Xyce_Handler(AuthBaseHandler):
|
||||
|
||||
@tornado.web.authenticated
|
||||
def get(self,*args,**kwargs):
|
||||
template = env.get_template('spice.html')
|
||||
script = server_document('http://localhost:5006/bkapp')
|
||||
self.write(template.render(script=script))
|
||||
|
||||
# script = server_document('http://localhost:5006/bkapp')
|
||||
# self.render('spice.html',script=script)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,54 @@
|
|||
|
||||
# 切换 simulation source
|
||||
# from .sim_xyce import *
|
||||
from .sim_ngspice import *
|
||||
|
||||
|
||||
from bokeh.plotting import figure
|
||||
from bokeh import events
|
||||
from bokeh.server.server import Server
|
||||
from bokeh.themes import Theme
|
||||
from bokeh.models import (AutocompleteInput, Button, CheckboxButtonGroup, CheckboxGroup,
|
||||
ColorPicker, Column, ColumnDataSource, DataTable, DatePicker,
|
||||
DateRangeSlider, DateSlider, Div, Dropdown, IntEditor,
|
||||
MultiSelect, NumberEditor, NumberFormatter, Panel, Paragraph,
|
||||
PreText, RadioButtonGroup, RadioGroup, RangeSlider, Row,
|
||||
Select, SelectEditor, Slider, Spinner, StringEditor,
|
||||
StringFormatter, TableColumn, Tabs, TextInput, Toggle,TextAreaInput)
|
||||
from bokeh.layouts import column, row
|
||||
from bokeh.models import CustomJS,CustomJSTransform
|
||||
|
||||
|
||||
def bkapp(doc):
|
||||
|
||||
def Callback_Button_Submit():
|
||||
circuit = str(Spice_Input.value)
|
||||
waveform = Simulation_Spice(circuit)
|
||||
if waveform != False:
|
||||
waveform_keys = Waveform_Keys(waveform)
|
||||
keys = '<p>' + str(waveform_keys) + '</p>'
|
||||
else:
|
||||
keys = '<p>Simulation Error !</p>'
|
||||
keys += '<p>'+ circuit +'</p>'
|
||||
Div_Result.text = keys
|
||||
|
||||
Spice_Input = TextAreaInput(title='SPICE',placeholder="Enter value ...",height=400, width=400,max_length=4000)
|
||||
|
||||
Button_Submit = Button(label='Submit', button_type = "success")
|
||||
Button_Submit.on_click(Callback_Button_Submit)
|
||||
|
||||
# Paragraph_Result = Paragraph(text="Waiting for the sim !")
|
||||
Div_Result = Div(text="<p>Waiting for the sim</p>")
|
||||
|
||||
layout_1 = column(Spice_Input,Button_Submit,Div_Result)
|
||||
layout_top = column(layout_1)
|
||||
doc.add_root(layout_top)
|
||||
|
||||
server = Server({'/bkapp': bkapp},allow_websocket_origin=['localhost:8000','localhost:5006'])
|
||||
|
||||
def app_spice_begin():
|
||||
server.start()
|
||||
|
||||
def app_spice_start():
|
||||
# server.io_loop.add_callback(server.show, "/")
|
||||
server.io_loop.start()
|
|
@ -0,0 +1,18 @@
|
|||
import PySpice.Logging.Logging as Logging
|
||||
logger = Logging.setup_logging()
|
||||
|
||||
from PySpice.Spice.NgSpice.Shared import NgSpiceShared
|
||||
|
||||
def Simulation_Spice(spice_str):
|
||||
ngspice = NgSpiceShared.new_instance()
|
||||
try:
|
||||
ngspice.load_circuit(spice_str)
|
||||
ngspice.run()
|
||||
plot_names = ngspice.plot_names
|
||||
return plot_names
|
||||
except:
|
||||
return False
|
||||
|
||||
def Waveform_Keys(waveforms):
|
||||
|
||||
return waveforms
|
|
@ -0,0 +1,24 @@
|
|||
from PySpice.Spice.Xyce.Server import XyceServer
|
||||
|
||||
Xyce_Path = 'D:\\Program Files\\Xyce 7.1 OPENSOURCE\\bin\\Xyce.exe'
|
||||
|
||||
spice_server = XyceServer( xyce_command = Xyce_Path )
|
||||
|
||||
def Simulation_Spice(spice_str):
|
||||
try:
|
||||
raw_file = spice_server(spice_str)
|
||||
|
||||
waveforms = raw_file.nodes()
|
||||
|
||||
return waveforms
|
||||
|
||||
except:
|
||||
return False
|
||||
|
||||
def Waveform_Keys(waveforms):
|
||||
waveform_keys = []
|
||||
for i in waveforms:
|
||||
waveform_keys.append(i.name)
|
||||
|
||||
return waveform_keys
|
||||
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,568 @@
|
|||
/*--
|
||||
Author: W3Layouts
|
||||
Author URL: http://w3layouts.com
|
||||
License: Creative Commons Attribution 3.0 Unported
|
||||
License URL: http://creativecommons.org/licenses/by/3.0/
|
||||
--*/
|
||||
|
||||
/*-- Reset-Code --*/
|
||||
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,dl,dt,dd,ol,nav ul,nav li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}
|
||||
article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {display: block;}
|
||||
ol,ul{list-style:none;margin:0px;padding:0px;}
|
||||
blockquote,q{quotes:none;}
|
||||
blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}
|
||||
table{border-collapse:collapse;border-spacing:0;}
|
||||
a{text-decoration:none;}
|
||||
.txt-rt{text-align:right;}/* text align right */
|
||||
.txt-lt{text-align:left;}/* text align left */
|
||||
.txt-center{text-align:center;}/* text align center */
|
||||
.float-rt{float:right;}/* float right */
|
||||
.float-lt{float:left;}/* float left */
|
||||
.clear{clear:both;}/* clear float */
|
||||
.pos-relative{position:relative;}/* Position Relative */
|
||||
.pos-absolute{position:absolute;}/* Position Absolute */
|
||||
.vertical-base{ vertical-align:baseline;}/* vertical align baseline */
|
||||
.vertical-top{ vertical-align:top;}/* vertical align top */
|
||||
nav.vertical ul li{ display:block;}/* vertical menu */
|
||||
nav.horizontal ul li{ display: inline-block;}/* horizontal menu */
|
||||
img{max-width:100%;}
|
||||
body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(to left, #f5f5f5 50%, #fff 50%);
|
||||
font-family: 'Raleway', sans-serif;
|
||||
}
|
||||
body a {
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
text-decoration: none;
|
||||
letter-spacing:1px;
|
||||
font-size:15px;
|
||||
font-weight:600;
|
||||
}
|
||||
body a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
body a:focus, a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
input[type="button"], input[type="submit"] {
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: 'Raleway', sans-serif;
|
||||
font-weight:600;
|
||||
letter-spacing:1px;
|
||||
|
||||
}
|
||||
.clear{
|
||||
clear:both;
|
||||
}
|
||||
p {
|
||||
margin: 0;
|
||||
color:#666;
|
||||
letter-spacing:1px;
|
||||
line-height:1.8em;
|
||||
font-size:16px;
|
||||
font-weight:400;
|
||||
}
|
||||
.row{
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
label {
|
||||
margin: 0;
|
||||
}
|
||||
a:focus, a:hover {
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
img{
|
||||
width:100%;
|
||||
}
|
||||
/*-- //Reset-Code --*/
|
||||
|
||||
.signupform {
|
||||
padding: 3em 0;
|
||||
}
|
||||
.left_grid_info h1 {
|
||||
font-size: 45px;
|
||||
margin: 1em 0em .5em 0em;
|
||||
color: #333;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
input[type="email"] {
|
||||
font-size: 15px;
|
||||
color: #333;
|
||||
text-align: left;
|
||||
letter-spacing: 1px;
|
||||
padding: 14px 10px;
|
||||
width:93%;
|
||||
display:inline-block;
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
font-family: 'Raleway', sans-serif;
|
||||
}
|
||||
input[type="username"] {
|
||||
font-size: 15px;
|
||||
color: #333;
|
||||
text-align: left;
|
||||
letter-spacing: 1px;
|
||||
padding: 14px 10px;
|
||||
width:93%;
|
||||
display:inline-block;
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
font-family: 'Raleway', sans-serif;
|
||||
}
|
||||
input[type="Password"] {
|
||||
font-size: 15px;
|
||||
color: #333;
|
||||
text-align: left;
|
||||
text-transform: capitalize;
|
||||
letter-spacing: 1px;
|
||||
padding: 14px 10px;
|
||||
width:93%;
|
||||
display:inline-block;
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
font-family: 'Raleway', sans-serif;
|
||||
}
|
||||
.input-group {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 20px;
|
||||
padding: 3px 10px;
|
||||
border: 1px solid #ddd;
|
||||
background: #fff;
|
||||
}
|
||||
.btn-block {
|
||||
background: #ff4040;
|
||||
border: none;
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
padding: 12px 40px;
|
||||
letter-spacing: 2px;
|
||||
text-transform: uppercase;
|
||||
cursor: pointer;
|
||||
}
|
||||
.w3_info h2 {
|
||||
display: inline-block;
|
||||
font-size: 26px;
|
||||
margin-bottom: 10px;
|
||||
color: #333;
|
||||
letter-spacing: 2px;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
.w3_info h4 {
|
||||
display: inline-block;
|
||||
font-size: 15px;
|
||||
padding: 8px 0px;
|
||||
color: #444;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
a.btn.btn-block.btn-social.btn-facebook {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
letter-spacing: 1px;
|
||||
font-family: 'Raleway', sans-serif;
|
||||
}
|
||||
|
||||
.w3_info {
|
||||
flex-basis: 50%;
|
||||
-webkit-flex-basis: 50%;
|
||||
box-sizing: border-box;
|
||||
padding: 3em 4em;
|
||||
/* -webkit-box-shadow: 1px 0px 15px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow: 1px 0px 15px 0px rgba(0,0,0,0.2);
|
||||
box-shadow: 1px 0px 15px 0px rgba(0,0,0,0.2); */
|
||||
}
|
||||
|
||||
|
||||
.login-check {
|
||||
position: relative;
|
||||
}
|
||||
.w3_info .login-check label{
|
||||
text-transform: capitalize;
|
||||
font-size: 13px;
|
||||
letter-spacing: 1px;
|
||||
color: #000;
|
||||
}
|
||||
.checkbox i {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0%;
|
||||
text-align: center;
|
||||
display: block;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border: 1px solid #777;
|
||||
outline: none;
|
||||
border-radius: 0px;
|
||||
-webkit-border-radius: 0px;
|
||||
-moz-border-radius: 0px;
|
||||
-o-border-radius: 0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.checkbox input:checked + i:after {
|
||||
opacity: 1;
|
||||
}
|
||||
.checkbox input + i:after {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
transition: opacity 0.1s;
|
||||
-o-transition: opacity 0.1s;
|
||||
-ms-transition: opacity 0.1s;
|
||||
-moz-transition: opacity 0.1s;
|
||||
-webkit-transition: opacity 0.1s;
|
||||
}
|
||||
.checkbox input + i:after {
|
||||
content: url(../images/tick.png);
|
||||
top: 0px;
|
||||
left: 2px;
|
||||
}
|
||||
.checkbox {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
padding-left: 25px !important;
|
||||
text-transform: capitalize;
|
||||
letter-spacing: 1px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
}
|
||||
input[type="checkbox" i] {
|
||||
display: none;
|
||||
}
|
||||
.agile_info {
|
||||
display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
|
||||
display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
|
||||
display: -ms-flexbox; /* TWEENER - IE 10 */
|
||||
display: -webkit-flex; /* NEW - Chrome */
|
||||
display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */
|
||||
}
|
||||
.left_grid_info {
|
||||
padding-right: 3em;
|
||||
}
|
||||
.w3l_form {
|
||||
padding: 0px;
|
||||
flex-basis: 50%;
|
||||
-webkit-flex-basis: 50%;
|
||||
}
|
||||
.w3_info p {
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
p.account,p.account1 {
|
||||
padding-top: 20px;
|
||||
padding-bottom: 0px;
|
||||
line-height: 1.5em;
|
||||
font-size: 13px;
|
||||
}
|
||||
p.account a,p.account1 a {
|
||||
color: #ff4040;
|
||||
font-size: 11px;
|
||||
text-decoration: underline;
|
||||
}
|
||||
p.account a:hover,p.account1 a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.w3_info label {
|
||||
margin: 0;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-weight: 500;
|
||||
color: #000;
|
||||
margin-bottom: 20px;
|
||||
font-size: 13px;
|
||||
padding-left: 0px;
|
||||
}
|
||||
h3.w3ls {
|
||||
margin: 10px 0px;
|
||||
padding-left: 60px;
|
||||
}
|
||||
h3.agileits {
|
||||
padding-left: 10px;
|
||||
}
|
||||
.container {
|
||||
width: 65%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.input-group span.fa {
|
||||
font-size: 16px;
|
||||
vertical-align: middle;
|
||||
box-sizing:border-box;
|
||||
float:left;
|
||||
text-align: center;
|
||||
width:6%;
|
||||
padding: 15px 0px;
|
||||
color: #01cd74;
|
||||
}
|
||||
h5 {
|
||||
text-align: center;
|
||||
margin: 10px 0px;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
color: #000;
|
||||
}
|
||||
.footer p {
|
||||
color: #666;
|
||||
text-align: center;
|
||||
letter-spacing: 1px;
|
||||
font-size: 15px;
|
||||
margin-top: 2em;
|
||||
}
|
||||
.footer p a {
|
||||
color: #333;
|
||||
}
|
||||
/** Responsive **/
|
||||
@media screen and (max-width: 1440px){
|
||||
.container {
|
||||
width: 70%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1366px){
|
||||
.container {
|
||||
width: 75%;
|
||||
}
|
||||
.left_grid_info h1 {
|
||||
font-size: 40px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1080px){
|
||||
.container {
|
||||
width: 80%;
|
||||
}
|
||||
.w3_info h2 {
|
||||
font-size: 24px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.left_grid_info h1 {
|
||||
font-size: 35px;
|
||||
}
|
||||
.w3_info {
|
||||
padding: 3em 3em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1024px){
|
||||
.signupform {
|
||||
padding: 1em 0;
|
||||
}
|
||||
.container {
|
||||
width: 85%;
|
||||
}
|
||||
.left_grid_info {
|
||||
padding-right: 3em;
|
||||
padding-top: 2em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 991px){
|
||||
.w3_info h2 {
|
||||
font-size: 24px;
|
||||
}
|
||||
h1 {
|
||||
font-size: 40px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 900px){
|
||||
|
||||
.container {
|
||||
width: 90%;
|
||||
}
|
||||
.left_grid_info h4 {
|
||||
font-size: 1em;
|
||||
}
|
||||
.w3_info {
|
||||
padding: 3em 2.5em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 800px){
|
||||
.container {
|
||||
width: 95%;
|
||||
}
|
||||
input[type="text"],input[type="username"],input[type="password"] {
|
||||
font-size: 14px;
|
||||
}
|
||||
.input-group span.fa {
|
||||
font-size: 16px;
|
||||
padding: 13px 0px;
|
||||
}
|
||||
.w3_info h2 {
|
||||
font-size: 23px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 768px){
|
||||
.container {
|
||||
width: 95%;
|
||||
}
|
||||
.w3_info h2 {
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.left_grid_info h1 {
|
||||
font-size: 30px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.left_grid_info {
|
||||
padding-right: 2em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 736px){
|
||||
.left_grid_info h3 {
|
||||
font-size: 1.7em;
|
||||
}
|
||||
.w3_info h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
.w3_info {
|
||||
padding: 3em 2em;
|
||||
}
|
||||
.footer p {
|
||||
font-size: 14px;
|
||||
}
|
||||
.w3_info h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
.footer p {
|
||||
margin-top: 0em;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 684px){
|
||||
.w3_info h2 {
|
||||
font-size: 20px;
|
||||
letter-spacing: 0px;
|
||||
}
|
||||
.left_grid_info h1 {
|
||||
font-size: 26px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 667px){
|
||||
.container {
|
||||
width: 80%;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 640px){
|
||||
h1 {
|
||||
font-size: 37px;
|
||||
}
|
||||
.agile_info {
|
||||
flex-direction: column;
|
||||
}
|
||||
body {
|
||||
background: #FFF;
|
||||
}
|
||||
.left_grid_info {
|
||||
padding-right: 0em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 480px){
|
||||
.w3l_form {
|
||||
padding: 0em;
|
||||
}
|
||||
h1 {
|
||||
font-size: 34px;
|
||||
}
|
||||
.w3_info {
|
||||
padding: 3em 1em;
|
||||
}
|
||||
.footer {
|
||||
margin: 0 1em;
|
||||
}
|
||||
.left_grid_info h1 {
|
||||
margin: 0em 0em .5em 0em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 414px){
|
||||
.w3_info {
|
||||
padding: 2em;
|
||||
}
|
||||
h1 {
|
||||
font-size: 32px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.left_grid_info p {
|
||||
font-size: 14px;
|
||||
}
|
||||
.container {
|
||||
width: 90%;
|
||||
}
|
||||
.left_grid_info {
|
||||
padding-top: 1em;
|
||||
}
|
||||
.w3_info p {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 384px){
|
||||
.left_grid_info h4 {
|
||||
font-size: .9em;
|
||||
}
|
||||
.w3_info {
|
||||
padding: 2em 1em;
|
||||
}
|
||||
.left_grid_info h1 {
|
||||
font-size: 21px;
|
||||
letter-spacing: 0px;
|
||||
}
|
||||
.w3_info h2 {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 375px){
|
||||
.left_grid_info h3 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 320px){
|
||||
h1 {
|
||||
font-size: 25px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.w3_info h2 {
|
||||
font-size: 18px;
|
||||
letter-spacing: 0px;
|
||||
}
|
||||
.btn-danger {
|
||||
padding: 13px 12px;
|
||||
font-size: 13px;
|
||||
}
|
||||
input[type="text"], input[type="username"], input[type="password"] {
|
||||
font-size: 13px;
|
||||
}
|
||||
.footer p {
|
||||
font-size: 13px;
|
||||
}
|
||||
.footer p a{
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
/** /Responsive **/
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,879 @@
|
|||
/*--
|
||||
Author: W3layouts
|
||||
Author URL: http://w3layouts.com
|
||||
License: Creative Commons Attribution 3.0 Unported
|
||||
License URL: http://creativecommons.org/licenses/by/3.0/
|
||||
--*/
|
||||
|
||||
|
||||
/* reset */
|
||||
|
||||
html,
|
||||
body,
|
||||
div,
|
||||
span,
|
||||
applet,
|
||||
object,
|
||||
iframe,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
blockquote,
|
||||
pre,
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
big,
|
||||
cite,
|
||||
code,
|
||||
del,
|
||||
dfn,
|
||||
em,
|
||||
img,
|
||||
ins,
|
||||
kbd,
|
||||
q,
|
||||
s,
|
||||
samp,
|
||||
small,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
sup,
|
||||
tt,
|
||||
var,
|
||||
b,
|
||||
u,
|
||||
i,
|
||||
dl,
|
||||
dt,
|
||||
dd,
|
||||
ol,
|
||||
nav ul,
|
||||
nav li,
|
||||
fieldset,
|
||||
form,
|
||||
label,
|
||||
legend,
|
||||
table,
|
||||
caption,
|
||||
tbody,
|
||||
tfoot,
|
||||
thead,
|
||||
tr,
|
||||
th,
|
||||
td,
|
||||
article,
|
||||
aside,
|
||||
canvas,
|
||||
details,
|
||||
embed,
|
||||
figure,
|
||||
figcaption,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
output,
|
||||
ruby,
|
||||
section,
|
||||
summary,
|
||||
time,
|
||||
mark,
|
||||
audio,
|
||||
video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
list-style: none;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
blockquote,
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
blockquote:before,
|
||||
blockquote:after,
|
||||
q:before,
|
||||
q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
/* start editing from here */
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.txt-rt {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
/* text align right */
|
||||
|
||||
.txt-lt {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
|
||||
/* text align left */
|
||||
|
||||
.txt-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
/* text align center */
|
||||
|
||||
.float-rt {
|
||||
float: right;
|
||||
}
|
||||
|
||||
|
||||
/* float right */
|
||||
|
||||
.float-lt {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
/* float left */
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
/* clear float */
|
||||
|
||||
.pos-relative {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
||||
/* Position Relative */
|
||||
|
||||
.pos-absolute {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
/* Position Absolute */
|
||||
|
||||
.vertical-base {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
|
||||
/* vertical align baseline */
|
||||
|
||||
.vertical-top {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
|
||||
/* vertical align top */
|
||||
|
||||
nav.vertical ul li {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
||||
/* vertical menu */
|
||||
|
||||
nav.horizontal ul li {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
|
||||
/* horizontal menu */
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
|
||||
/*end reset*/
|
||||
|
||||
html,
|
||||
body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
}
|
||||
|
||||
body a {
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
body a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
body a:focus,
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
select,
|
||||
input[type="email"],
|
||||
input[type="text"],
|
||||
input[type=password],
|
||||
input[type="button"],
|
||||
input[type="submit"],
|
||||
textarea {
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
letter-spacing: 1px;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
/*-- //Reset-Code --*/
|
||||
|
||||
|
||||
/*--background --*/
|
||||
body {
|
||||
box-sizing: border-box;
|
||||
background: #ffffff;
|
||||
min-height: 100vh;
|
||||
}
|
||||
.w3layouts-two-grids {
|
||||
width: 82%;
|
||||
margin: 0px auto;
|
||||
}
|
||||
.mid-class,.main-two-w3ls {
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-justify-content: space-between;
|
||||
justify-content: space-between;
|
||||
-webkit-flex-wrap: wrap;
|
||||
flex-wrap:wrap;
|
||||
}
|
||||
h1.error {
|
||||
text-align: center;
|
||||
color: #000;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.img-right-side{
|
||||
text-align: center;
|
||||
flex-basis: 65%;
|
||||
-webkit-flex-basis: 65%;
|
||||
box-sizing: border-box;}
|
||||
|
||||
.txt-left-side {
|
||||
flex-basis: 35%;
|
||||
-webkit-flex-basis: 35%;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
background: #fff;
|
||||
box-shadow: 0px 0px 10px 1px #cccccc;
|
||||
}
|
||||
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
text-transform:uppercase;
|
||||
color: #000;
|
||||
letter-spacing: 0px;
|
||||
}
|
||||
.img-right-side p {
|
||||
font-size: 13.5px;
|
||||
color: #908c8c;
|
||||
letter-spacing: 0px;
|
||||
line-height: 24px;
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
display: flex;
|
||||
display: -webkit-flex;
|
||||
border: none;
|
||||
border-bottom: 1px solid #a5a2a2;
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
}
|
||||
.form-left-to-w3l input[type="text"],.form-left-to-w3l input[type="email"], .form-left-to-w3l input[type="password"] {
|
||||
-webkit-flex-basis: 90%;
|
||||
flex-basis: 90%;
|
||||
width: 100%;
|
||||
color: #000;
|
||||
border: none;
|
||||
border-left:1px solid #a5a2a2;
|
||||
outline: none;
|
||||
-webkit-appearance: none;
|
||||
background: transparent;
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.form-left-to-w3l:hover{border-bottom:1px solid #67e878;}
|
||||
.form-left-to-w3l:hover span{color:#67e878;}
|
||||
.form-left-to-w3l:hover.form-left-to-w3l input[type="email"],
|
||||
.form-left-to-w3l:hover.form-left-to-w3l input[type="password"],
|
||||
.form-left-to-w3l:hover.form-left-to-w3l input[type="text"]
|
||||
{ border-left:1px solid #67e878; }
|
||||
.form-left-to-w3l span {
|
||||
-webkit-flex-basis: 15%;
|
||||
flex-basis: 15%;
|
||||
border: none;
|
||||
text-align: center;
|
||||
color: #cccccc;
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
}
|
||||
button[type=submit] {
|
||||
background: #67e878;
|
||||
outline: none;
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
border: none;
|
||||
letter-spacing: 1px;
|
||||
text-transform: uppercase;
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
border-radius: 10px;
|
||||
transition: 0.5s all;
|
||||
-webkit-transition: 0.5s all;
|
||||
-o-transition: 0.5s all;
|
||||
-moz-transition: 0.5s all;
|
||||
-ms-transition: 0.5s all;
|
||||
box-shadow: 0px 0px 8px 0px #60f574;
|
||||
}
|
||||
button[type=submit]:hover,a.for:hover,.w3layouts_more-buttn a:hover{opacity:0.8;}
|
||||
::-webkit-input-placeholder { /* Chrome/Opera/Safari */
|
||||
color:#b7b6b6;
|
||||
}
|
||||
::-moz-placeholder { /* Firefox 19+ */
|
||||
color:#b7b6b6;
|
||||
}
|
||||
:-ms-input-placeholder { /* IE 10+ */
|
||||
color:#b7b6b6;
|
||||
}
|
||||
:-moz-placeholder { /* Firefox 18- */
|
||||
color:#b7b6b6;
|
||||
}
|
||||
input.checked {
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
left:0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.left-side-forget {
|
||||
position: relative;
|
||||
}
|
||||
.remenber-me, a.for {
|
||||
color: #757272;
|
||||
letter-spacing: 0px;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
.remenber-me {
|
||||
margin-left: 31px;
|
||||
}
|
||||
.left-side-forget, .right-side-forget {
|
||||
flex-basis: 50%;
|
||||
-webkit-flex-basis: 50%;
|
||||
text-align: left;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.w3layouts_more-buttn h3 {
|
||||
color: #a0a0a0;
|
||||
letter-spacing: 0px;
|
||||
font-weight: 800;
|
||||
}
|
||||
.w3layouts_more-buttn a {
|
||||
font-size: 13px;
|
||||
color: #e80000;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
margin-left: 10px;
|
||||
text-transform: capitalize;
|
||||
display: inline-block;
|
||||
letter-spacing: 0px;
|
||||
outline: none;
|
||||
}
|
||||
.copyrigh-wthree {
|
||||
text-align: center;
|
||||
}
|
||||
.copyrigh-wthree p {
|
||||
color: #000;
|
||||
}
|
||||
.copyrigh-wthree p a {
|
||||
color:#60baaf;
|
||||
font-size: 14px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
/*--responsive--*/
|
||||
@media(max-width:1920px){
|
||||
h1.error {
|
||||
padding-top: 65px;
|
||||
margin-bottom: 50px;
|
||||
font-size: 55px;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
font-size: 25px;
|
||||
margin-bottom: 37px;
|
||||
}
|
||||
.remenber-me, a.for {
|
||||
font-size: 13px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 5.5em 5em 3.5em;
|
||||
}
|
||||
.form-left-to-w3l input[type="text"], .form-left-to-w3l input[type="email"], .form-left-to-w3l input[type="password"] {
|
||||
font-size: 16px;
|
||||
padding-left: 25px;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 36px;
|
||||
padding-bottom: 17px;
|
||||
}
|
||||
.form-left-to-w3l span {
|
||||
font-size: 25px;
|
||||
}
|
||||
.w3layouts_more-buttn h3 {
|
||||
font-size: 15px;
|
||||
}
|
||||
.copyrigh-wthree {
|
||||
padding: 4em 0em 4.5em;
|
||||
}
|
||||
}
|
||||
@media(max-width:1680px){
|
||||
h1.error {
|
||||
padding-top: 58px;
|
||||
margin-bottom: 47px;
|
||||
font-size: 52px;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
font-size: 23px;
|
||||
margin-bottom: 35px;
|
||||
}
|
||||
.remenber-me, a.for {
|
||||
font-size: 12px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 4.5em 4.5em 3em;
|
||||
}
|
||||
.form-left-to-w3l input[type="text"], .form-left-to-w3l input[type="email"], .form-left-to-w3l input[type="password"] {
|
||||
font-size: 15px;
|
||||
padding-left: 23px;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 35px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
.form-left-to-w3l span {
|
||||
font-size: 23px;
|
||||
}
|
||||
.w3layouts_more-buttn h3 {
|
||||
font-size: 14px;
|
||||
}
|
||||
.copyrigh-wthree {
|
||||
padding: 3.5em 0em 4.5em;
|
||||
}
|
||||
}
|
||||
@media(max-width:1600px){
|
||||
h1.error {
|
||||
padding-top: 54px;
|
||||
margin-bottom: 43px;
|
||||
letter-spacing: 3px;
|
||||
font-size: 49px;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
font-size: 22px;
|
||||
margin-bottom: 34px;
|
||||
}
|
||||
.remenber-me, a.for {
|
||||
font-size: 11px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 3.5em 4em 2.5em;
|
||||
}
|
||||
.form-left-to-w3l input[type="text"], .form-left-to-w3l input[type="email"], .form-left-to-w3l input[type="password"] {
|
||||
font-size: 14px;
|
||||
padding-left: 20px;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 33px;
|
||||
padding-bottom: 14px;
|
||||
}
|
||||
.form-left-to-w3l span {
|
||||
font-size: 21px;
|
||||
}
|
||||
.w3layouts_more-buttn h3 {
|
||||
font-size: 13px;
|
||||
}
|
||||
.copyrigh-wthree p {
|
||||
font-size: 14px;
|
||||
letter-spacing: 3px;
|
||||
}
|
||||
.copyrigh-wthree {
|
||||
padding: 3em 0em 4.5em;
|
||||
}
|
||||
button[type=submit] {
|
||||
font-size: 15px;
|
||||
padding: 19px 20px;
|
||||
margin: 53px 0px;
|
||||
}
|
||||
.right-side-forget {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
@media(max-width:1440px){
|
||||
h1.error {
|
||||
padding-top: 51px;
|
||||
margin-bottom: 41px;
|
||||
font-size: 47px;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
font-size: 21px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 3em 3.5em 2.3em;
|
||||
}
|
||||
.w3layouts-two-grids {
|
||||
width: 85%;
|
||||
}
|
||||
button[type=submit] {
|
||||
padding: 17px 20px;
|
||||
}
|
||||
}
|
||||
@media(max-width:1366px){
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 30px;
|
||||
padding-bottom: 13px;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
margin-bottom: 29px;
|
||||
}
|
||||
button[type=submit] {
|
||||
margin: 50px 0px;
|
||||
}
|
||||
}
|
||||
@media(max-width:1280px){
|
||||
h1.error {
|
||||
padding-top: 49px;
|
||||
margin-bottom: 38px;
|
||||
font-size: 43px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 2.5em 3em 2.3em;
|
||||
}
|
||||
.w3layouts-two-grids {
|
||||
width: 88%;
|
||||
}
|
||||
.form-left-to-w3l span {
|
||||
font-size: 18px;
|
||||
}
|
||||
.form-left-to-w3l input[type="text"],
|
||||
.form-left-to-w3l input[type="email"],
|
||||
.form-left-to-w3l input[type="password"] {
|
||||
|
||||
padding-left: 16px;
|
||||
}
|
||||
button[type=submit] {
|
||||
margin: 47px 0px;
|
||||
}
|
||||
.img-right-side p {
|
||||
margin-bottom: 39px;
|
||||
}
|
||||
}
|
||||
@media(max-width:1080px){
|
||||
.copyrigh-wthree p {
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 2.5em 2.5em 2em;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 26px;
|
||||
}
|
||||
.w3layouts-two-grids {
|
||||
width: 92%;
|
||||
}
|
||||
.copyrigh-wthree {
|
||||
padding: 2.5em 0em 4em;
|
||||
}
|
||||
h1.error {
|
||||
font-size: 41px;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
margin-bottom: 27px;
|
||||
}
|
||||
}
|
||||
@media(max-width:1050px){
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
font-size: 20px;
|
||||
}
|
||||
.img-right-side p {
|
||||
margin-bottom: 33px;
|
||||
}
|
||||
.remenber-me, a.for {
|
||||
font-size: 11px;
|
||||
}
|
||||
.w3layouts_more-buttn h3 {
|
||||
font-size: 12px;
|
||||
}
|
||||
.w3layouts_more-buttn a {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
@media(max-width:1024px){
|
||||
.mid-class {
|
||||
flex-direction: column;
|
||||
}
|
||||
.w3layouts-two-grids {
|
||||
width: 51%;
|
||||
}
|
||||
h1.error {
|
||||
padding-top: 47px;
|
||||
margin-bottom: 9px;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 24px;
|
||||
padding-bottom: 11px;
|
||||
}
|
||||
button[type=submit] {
|
||||
margin: 42px 0px;
|
||||
}
|
||||
}
|
||||
@media(max-width:991px){
|
||||
h1.error {
|
||||
font-size: 38px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 2.3em 2.2em 1.8em;
|
||||
}
|
||||
button[type=submit] {
|
||||
padding: 14px 20px;
|
||||
}
|
||||
}
|
||||
@media(max-width:900px){
|
||||
h1.error {
|
||||
padding-top: 45px;
|
||||
}
|
||||
.form-left-to-w3l span {
|
||||
font-size: 16px;
|
||||
}
|
||||
.form-left-to-w3l input[type="text"], .form-left-to-w3l input[type="email"], .form-left-to-w3l input[type="password"] {
|
||||
padding-left: 14px;
|
||||
}
|
||||
button[type=submit] {
|
||||
margin: 39px 0px;
|
||||
}
|
||||
}
|
||||
@media(max-width:800px){
|
||||
.w3layouts-two-grids {
|
||||
width: 58%;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 2em 2em 1.6em;
|
||||
}
|
||||
|
||||
}
|
||||
@media(max-width:768px){
|
||||
.w3layouts-two-grids {
|
||||
width: 61%;
|
||||
}
|
||||
button[type=submit] {
|
||||
font-size: 14px;
|
||||
}
|
||||
.copyrigh-wthree p {
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
}
|
||||
@media(max-width:767px){
|
||||
h1.error {
|
||||
font-size: 36px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
margin-bottom: 23px;
|
||||
}
|
||||
}
|
||||
@media(max-width:736px){
|
||||
.w3layouts-two-grids {
|
||||
width: 64%;
|
||||
}
|
||||
.img-right-side p {
|
||||
margin-bottom: 31px;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 21px;
|
||||
}
|
||||
}
|
||||
@media(max-width:667px){
|
||||
.w3layouts-two-grids {
|
||||
width: 69%;
|
||||
}
|
||||
h1.error {
|
||||
padding-top: 42px;
|
||||
}
|
||||
}
|
||||
@media(max-width:640px){
|
||||
.w3layouts-two-grids {
|
||||
width: 72%;
|
||||
}
|
||||
h1.error {
|
||||
font-size: 34px;
|
||||
}
|
||||
button[type=submit] {
|
||||
margin: 36px 0px;
|
||||
}
|
||||
}
|
||||
@media(max-width:600px){
|
||||
.w3layouts-two-grids {
|
||||
width: 78%;
|
||||
}
|
||||
button[type=submit] {
|
||||
padding: 12px 20px;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
@media(max-width:568px){
|
||||
.w3layouts-two-grids {
|
||||
width: 81%;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 1.8em 1.8em 1.4em;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
padding-bottom: 9px;
|
||||
}
|
||||
}
|
||||
@media(max-width:480px){
|
||||
h1.error {
|
||||
font-size: 30px;
|
||||
padding-top: 38px;
|
||||
}
|
||||
.w3layouts-two-grids {
|
||||
width: 94%;
|
||||
}
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
font-size: 19px;
|
||||
}
|
||||
}
|
||||
@media(max-width:440px){
|
||||
h1.error {
|
||||
font-size: 27px;
|
||||
padding-top: 35px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.copyrigh-wthree p a {
|
||||
line-height: 35px;
|
||||
}
|
||||
}
|
||||
@media(max-width:414px){
|
||||
button[type=submit] {
|
||||
margin: 29px 0px;
|
||||
}
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 21px;
|
||||
}
|
||||
}
|
||||
@media(max-width:384px){
|
||||
h1.error {
|
||||
font-size: 24px;
|
||||
}
|
||||
.img-right-side, .txt-left-side {
|
||||
padding: 1.5em 1.5em 1.4em;
|
||||
}
|
||||
}
|
||||
@media(max-width:375px){
|
||||
.form-left-to-w3l {
|
||||
margin: 0px 0px 19px;
|
||||
padding-bottom: 7px;
|
||||
}
|
||||
h1.error {
|
||||
font-size: 22px;
|
||||
}
|
||||
}
|
||||
@media(max-width:320px){
|
||||
.img-right-side h3, .txt-left-side h2 {
|
||||
font-size: 17px;
|
||||
}
|
||||
h1.error {
|
||||
letter-spacing: 0px;
|
||||
font-size: 21px;
|
||||
}
|
||||
.form-left-to-w3l input[type="text"], .form-left-to-w3l input[type="email"], .form-left-to-w3l input[type="password"] {
|
||||
font-size: 13px;
|
||||
|
||||
}
|
||||
/*--//responsive--*/
|
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 63 KiB |
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Hello, World !</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>我的第一个标题</h1>
|
||||
<p>我的第一个段落。</p>
|
||||
<p>当前用户 {{user}} </p>
|
||||
<form action="/spice" method="get">
|
||||
<div><input type="submit" value="spice"></div>
|
||||
</form>
|
||||
<form action="/logout" method="get">
|
||||
<div><input type="submit" value="退出"></div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,83 @@
|
|||
<!--
|
||||
Author: W3layouts
|
||||
Author URL: http://w3layouts.com
|
||||
License: Creative Commons Attribution 3.0 Unported
|
||||
License URL: http://creativecommons.org/licenses/by/3.0/
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Business Login Form Responsive Widget Template :: w3layouts</title>
|
||||
<!-- Meta-Tags -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
<meta name="keywords" content="Business Login Form a Responsive Web Template, Bootstrap Web Templates, Flat Web Templates, Android Compatible Web Template, Smartphone Compatible Web Template, Free Webdesigns for Nokia, Samsung, LG, Sony Ericsson, Motorola Web Design">
|
||||
<script>
|
||||
addEventListener("load", function () {
|
||||
setTimeout(hideURLbar, 0);
|
||||
}, false);
|
||||
|
||||
function hideURLbar() {
|
||||
window.scrollTo(0, 1);
|
||||
}
|
||||
</script>
|
||||
<!-- //Meta-Tags -->
|
||||
|
||||
<!-- css files -->
|
||||
<link href="static/login/css/font-awesome.min.css" rel="stylesheet" type="text/css" media="all">
|
||||
<link href="static/login/css/style.css" rel="stylesheet" type="text/css" media="all"/>
|
||||
<!-- //css files -->
|
||||
|
||||
<!-- google fonts -->
|
||||
<link href="//fonts.googleapis.com/css?family=Raleway:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
|
||||
<!-- //google fonts -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="signupform">
|
||||
<div class="container">
|
||||
<!-- main content -->
|
||||
<div class="agile_info">
|
||||
<div class="w3l_form">
|
||||
<div class="left_grid_info">
|
||||
<h1>Manage Your Business Account</h1>
|
||||
<p>Donec dictum nisl nec mi lacinia, sed maximus tellus eleifend. Proin molestie cursus sapien ac eleifend.</p>
|
||||
<img src="static/login/images/image_login_1.jpg" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="w3_info">
|
||||
<h2>Login to your Account</h2>
|
||||
<p>Enter your details to login.</p>
|
||||
<form action="/login" method="post">
|
||||
<label>User Name</label>
|
||||
<div class="input-group">
|
||||
<span class="fa fa-user" aria-hidden="true"></span>
|
||||
<input type="username" placeholder="User Name" name="username" required="">
|
||||
</div>
|
||||
<label>Password</label>
|
||||
<div class="input-group">
|
||||
<span class="fa fa-lock" aria-hidden="true"></span>
|
||||
<input type="Password" placeholder="Enter Password" name="password" required="">
|
||||
</div>
|
||||
<!--
|
||||
<div class="login-check">
|
||||
<label class="checkbox"><input type="checkbox" name="checkbox" checked=""><i> </i> Remember me</label>
|
||||
</div>-->
|
||||
<button class="btn btn-danger btn-block" type="submit">Login</button >
|
||||
</form>
|
||||
<!--<p class="account">By clicking login, you agree to our <a href="#">Terms & Conditions!</a></p>-->
|
||||
<p class="account1">Dont have an account? <a href="register">Register here</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //main content -->
|
||||
</div>
|
||||
<!-- footer -->
|
||||
<div class="footer">
|
||||
<p>© 2019 Business login form. All Rights Reserved | Design by <a href="https://w3layouts.com/" target="blank">W3layouts</a></p>
|
||||
</div>
|
||||
<!-- footer -->
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,112 @@
|
|||
|
||||
<!--A Design by W3layouts
|
||||
Author: W3layout
|
||||
Author URL: http://w3layouts.com
|
||||
License: Creative Commons Attribution 3.0 Unported
|
||||
License URL: http://creativecommons.org/licenses/by/3.0/
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>Gadget Sign Up Form a Flat Responsive Widget Template :: w3layouts </title>
|
||||
<!-- Meta tags -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="keywords" content="Gadget Sign Up Form Responsive Widget, Audio and Video players, Login Form Web Template, Flat Pricing Tables, Flat Drop-Downs, Sign-Up Web Templates, Flat Web Templates, Login Sign-up Responsive Web Template, Smartphone Compatible Web Template, Free Web Designs for Nokia, Samsung, LG, Sony Ericsson, Motorola Web Design"
|
||||
/>
|
||||
<script>
|
||||
addEventListener("load", function () { setTimeout(hideURLbar, 0); }, false); function hideURLbar() { window.scrollTo(0, 1); }
|
||||
</script>
|
||||
<!-- Meta tags -->
|
||||
<!-- font-awesome icons -->
|
||||
<link href="static/register/css/font-awesome.min.css" rel="stylesheet">
|
||||
<!-- //font-awesome icons -->
|
||||
<!--stylesheets-->
|
||||
<link href="static/register/css/style.css" rel='stylesheet' type='text/css' media="all">
|
||||
<!--//style sheet end here-->
|
||||
<link href="//fonts.googleapis.com/css?family=Montserrat:300,400,500,600" rel="stylesheet">
|
||||
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,600,700" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<h1 class="error">Gadget Sign Up Form</h1>
|
||||
<!---728x90--->
|
||||
<div class="w3layouts-two-grids">
|
||||
<!---728x90--->
|
||||
<div class="mid-class">
|
||||
<div class="img-right-side">
|
||||
<h3>Manage Your Gadgets Account</h3>
|
||||
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget Lorem ipsum dolor sit
|
||||
amet, consectetuer adipiscing elit. Aenean commodo ligula ege</p>
|
||||
<img src="static/register/images/image_register_1.png" class="img-fluid" alt="">
|
||||
</div>
|
||||
<div class="txt-left-side">
|
||||
<h2> Sign Up Here </h2>
|
||||
<form action="#" method="post">
|
||||
<div class="form-left-to-w3l">
|
||||
<span class="fa fa-user-o" aria-hidden="true"></span>
|
||||
<input type="text" name="username" placeholder=" Name" required="">
|
||||
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<!--
|
||||
<div class="form-left-to-w3l">
|
||||
<span class="fa fa-phone" aria-hidden="true"></span>
|
||||
<input type="text" name="phone" placeholder="Phone" required="">
|
||||
|
||||
<div class="clear"></div>
|
||||
</div>-->
|
||||
<div class="form-left-to-w3l">
|
||||
<span class="fa fa-envelope-o" aria-hidden="true"></span>
|
||||
<input type="email" name="email" placeholder="Email" required="">
|
||||
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="form-left-to-w3l ">
|
||||
|
||||
<span class="fa fa-lock" aria-hidden="true"></span>
|
||||
<input type="password" name="password1" placeholder="Password" required="">
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="form-left-to-w3l ">
|
||||
|
||||
<span class="fa fa-lock" aria-hidden="true"></span>
|
||||
<input type="password" name="password2" placeholder="Password confirms" required="">
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<!--
|
||||
<div class="main-two-w3ls">
|
||||
<div class="left-side-forget">
|
||||
<input type="checkbox" class="checked">
|
||||
<span class="remenber-me">Remember me </span>
|
||||
</div>
|
||||
<div class="right-side-forget">
|
||||
<a href="#" class="for">Forgot password...?</a>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
<div class="btnn">
|
||||
<button type="submit">Sign Up </button>
|
||||
</div>
|
||||
</form>
|
||||
<div class="w3layouts_more-buttn">
|
||||
<h3>Already have an account ?
|
||||
<a href="/login">Login Here
|
||||
</a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!---728x90--->
|
||||
<footer class="copyrigh-wthree">
|
||||
<p>
|
||||
© 2019 Gadget Sign Up Form. All Rights Reserved | Design by
|
||||
<a href="http://www.W3Layouts.com" target="_blank">W3Layouts</a>
|
||||
</p>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Embedding a Bokeh Server With </title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div>
|
||||
This Bokeh app below served by a Bokeh server that has been embedded
|
||||
in another web app framework. For more information see the section
|
||||
<a target="_blank" href="https://docs.bokeh.org/en/latest/docs/user_guide/server.html#embedding-bokeh-server-as-a-library">Embedding Bokeh Server as a Library</a>
|
||||
in the User's Guide.
|
||||
</div>
|
||||
<div>
|
||||
{{ script|safe }}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue