diff --git a/Materials/Arduino/uno.pdf b/Materials/Arduino/uno.pdf
new file mode 100644
index 0000000..c043368
Binary files /dev/null and b/Materials/Arduino/uno.pdf differ
diff --git "a/Materials/Deploy/ubuntu14.04+apache2.4+python2.7.6+flask+mod_wsgi\351\203\250\347\275\262flask\345\272\224\347\224\250.pdf" "b/Materials/Deploy/ubuntu14.04+apache2.4+python2.7.6+flask+mod_wsgi\351\203\250\347\275\262flask\345\272\224\347\224\250.pdf"
new file mode 100644
index 0000000..44a2702
Binary files /dev/null and "b/Materials/Deploy/ubuntu14.04+apache2.4+python2.7.6+flask+mod_wsgi\351\203\250\347\275\262flask\345\272\224\347\224\250.pdf" differ
diff --git "a/Materials/L298N/L298\344\270\255\346\226\207\350\265\204\346\226\231.pdf" "b/Materials/L298N/L298\344\270\255\346\226\207\350\265\204\346\226\231.pdf"
new file mode 100644
index 0000000..a3f8f1b
Binary files /dev/null and "b/Materials/L298N/L298\344\270\255\346\226\207\350\265\204\346\226\231.pdf" differ
diff --git "a/Materials/PCA9685/PCA9685 16\350\267\25712\344\275\215pwm\344\277\241\345\217\267\345\217\221\347\224\237\345\231\250 - nicekwell\347\232\204\344\270\223\346\240\217 - CSDN\345\215\232\345\256\242.pdf" "b/Materials/PCA9685/PCA9685 16\350\267\25712\344\275\215pwm\344\277\241\345\217\267\345\217\221\347\224\237\345\231\250 - nicekwell\347\232\204\344\270\223\346\240\217 - CSDN\345\215\232\345\256\242.pdf"
new file mode 100644
index 0000000..46b9252
Binary files /dev/null and "b/Materials/PCA9685/PCA9685 16\350\267\25712\344\275\215pwm\344\277\241\345\217\267\345\217\221\347\224\237\345\231\250 - nicekwell\347\232\204\344\270\223\346\240\217 - CSDN\345\215\232\345\256\242.pdf" differ
diff --git a/Materials/PCA9685/PCA9685servo.pdf b/Materials/PCA9685/PCA9685servo.pdf
new file mode 100644
index 0000000..058ca37
Binary files /dev/null and b/Materials/PCA9685/PCA9685servo.pdf differ
diff --git a/Materials/RaspberiPi-2B/Raspberry-Pi-v2-Mod-B-Pinout.pdf b/Materials/RaspberiPi-2B/Raspberry-Pi-v2-Mod-B-Pinout.pdf
new file mode 100644
index 0000000..90d96cf
Binary files /dev/null and b/Materials/RaspberiPi-2B/Raspberry-Pi-v2-Mod-B-Pinout.pdf differ
diff --git a/Materials/RaspberiPi-2B/raspberrypi_top.jpg b/Materials/RaspberiPi-2B/raspberrypi_top.jpg
new file mode 100644
index 0000000..f8263fd
Binary files /dev/null and b/Materials/RaspberiPi-2B/raspberrypi_top.jpg differ
diff --git a/README.md b/README.md
index afb6dde..c27eacc 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,38 @@
-# raspberrypirobot
-Date: 2017.8.11
-A RaspberryPi robot website supported by flask
-It has multi functions, feel free to explore.
-A repository for raspberrypi robot source codes
-Still under developing
-Visit KarachiWarship for more details.
+# RaspberryPi Robot #
+## Date: 2017.8.16
##
+###
+A RaspberryPi robot web terminal programmed with flask and some tools that helps to set up a complete robot.
+It has multiple functions, can act as the homeautomation center.
+It is still under developing
+###
+
+### login ###
+
+
+### index ###
+
+
+### patrol ###
+
+
+### sensor graph ###
+
+
+### home automation ###
+
+
+### 404 ###
+
+
+### 403 ###
+
+
+Visit [KarachiWarship](http://www.karachiwarship.top) for more details.
+
+
+# Tools #
+* [Fritzing](http://fritzing.org)
+* [xmind](http://www.xmind.net/)
+* [Arduino IDE](http://arduino.cc/en/Main/Software)
+* [Pycharm]()
+* [VSCode]()
\ No newline at end of file
diff --git a/How to timeout expire a Flask session.py b/Web-Terminal/How to timeout expire a Flask session.py
similarity index 100%
rename from How to timeout expire a Flask session.py
rename to Web-Terminal/How to timeout expire a Flask session.py
diff --git a/Modules/__init__.py b/Web-Terminal/Modules/__init__.py
similarity index 100%
rename from Modules/__init__.py
rename to Web-Terminal/Modules/__init__.py
diff --git a/Web-Terminal/Modules/__init__.pyc b/Web-Terminal/Modules/__init__.pyc
new file mode 100644
index 0000000..358f5ed
Binary files /dev/null and b/Web-Terminal/Modules/__init__.pyc differ
diff --git a/Modules/driver.py b/Web-Terminal/Modules/driver.py
similarity index 100%
rename from Modules/driver.py
rename to Web-Terminal/Modules/driver.py
diff --git a/Web-Terminal/Modules/driver.pyc b/Web-Terminal/Modules/driver.pyc
new file mode 100644
index 0000000..5035bb1
Binary files /dev/null and b/Web-Terminal/Modules/driver.pyc differ
diff --git a/Web-Terminal/Modules/gpiostat.py b/Web-Terminal/Modules/gpiostat.py
new file mode 100644
index 0000000..c6b39fb
--- /dev/null
+++ b/Web-Terminal/Modules/gpiostat.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+Judge gpio status
+"""
+
+import RPi.GPIO as GPIO
+import time
+
+def gpio_status(GPIO_PIN):
+ GPIO.setmode(GPIO.BCM)
+ GPIO.setup(GPIO_PIN, GPIO.IN)
+ if(GPIO.input(GPIO_PIN) == 1):
+ return "on"
+ else:
+ return "off"
+ GPIO.cleanup()
+
+if __name__ == '__main__':
+ GPIO_PIN = 12
+ print gpio_status(GPIO_PIN)
\ No newline at end of file
diff --git a/Web-Terminal/Modules/gpiostat.pyc b/Web-Terminal/Modules/gpiostat.pyc
new file mode 100644
index 0000000..c304391
Binary files /dev/null and b/Web-Terminal/Modules/gpiostat.pyc differ
diff --git a/Modules/ht.py b/Web-Terminal/Modules/ht.py
similarity index 100%
rename from Modules/ht.py
rename to Web-Terminal/Modules/ht.py
diff --git a/Modules/htdataio.py b/Web-Terminal/Modules/htdataio.py
similarity index 100%
rename from Modules/htdataio.py
rename to Web-Terminal/Modules/htdataio.py
diff --git a/Modules/infrare.py b/Web-Terminal/Modules/infrare.py
similarity index 100%
rename from Modules/infrare.py
rename to Web-Terminal/Modules/infrare.py
diff --git a/Modules/mailman.py b/Web-Terminal/Modules/mailman.py
similarity index 100%
rename from Modules/mailman.py
rename to Web-Terminal/Modules/mailman.py
diff --git a/Modules/servo.py b/Web-Terminal/Modules/servo.py
similarity index 100%
rename from Modules/servo.py
rename to Web-Terminal/Modules/servo.py
diff --git a/Modules/ultrasonic.py b/Web-Terminal/Modules/ultrasonic.py
similarity index 100%
rename from Modules/ultrasonic.py
rename to Web-Terminal/Modules/ultrasonic.py
diff --git a/Web-Terminal/README.md b/Web-Terminal/README.md
new file mode 100644
index 0000000..36b67ac
--- /dev/null
+++ b/Web-Terminal/README.md
@@ -0,0 +1,29 @@
+# raspberrypirobot
+Date: 2017.8.11
+A RaspberryPi robot website supported by flask
+It has multi functions, feel free to explore.
+A repository for raspberrypi robot source codes
+Still under developing
+
+
login
+
+
+index
+
+
+patrol
+
+
+sensor graph
+
+
+homeauto
+
+
+404
+
+
+403
+
+
+Visit KarachiWarship for more details.
diff --git a/Web-Terminal/TASK b/Web-Terminal/TASK
new file mode 100644
index 0000000..4ea4727
--- /dev/null
+++ b/Web-Terminal/TASK
@@ -0,0 +1,14 @@
+#添加全局登录(finished)
+#添加amaze me slide图片展示
+#添加cmd页面链接(finished)
+#优化cmd命令结果展示(finished)
+#添加cmd命令路由(finished)
+#添加数据库温湿度数据录入和展示
+#添加管理后台,增加用户管理
+#用户邮件和自动化操作通知
+#人体感应通知
+#RESTful API
+#电量检测*
+#红外遥控操作*(空调,夜灯)
+#无线遥控操作*(插座开关)
+#蓝牙遥控操作*(电视)
diff --git a/raspberry.py b/Web-Terminal/raspberry.py
similarity index 76%
rename from raspberry.py
rename to Web-Terminal/raspberry.py
index ebc0910..a112283 100644
--- a/raspberry.py
+++ b/Web-Terminal/raspberry.py
@@ -32,7 +32,7 @@
PASSWORD='111'
))
app.config.from_envvar('FLASKR_SETTINGS', silent=True)
-app.permanent_session_lifetime = timedelta(hours=24)
+app.permanent_session_lifetime = timedelta(hours=5)
@@ -48,15 +48,15 @@ def page_not_found(error):
title = 'Error 404'
return render_template('404.html', title=title), 404
-@app.errorhandler(503)
+@app.errorhandler(500)
def server_error(error):
title = 'Error 503'
- return render_template('503.html', title=title), 503
+ return render_template('503.html', title=title), 500
#command page
@app.route('/command')
-def show_entries():
+def command():
title = 'Command'
if not session.get('logged_in'):
abort(403)
@@ -83,11 +83,11 @@ def login():
#logout page
-# @app.route('/logout')
-# def logout():
-# session.pop('logged_in', None)
-# flash('You were logged out, fucker?')
-# return redirect(url_for('login'))
+@app.route('/logout')
+def logout():
+ session.pop('logged_in', None)
+ flash('Warning: You were logged out!')
+ return redirect(url_for('login'))
@@ -95,7 +95,7 @@ def login():
#raspberrypi pages
@app.route('/index')
def index():
- session.permanent = True
+ # session.permanent = True
if not session.get('logged_in'):
abort(403)
return render_template('index.html')
@@ -137,8 +137,42 @@ def get_humidity():
def get_time():
return "['2:00', '2:05', '2:10', '2:15', '2:20', '2:25', '2:30', '2:35', '2:40', '2:45', '2:50', '2:55']"
-
-'''##########CGI drivers##########'''
+'''##########Pi Power Control##########'''
+# from Modules.gpiostat import gpio_status
+
+@app.route('/power')
+def query():
+ # querystatus
+ return "on"
+ # GPIO_PIN = 12
+ # return gpio_status(GPIO_PIN)
+
+@app.route('/power/')
+def switch(control):
+ if control == "on":
+ # switchon
+ return "on"
+ if control == "off":
+ # switchoff
+ return "off"
+
+
+'''##########Robot drivers##########'''
+
+@app.route('/driver/')
+def robot_driver(control):
+ from Modules import driver as d
+ d.init_driver()
+ if control == "forward":
+ d.forward()
+ if control == "backward":
+ d.backward()
+ if control == "stop":
+ d.stop()
+ if control == "left":
+ d.left()
+ if control == "right":
+ d.right()
'''##########Servo drivers##########'''
# @app.route('/servo/')
@@ -146,10 +180,7 @@ def get_time():
# servo.somefunc(post_value)
-'''##########Wheel drivers##########'''
-# @app.route('/wheel/')
-# def wheel_ctrl(direction):
-# driver.somefunc(direction)
+
diff --git a/Web-Terminal/raspberrypi.py b/Web-Terminal/raspberrypi.py
new file mode 100644
index 0000000..aa09ad5
--- /dev/null
+++ b/Web-Terminal/raspberrypi.py
@@ -0,0 +1,246 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+"""
+ RPi_Robot
+ ~~~~~~
+
+ A robot website application written with
+ Flask.
+
+ :copyright: (c) TEOTW by Jailman.
+ :license: Apache 2.0.
+"""
+
+#global unicode declearation
+import sys
+reload(sys)
+sys.setdefaultencoding('utf8')
+
+'''##########Import modules##########'''
+import platform
+osdist = platform.platform().split('-')[0]
+# from sqlite3 import dbapi2 as sqlite3
+from flask import Flask, request, session, g, redirect, url_for, abort, Response, \
+ render_template, flash
+from flask_login import LoginManager, login_required, login_user, UserMixin, \
+ logout_user
+from time import sleep
+from datetime import timedelta
+#import dirvers
+# from Modules import driver
+# from Modules import servo
+
+'''##########App & config setup##########'''
+# create our little application :)
+app = Flask(__name__)
+
+# Load default config and override config from an environment variable
+app.config.update(
+ SECRET_KEY='SeriouslydevelopedbyJailman',
+ USERNAME='admin1',
+ PASSWORD='111'
+)
+app.config.from_envvar('FLASKR_SETTINGS', silent=True)
+app.permanent_session_lifetime = timedelta(hours=5)
+
+# flask-login
+login_manager = LoginManager()
+login_manager.init_app(app)
+login_manager.login_view = "login"
+
+'''##########Simple user model##########'''
+class User(UserMixin):
+ def __init__(self, id):
+ self.id = id
+ self.name = "admin" + str(id)
+ self.password = "111"
+ def __repr__(self):
+ return "%d/%s/%s" % (self.id, self.name, self.password)
+#create uers
+# users = [User(id) for id in range(1, 21)]
+users = [User(1)]
+
+'''##########Login & error & command pages##########'''
+#error handler
+@app.errorhandler(403)
+def forbidden(error):
+ title = 'Error 403'
+ return render_template('403.html', title=title), 403
+
+@app.errorhandler(404)
+def page_not_found(error):
+ title = 'Error 404'
+ return render_template('404.html', title=title), 404
+
+@app.errorhandler(500)
+def server_error(error):
+ title = 'Error 503'
+ return render_template('503.html', title=title), 500
+
+#command page
+@app.route('/command', methods=['GET', 'POST'])
+@login_required
+def command():
+ from os import popen as p
+ title = 'Command'
+ if request.method == 'POST':
+ cmd = request.form['command']
+ if cmd.strip() != "":
+ try:
+ if osdist == 'Windows':
+ #windows cmd result needs to be transformed
+ result = p(cmd).read().decode('gbk').encode('utf8')
+ else:
+ result = p(cmd).read()
+ for line in result.split('\n'):
+ flash(line)
+ return render_template('command.html', title=title)
+ except:
+ flash("Execution Error!")
+ return render_template('command.html', title=title)
+ flash("Input error!")
+ return render_template('command.html', title=title)
+ else:
+ flash("Here shows the result!")
+ return render_template('command.html', title=title)
+
+
+#login page
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+ title = 'Login'
+ if request.method == 'POST':
+ username = request.form['username']
+ password = request.form['password']
+ if username != app.config['USERNAME']:
+ abort(403)
+ elif password != app.config['PASSWORD']:
+ abort(403)
+ else:
+ session['logged_in'] = True
+ id = username.split('admin')[1]
+ user = User(id)
+ login_user(user)
+ # return redirect(request.args.get("next"))
+ return redirect(url_for('index'))
+ return render_template('login.html', title=title)
+
+#logout page
+@app.route('/logout')
+@login_required
+def logout():
+ session.pop('logged_in', None)
+ logout_user()
+ flash('Warning: You were logged out!')
+ return redirect(url_for('login'))
+
+# callback to reload the user object
+@login_manager.user_loader
+def load_user(userid):
+ return User(userid)
+
+
+
+'''##########Pi Pages##########'''
+#raspberrypi pages
+@app.route('/')
+@app.route('/index')
+@login_required
+def index():
+ # return Response("Hello World!")
+ return render_template('index.html')
+
+@app.route('/Patrol_Monitor')
+@login_required
+def Patrol_Monitor():
+ return render_template('Patrol_Monitor.html')
+
+@app.route('/Sensor_Graph')
+@login_required
+def Sensor_Graph():
+ return render_template('Sensor_Graph.html')
+
+@app.route('/Home_Automation')
+@login_required
+def Home_Automation():
+ return render_template('Home_Automation.html')
+
+@app.route('/Amaze_Me')
+@login_required
+def Amaze_Me():
+ return render_template('Amaze_Me.html')
+
+'''##########Charts Demo##########'''
+@app.route('/get_temperature')
+@login_required
+def get_temperature():
+ return '[30.1, 30.1, 30.1, 30.1, 30.1, 30.1, 30.1, 30.1, 30.1, 30.1, 30.1, 30.1]'
+
+@app.route('/get_humidity')
+@login_required
+def get_humidity():
+ return '[32.3, 32.5, 32.1, 32.6, 30.8, 30.9, 31.1, 31.5, 32.1, 31.9, 31.7, 31.5]'
+
+@app.route('/get_time')
+@login_required
+def get_time():
+ return "['2:00', '2:05', '2:10', '2:15', '2:20', '2:25', '2:30', '2:35', '2:40', '2:45', '2:50', '2:55']"
+
+'''##########Pi Power Control##########'''
+# from Modules.gpiostat import gpio_status
+
+@app.route('/power')
+@login_required
+def query():
+ # querystatus
+ return "on"
+ # GPIO_PIN = 12
+ # return gpio_status(GPIO_PIN)
+
+@app.route('/power/')
+@login_required
+def switch(control):
+ if control == "on":
+ # switchon
+ return "on"
+ if control == "off":
+ # switchoff
+ return "off"
+
+
+'''##########Robot drivers##########'''
+
+@app.route('/driver/')
+@login_required
+def robot_driver(control):
+ from Modules import driver as d
+ d.init_driver()
+ if control == "forward":
+ d.forward()
+ if control == "backward":
+ d.backward()
+ if control == "stop":
+ d.stop()
+ if control == "left":
+ d.left()
+ if control == "right":
+ d.right()
+
+'''##########Servo drivers##########'''
+# @app.route('/servo/')
+# def servo_ctrl(post_value):
+# servo.somefunc(post_value)
+
+
+
+
+
+
+
+
+if __name__ == '__main__':
+ app.run(
+ debug = True,
+ host='0.0.0.0',
+ port=80
+ )
diff --git a/Web-Terminal/requirements.txt b/Web-Terminal/requirements.txt
new file mode 100644
index 0000000..3932ed1
--- /dev/null
+++ b/Web-Terminal/requirements.txt
@@ -0,0 +1,7 @@
+click==6.7
+Flask==0.12.2
+Flask-Login==0.4.0
+itsdangerous==0.24
+Jinja2==2.9.6
+MarkupSafe==1.0
+Werkzeug==0.12.2
diff --git a/screenshots/404.png b/Web-Terminal/screenshots/404.png
similarity index 100%
rename from screenshots/404.png
rename to Web-Terminal/screenshots/404.png
diff --git a/screenshots/fyou.png b/Web-Terminal/screenshots/fyou.png
similarity index 100%
rename from screenshots/fyou.png
rename to Web-Terminal/screenshots/fyou.png
diff --git a/screenshots/homeauto.png b/Web-Terminal/screenshots/homeauto.png
similarity index 100%
rename from screenshots/homeauto.png
rename to Web-Terminal/screenshots/homeauto.png
diff --git a/screenshots/index.png b/Web-Terminal/screenshots/index.png
similarity index 100%
rename from screenshots/index.png
rename to Web-Terminal/screenshots/index.png
diff --git a/screenshots/login.png b/Web-Terminal/screenshots/login.png
similarity index 100%
rename from screenshots/login.png
rename to Web-Terminal/screenshots/login.png
diff --git a/screenshots/patrol.png b/Web-Terminal/screenshots/patrol.png
similarity index 100%
rename from screenshots/patrol.png
rename to Web-Terminal/screenshots/patrol.png
diff --git a/screenshots/sensor.png b/Web-Terminal/screenshots/sensor.png
similarity index 100%
rename from screenshots/sensor.png
rename to Web-Terminal/screenshots/sensor.png
diff --git a/static/btimg/off.png b/Web-Terminal/static/btimg/off.png
similarity index 100%
rename from static/btimg/off.png
rename to Web-Terminal/static/btimg/off.png
diff --git a/static/btimg/on.png b/Web-Terminal/static/btimg/on.png
similarity index 100%
rename from static/btimg/on.png
rename to Web-Terminal/static/btimg/on.png
diff --git a/static/css/bootstrap.min.css b/Web-Terminal/static/css/bootstrap.min.css
similarity index 100%
rename from static/css/bootstrap.min.css
rename to Web-Terminal/static/css/bootstrap.min.css
diff --git a/static/css/camerabutton.css b/Web-Terminal/static/css/camerabutton.css
similarity index 100%
rename from static/css/camerabutton.css
rename to Web-Terminal/static/css/camerabutton.css
diff --git a/static/css/clock.css b/Web-Terminal/static/css/clock.css
similarity index 100%
rename from static/css/clock.css
rename to Web-Terminal/static/css/clock.css
diff --git a/Web-Terminal/static/css/flashmessages.css b/Web-Terminal/static/css/flashmessages.css
new file mode 100644
index 0000000..3eecb83
--- /dev/null
+++ b/Web-Terminal/static/css/flashmessages.css
@@ -0,0 +1,5 @@
+.flashes {
+ font-family: 'Times New Roman', Times, serif;
+ font-size: 15px;
+ margin-top: 10px;
+}
diff --git a/static/css/flexslider.css b/Web-Terminal/static/css/flexslider.css
similarity index 95%
rename from static/css/flexslider.css
rename to Web-Terminal/static/css/flexslider.css
index 5aa3669..a0da1b5 100644
--- a/static/css/flexslider.css
+++ b/Web-Terminal/static/css/flexslider.css
@@ -14,7 +14,7 @@
*********************************/
-/* .flex-container a:active,
+.flex-container a:active,
.flexslider a:active,
.flex-container a:focus,
.flexslider a:focus {
@@ -27,7 +27,7 @@
margin: 0;
padding: 0;
list-style: none;
-} */
+}
/* Icon Fonts
@@ -37,20 +37,20 @@
/* Font-face Icons */
-/* @font-face {
+@font-face {
font-family: 'flexslider-icon';
src: url('fonts/flexslider-icon.eot');
src: url('fonts/flexslider-icon.eot?#iefix') format('embedded-opentype'), url('fonts/flexslider-icon.woff') format('woff'), url('fonts/flexslider-icon.ttf') format('truetype'), url('fonts/flexslider-icon.svg#flexslider-icon') format('svg');
font-weight: normal;
font-style: normal;
-} */
+}
/* FlexSlider Necessary Styles
*********************************/
-/*
+
.flexslider {
margin: 0;
padding: 0;
@@ -59,13 +59,13 @@
.flexslider .slides>li {
display: none;
-webkit-backface-visibility: hidden;
-} */
+}
/* Hide the slides before the JS is loaded. Avoids image jumping */
-/*
+
.flexslider .slides img {
width: 100%;
display: block;
@@ -73,13 +73,13 @@
.flex-pauseplay span {
text-transform: capitalize;
-} */
+}
/* Clearfix for the .slides element */
-/* .slides:after {
+.slides:after {
content: "\0020";
display: block;
clear: both;
@@ -94,7 +94,7 @@ html[xmlns] .slides {
* html .slides {
height: 1%;
-} */
+}
/* No JavaScript Fallback */
@@ -104,16 +104,16 @@ html[xmlns] .slides {
* include js that eliminates this class on page load */
-/* .no-js .slides>li:first-child {
+.no-js .slides>li:first-child {
display: block;
-} */
+}
/* FlexSlider Default Theme
*********************************/
-/* .flexslider {
+.flexslider {
margin: 0 0 60px;
background: #fff;
border: 4px solid #fff;
@@ -147,13 +147,13 @@ html[xmlns] .slides {
.carousel li {
margin-right: 5px;
-} */
+}
/* Direction Nav */
-/* .flex-direction-nav {
+.flex-direction-nav {
*height: 0;
}
@@ -215,13 +215,13 @@ html[xmlns] .slides {
.flex-direction-nav a.flex-next:before {
content: '\f002';
-} */
+}
/* Pause/Play */
-/* .flex-pauseplay a {
+.flex-pauseplay a {
display: block;
width: 20px;
height: 20px;
@@ -248,13 +248,13 @@ html[xmlns] .slides {
.flex-pauseplay a.flex-play:before {
content: '\f003';
-} */
+}
/* Control Nav */
-/* .flex-control-nav {
+.flex-control-nav {
width: 100%;
position: absolute;
bottom: -40px;
@@ -334,7 +334,7 @@ html[xmlns] .slides {
opacity: 1;
right: 10px;
}
-} */
+}
.active {
background-color: #f55b1f;
diff --git a/static/css/font-awesome.min.css b/Web-Terminal/static/css/font-awesome.min.css
similarity index 100%
rename from static/css/font-awesome.min.css
rename to Web-Terminal/static/css/font-awesome.min.css
diff --git a/static/fonts/FontAwesome.otf b/Web-Terminal/static/css/fonts/FontAwesome.otf
similarity index 100%
rename from static/fonts/FontAwesome.otf
rename to Web-Terminal/static/css/fonts/FontAwesome.otf
diff --git a/static/fonts/flexslider-icon.eot b/Web-Terminal/static/css/fonts/flexslider-icon.eot
similarity index 100%
rename from static/fonts/flexslider-icon.eot
rename to Web-Terminal/static/css/fonts/flexslider-icon.eot
diff --git a/static/fonts/flexslider-icon.svg b/Web-Terminal/static/css/fonts/flexslider-icon.svg
similarity index 100%
rename from static/fonts/flexslider-icon.svg
rename to Web-Terminal/static/css/fonts/flexslider-icon.svg
diff --git a/static/fonts/flexslider-icon.ttf b/Web-Terminal/static/css/fonts/flexslider-icon.ttf
similarity index 100%
rename from static/fonts/flexslider-icon.ttf
rename to Web-Terminal/static/css/fonts/flexslider-icon.ttf
diff --git a/static/fonts/flexslider-icon.woff b/Web-Terminal/static/css/fonts/flexslider-icon.woff
similarity index 100%
rename from static/fonts/flexslider-icon.woff
rename to Web-Terminal/static/css/fonts/flexslider-icon.woff
diff --git a/static/fonts/fontawesome-webfont.eot b/Web-Terminal/static/css/fonts/fontawesome-webfont.eot
similarity index 100%
rename from static/fonts/fontawesome-webfont.eot
rename to Web-Terminal/static/css/fonts/fontawesome-webfont.eot
diff --git a/static/fonts/fontawesome-webfont.svg b/Web-Terminal/static/css/fonts/fontawesome-webfont.svg
similarity index 100%
rename from static/fonts/fontawesome-webfont.svg
rename to Web-Terminal/static/css/fonts/fontawesome-webfont.svg
diff --git a/static/fonts/fontawesome-webfont.ttf b/Web-Terminal/static/css/fonts/fontawesome-webfont.ttf
similarity index 100%
rename from static/fonts/fontawesome-webfont.ttf
rename to Web-Terminal/static/css/fonts/fontawesome-webfont.ttf
diff --git a/static/fonts/fontawesome-webfont.woff b/Web-Terminal/static/css/fonts/fontawesome-webfont.woff
similarity index 100%
rename from static/fonts/fontawesome-webfont.woff
rename to Web-Terminal/static/css/fonts/fontawesome-webfont.woff
diff --git a/static/fonts/glyphicons-halflings-regular.eot b/Web-Terminal/static/css/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from static/fonts/glyphicons-halflings-regular.eot
rename to Web-Terminal/static/css/fonts/glyphicons-halflings-regular.eot
diff --git a/static/fonts/glyphicons-halflings-regular.svg b/Web-Terminal/static/css/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from static/fonts/glyphicons-halflings-regular.svg
rename to Web-Terminal/static/css/fonts/glyphicons-halflings-regular.svg
diff --git a/static/fonts/glyphicons-halflings-regular.ttf b/Web-Terminal/static/css/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from static/fonts/glyphicons-halflings-regular.ttf
rename to Web-Terminal/static/css/fonts/glyphicons-halflings-regular.ttf
diff --git a/static/fonts/glyphicons-halflings-regular.woff b/Web-Terminal/static/css/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from static/fonts/glyphicons-halflings-regular.woff
rename to Web-Terminal/static/css/fonts/glyphicons-halflings-regular.woff
diff --git a/static/css/homeautomation.css b/Web-Terminal/static/css/homeautomation.css
similarity index 100%
rename from static/css/homeautomation.css
rename to Web-Terminal/static/css/homeautomation.css
diff --git a/static/css/patrol.css b/Web-Terminal/static/css/patrol.css
similarity index 100%
rename from static/css/patrol.css
rename to Web-Terminal/static/css/patrol.css
diff --git a/static/css/reset.css b/Web-Terminal/static/css/reset.css
similarity index 100%
rename from static/css/reset.css
rename to Web-Terminal/static/css/reset.css
diff --git a/static/css/sensor.css b/Web-Terminal/static/css/sensor.css
similarity index 100%
rename from static/css/sensor.css
rename to Web-Terminal/static/css/sensor.css
diff --git a/static/css/style.css b/Web-Terminal/static/css/style.css
similarity index 100%
rename from static/css/style.css
rename to Web-Terminal/static/css/style.css
diff --git a/static/css/supersized.css b/Web-Terminal/static/css/supersized.css
similarity index 100%
rename from static/css/supersized.css
rename to Web-Terminal/static/css/supersized.css
diff --git a/static/css/template_style.css b/Web-Terminal/static/css/template_style.css
similarity index 99%
rename from static/css/template_style.css
rename to Web-Terminal/static/css/template_style.css
index d782d56..7964076 100644
--- a/static/css/template_style.css
+++ b/Web-Terminal/static/css/template_style.css
@@ -186,7 +186,7 @@ article {
padding-bottom: 9px;
padding-top: 12px;
background-color: rgba(0, 0, 0, 0.5);
- font-size: 18px;
+ font-size: 20px;
}
.container {
diff --git a/Web-Terminal/static/fonts/FontAwesome.otf b/Web-Terminal/static/fonts/FontAwesome.otf
new file mode 100644
index 0000000..8b0f54e
Binary files /dev/null and b/Web-Terminal/static/fonts/FontAwesome.otf differ
diff --git a/Web-Terminal/static/fonts/flexslider-icon.eot b/Web-Terminal/static/fonts/flexslider-icon.eot
new file mode 100644
index 0000000..97c4196
Binary files /dev/null and b/Web-Terminal/static/fonts/flexslider-icon.eot differ
diff --git a/Web-Terminal/static/fonts/flexslider-icon.svg b/Web-Terminal/static/fonts/flexslider-icon.svg
new file mode 100644
index 0000000..89fd1ab
--- /dev/null
+++ b/Web-Terminal/static/fonts/flexslider-icon.svg
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/Web-Terminal/static/fonts/flexslider-icon.ttf b/Web-Terminal/static/fonts/flexslider-icon.ttf
new file mode 100644
index 0000000..0543298
Binary files /dev/null and b/Web-Terminal/static/fonts/flexslider-icon.ttf differ
diff --git a/Web-Terminal/static/fonts/flexslider-icon.woff b/Web-Terminal/static/fonts/flexslider-icon.woff
new file mode 100644
index 0000000..10c4eeb
Binary files /dev/null and b/Web-Terminal/static/fonts/flexslider-icon.woff differ
diff --git a/Web-Terminal/static/fonts/fontawesome-webfont.eot b/Web-Terminal/static/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..7c79c6a
Binary files /dev/null and b/Web-Terminal/static/fonts/fontawesome-webfont.eot differ
diff --git a/Web-Terminal/static/fonts/fontawesome-webfont.svg b/Web-Terminal/static/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..45fdf33
--- /dev/null
+++ b/Web-Terminal/static/fonts/fontawesome-webfont.svg
@@ -0,0 +1,414 @@
+
+
+
\ No newline at end of file
diff --git a/Web-Terminal/static/fonts/fontawesome-webfont.ttf b/Web-Terminal/static/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..e89738d
Binary files /dev/null and b/Web-Terminal/static/fonts/fontawesome-webfont.ttf differ
diff --git a/Web-Terminal/static/fonts/fontawesome-webfont.woff b/Web-Terminal/static/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..8c1748a
Binary files /dev/null and b/Web-Terminal/static/fonts/fontawesome-webfont.woff differ
diff --git a/Web-Terminal/static/fonts/glyphicons-halflings-regular.eot b/Web-Terminal/static/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000..87eaa43
Binary files /dev/null and b/Web-Terminal/static/fonts/glyphicons-halflings-regular.eot differ
diff --git a/Web-Terminal/static/fonts/glyphicons-halflings-regular.svg b/Web-Terminal/static/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..5fee068
--- /dev/null
+++ b/Web-Terminal/static/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,228 @@
+
+
+
\ No newline at end of file
diff --git a/Web-Terminal/static/fonts/glyphicons-halflings-regular.ttf b/Web-Terminal/static/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..be784dc
Binary files /dev/null and b/Web-Terminal/static/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/Web-Terminal/static/fonts/glyphicons-halflings-regular.woff b/Web-Terminal/static/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..2cc3e48
Binary files /dev/null and b/Web-Terminal/static/fonts/glyphicons-halflings-regular.woff differ
diff --git a/static/images/Scorpio_robot_128px_532269_easyicon.net.png b/Web-Terminal/static/images/Scorpio_robot_128px_532269_easyicon.net.png
similarity index 100%
rename from static/images/Scorpio_robot_128px_532269_easyicon.net.png
rename to Web-Terminal/static/images/Scorpio_robot_128px_532269_easyicon.net.png
diff --git a/Web-Terminal/static/images/backup/terminal_1.png b/Web-Terminal/static/images/backup/terminal_1.png
new file mode 100644
index 0000000..dba2cf9
Binary files /dev/null and b/Web-Terminal/static/images/backup/terminal_1.png differ
diff --git a/Web-Terminal/static/images/backup/terminal_2.png b/Web-Terminal/static/images/backup/terminal_2.png
new file mode 100644
index 0000000..fd01792
Binary files /dev/null and b/Web-Terminal/static/images/backup/terminal_2.png differ
diff --git a/static/images/favicon.ico b/Web-Terminal/static/images/favicon.ico
similarity index 100%
rename from static/images/favicon.ico
rename to Web-Terminal/static/images/favicon.ico
diff --git a/Web-Terminal/static/images/signout.png b/Web-Terminal/static/images/signout.png
new file mode 100644
index 0000000..bed3154
Binary files /dev/null and b/Web-Terminal/static/images/signout.png differ
diff --git a/Web-Terminal/static/images/slide_1.jpg b/Web-Terminal/static/images/slide_1.jpg
new file mode 100644
index 0000000..f36d5f2
Binary files /dev/null and b/Web-Terminal/static/images/slide_1.jpg differ
diff --git a/Web-Terminal/static/images/slide_2.jpg b/Web-Terminal/static/images/slide_2.jpg
new file mode 100644
index 0000000..0a406bf
Binary files /dev/null and b/Web-Terminal/static/images/slide_2.jpg differ
diff --git a/Web-Terminal/static/images/slide_3.jpg b/Web-Terminal/static/images/slide_3.jpg
new file mode 100644
index 0000000..a151a6a
Binary files /dev/null and b/Web-Terminal/static/images/slide_3.jpg differ
diff --git a/Web-Terminal/static/images/sliderpics/slider_1.jpg b/Web-Terminal/static/images/sliderpics/slider_1.jpg
new file mode 100644
index 0000000..f36d5f2
Binary files /dev/null and b/Web-Terminal/static/images/sliderpics/slider_1.jpg differ
diff --git a/Web-Terminal/static/images/sliderpics/slider_2.jpg b/Web-Terminal/static/images/sliderpics/slider_2.jpg
new file mode 100644
index 0000000..0a406bf
Binary files /dev/null and b/Web-Terminal/static/images/sliderpics/slider_2.jpg differ
diff --git a/Web-Terminal/static/images/sliderpics/slider_3.jpg b/Web-Terminal/static/images/sliderpics/slider_3.jpg
new file mode 100644
index 0000000..a151a6a
Binary files /dev/null and b/Web-Terminal/static/images/sliderpics/slider_3.jpg differ
diff --git a/Web-Terminal/static/images/sliderpics/timg0ZWQTLI1.jpg b/Web-Terminal/static/images/sliderpics/timg0ZWQTLI1.jpg
new file mode 100644
index 0000000..2a218ba
Binary files /dev/null and b/Web-Terminal/static/images/sliderpics/timg0ZWQTLI1.jpg differ
diff --git a/Web-Terminal/static/images/sliderpics/timg2.jpg b/Web-Terminal/static/images/sliderpics/timg2.jpg
new file mode 100644
index 0000000..12d23d7
Binary files /dev/null and b/Web-Terminal/static/images/sliderpics/timg2.jpg differ
diff --git a/Web-Terminal/static/images/sliderpics/timgDOMIP01L.jpg b/Web-Terminal/static/images/sliderpics/timgDOMIP01L.jpg
new file mode 100644
index 0000000..9dab037
Binary files /dev/null and b/Web-Terminal/static/images/sliderpics/timgDOMIP01L.jpg differ
diff --git a/static/images/templatemo_flower.jpg b/Web-Terminal/static/images/templatemo_flower.jpg
similarity index 100%
rename from static/images/templatemo_flower.jpg
rename to Web-Terminal/static/images/templatemo_flower.jpg
diff --git a/static/images/templatemo_flower2.jpg b/Web-Terminal/static/images/templatemo_flower2.jpg
similarity index 100%
rename from static/images/templatemo_flower2.jpg
rename to Web-Terminal/static/images/templatemo_flower2.jpg
diff --git a/static/images/templatemo_garden.jpg b/Web-Terminal/static/images/templatemo_garden.jpg
similarity index 100%
rename from static/images/templatemo_garden.jpg
rename to Web-Terminal/static/images/templatemo_garden.jpg
diff --git a/static/images/templatemo_juice.jpg b/Web-Terminal/static/images/templatemo_juice.jpg
similarity index 100%
rename from static/images/templatemo_juice.jpg
rename to Web-Terminal/static/images/templatemo_juice.jpg
diff --git a/static/images/templatemo_logo.png b/Web-Terminal/static/images/templatemo_logo.png
similarity index 100%
rename from static/images/templatemo_logo.png
rename to Web-Terminal/static/images/templatemo_logo.png
diff --git a/static/images/templatemo_padaut.jpg b/Web-Terminal/static/images/templatemo_padaut.jpg
similarity index 100%
rename from static/images/templatemo_padaut.jpg
rename to Web-Terminal/static/images/templatemo_padaut.jpg
diff --git a/Web-Terminal/static/images/terminal_1.png b/Web-Terminal/static/images/terminal_1.png
new file mode 100644
index 0000000..b91c634
Binary files /dev/null and b/Web-Terminal/static/images/terminal_1.png differ
diff --git a/Web-Terminal/static/images/terminal_2.png b/Web-Terminal/static/images/terminal_2.png
new file mode 100644
index 0000000..96fde16
Binary files /dev/null and b/Web-Terminal/static/images/terminal_2.png differ
diff --git a/static/img/backgrounds/1.jpg b/Web-Terminal/static/img/backgrounds/1.jpg
similarity index 100%
rename from static/img/backgrounds/1.jpg
rename to Web-Terminal/static/img/backgrounds/1.jpg
diff --git a/static/img/backgrounds/2.jpg b/Web-Terminal/static/img/backgrounds/2.jpg
similarity index 100%
rename from static/img/backgrounds/2.jpg
rename to Web-Terminal/static/img/backgrounds/2.jpg
diff --git a/static/img/backgrounds/3.jpg b/Web-Terminal/static/img/backgrounds/3.jpg
similarity index 100%
rename from static/img/backgrounds/3.jpg
rename to Web-Terminal/static/img/backgrounds/3.jpg
diff --git a/static/img/favicon.ico b/Web-Terminal/static/img/favicon.ico
similarity index 100%
rename from static/img/favicon.ico
rename to Web-Terminal/static/img/favicon.ico
diff --git a/static/img/fuckyou.png b/Web-Terminal/static/img/fuckyou.png
similarity index 100%
rename from static/img/fuckyou.png
rename to Web-Terminal/static/img/fuckyou.png
diff --git a/static/img/progress.gif b/Web-Terminal/static/img/progress.gif
similarity index 100%
rename from static/img/progress.gif
rename to Web-Terminal/static/img/progress.gif
diff --git a/static/js/ajax.js b/Web-Terminal/static/js/ajax.js
similarity index 100%
rename from static/js/ajax.js
rename to Web-Terminal/static/js/ajax.js
diff --git a/static/js/ajax.js.backup b/Web-Terminal/static/js/ajax.js.backup
similarity index 100%
rename from static/js/ajax.js.backup
rename to Web-Terminal/static/js/ajax.js.backup
diff --git a/Web-Terminal/static/js/button.js b/Web-Terminal/static/js/button.js
new file mode 100644
index 0000000..250a759
--- /dev/null
+++ b/Web-Terminal/static/js/button.js
@@ -0,0 +1,33 @@
+
+$(function() {
+ var htmlStr;
+ $.ajax({
+ url: "/power",
+ async: false,
+ success: function(htmlString) {
+ htmlStr = htmlString;
+ // $("#status").html(htmlStr);
+ if (htmlStr == 'off') {
+ $('#power').attr('src', "/static/btimg/off.png");
+ };
+ if (htmlStr == 'on') {
+ $('#power').attr('src', "/static/btimg/on.png");
+ };
+ },
+ });
+});
+
+
+function changeImage() {
+ element = document.getElementById('power');
+ if (element.src.match("on")) {
+ $.get('/power/off')
+ element.src = "/static/btimg/off.png";
+ // $("#status").html("off");
+ } else {
+ $.get('/power/on')
+ element.src = "/static/btimg/on.png";
+ // $("#status").html("on");
+ }
+}
+
diff --git a/static/js/chart.js b/Web-Terminal/static/js/chart.js
similarity index 100%
rename from static/js/chart.js
rename to Web-Terminal/static/js/chart.js
diff --git a/static/js/clock.js b/Web-Terminal/static/js/clock.js
similarity index 100%
rename from static/js/clock.js
rename to Web-Terminal/static/js/clock.js
diff --git a/static/js/gray_theme.js b/Web-Terminal/static/js/gray_theme.js
similarity index 100%
rename from static/js/gray_theme.js
rename to Web-Terminal/static/js/gray_theme.js
diff --git a/static/js/highcharts.js b/Web-Terminal/static/js/highcharts.js
similarity index 100%
rename from static/js/highcharts.js
rename to Web-Terminal/static/js/highcharts.js
diff --git a/static/js/jquery-1.8.2.min.js b/Web-Terminal/static/js/jquery-1.8.2.min.js
similarity index 100%
rename from static/js/jquery-1.8.2.min.js
rename to Web-Terminal/static/js/jquery-1.8.2.min.js
diff --git a/Web-Terminal/static/js/jquery.flexslider.js b/Web-Terminal/static/js/jquery.flexslider.js
new file mode 100644
index 0000000..eb54c64
--- /dev/null
+++ b/Web-Terminal/static/js/jquery.flexslider.js
@@ -0,0 +1,1141 @@
+/*
+ * jQuery FlexSlider v2.2.2
+ * Copyright 2012 WooThemes
+ * Contributing Author: Tyler Smith
+ */
+;
+(function ($) {
+
+ //FlexSlider: Object Instance
+ $.flexslider = function(el, options) {
+ var slider = $(el);
+
+ // making variables public
+ slider.vars = $.extend({}, $.flexslider.defaults, options);
+
+ var namespace = slider.vars.namespace,
+ msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,
+ touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,
+ // depricating this idea, as devices are being released with both of these events
+ //eventType = (touch) ? "touchend" : "click",
+ eventType = "click touchend MSPointerUp",
+ watchedEvent = "",
+ watchedEventClearTimer,
+ vertical = slider.vars.direction === "vertical",
+ reverse = slider.vars.reverse,
+ carousel = (slider.vars.itemWidth > 0),
+ fade = slider.vars.animation === "fade",
+ asNav = slider.vars.asNavFor !== "",
+ methods = {},
+ focused = true;
+
+ // Store a reference to the slider object
+ $.data(el, "flexslider", slider);
+
+ // Private slider methods
+ methods = {
+ init: function() {
+ slider.animating = false;
+ // Get current slide and make sure it is a number
+ slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 );
+ if ( isNaN( slider.currentSlide ) ) slider.currentSlide = 0;
+ slider.animatingTo = slider.currentSlide;
+ slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
+ slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));
+ slider.slides = $(slider.vars.selector, slider);
+ slider.container = $(slider.containerSelector, slider);
+ slider.count = slider.slides.length;
+ // SYNC:
+ slider.syncExists = $(slider.vars.sync).length > 0;
+ // SLIDE:
+ if (slider.vars.animation === "slide") slider.vars.animation = "swing";
+ slider.prop = (vertical) ? "top" : "marginLeft";
+ slider.args = {};
+ // SLIDESHOW:
+ slider.manualPause = false;
+ slider.stopped = false;
+ //PAUSE WHEN INVISIBLE
+ slider.started = false;
+ slider.startTimeout = null;
+ // TOUCH/USECSS:
+ slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() {
+ var obj = document.createElement('div'),
+ props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
+ for (var i in props) {
+ if ( obj.style[ props[i] ] !== undefined ) {
+ slider.pfx = props[i].replace('Perspective','').toLowerCase();
+ slider.prop = "-" + slider.pfx + "-transform";
+ return true;
+ }
+ }
+ return false;
+ }());
+ // CONTROLSCONTAINER:
+ if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);
+ // MANUAL:
+ if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);
+
+ // RANDOMIZE:
+ if (slider.vars.randomize) {
+ slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
+ slider.container.empty().append(slider.slides);
+ }
+
+ slider.doMath();
+
+ // INIT
+ slider.setup("init");
+
+ // CONTROLNAV:
+ if (slider.vars.controlNav) methods.controlNav.setup();
+
+ // DIRECTIONNAV:
+ if (slider.vars.directionNav) methods.directionNav.setup();
+
+ // KEYBOARD:
+ if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {
+ $(document).bind('keyup', function(event) {
+ var keycode = event.keyCode;
+ if (!slider.animating && (keycode === 39 || keycode === 37)) {
+ var target = (keycode === 39) ? slider.getTarget('next') :
+ (keycode === 37) ? slider.getTarget('prev') : false;
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
+ }
+ });
+ }
+ // MOUSEWHEEL:
+ if (slider.vars.mousewheel) {
+ slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
+ event.preventDefault();
+ var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
+ });
+ }
+
+ // PAUSEPLAY
+ if (slider.vars.pausePlay) methods.pausePlay.setup();
+
+ //PAUSE WHEN INVISIBLE
+ if (slider.vars.slideshow && slider.vars.pauseInvisible) methods.pauseInvisible.init();
+
+ // SLIDSESHOW
+ if (slider.vars.slideshow) {
+ if (slider.vars.pauseOnHover) {
+ slider.hover(function() {
+ if (!slider.manualPlay && !slider.manualPause) slider.pause();
+ }, function() {
+ if (!slider.manualPause && !slider.manualPlay && !slider.stopped) slider.play();
+ });
+ }
+ // initialize animation
+ //If we're visible, or we don't use PageVisibility API
+ if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) {
+ (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play();
+ }
+ }
+
+ // ASNAV:
+ if (asNav) methods.asNav.setup();
+
+ // TOUCH
+ if (touch && slider.vars.touch) methods.touch();
+
+ // FADE&&SMOOTHHEIGHT || SLIDE:
+ if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize orientationchange focus", methods.resize);
+
+ slider.find("img").attr("draggable", "false");
+
+ // API: start() Callback
+ setTimeout(function(){
+ slider.vars.start(slider);
+ }, 200);
+ },
+ asNav: {
+ setup: function() {
+ slider.asNav = true;
+ slider.animatingTo = Math.floor(slider.currentSlide/slider.move);
+ slider.currentItem = slider.currentSlide;
+ slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide");
+ if(!msGesture){
+ slider.slides.on(eventType, function(e){
+ e.preventDefault();
+ var $slide = $(this),
+ target = $slide.index();
+ var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container
+ if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {
+ slider.flexAnimate(slider.getTarget("prev"), true);
+ } else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + "active-slide")) {
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
+ slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
+ }
+ });
+ }else{
+ el._slider = slider;
+ slider.slides.each(function (){
+ var that = this;
+ that._gesture = new MSGesture();
+ that._gesture.target = that;
+ that.addEventListener("MSPointerDown", function (e){
+ e.preventDefault();
+ if(e.currentTarget._gesture)
+ e.currentTarget._gesture.addPointer(e.pointerId);
+ }, false);
+ that.addEventListener("MSGestureTap", function (e){
+ e.preventDefault();
+ var $slide = $(this),
+ target = $slide.index();
+ if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
+ slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
+ }
+ });
+ });
+ }
+ }
+ },
+ controlNav: {
+ setup: function() {
+ if (!slider.manualControls) {
+ methods.controlNav.setupPaging();
+ } else { // MANUALCONTROLS:
+ methods.controlNav.setupManual();
+ }
+ },
+ setupPaging: function() {
+ var type = (slider.vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging',
+ j = 1,
+ item,
+ slide;
+
+ slider.controlNavScaffold = $('
');
+
+ if (slider.pagingCount > 1) {
+ for (var i = 0; i < slider.pagingCount; i++) {
+ slide = slider.slides.eq(i);
+ item = (slider.vars.controlNav === "thumbnails") ? '
' : '' + j + '';
+ if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {
+ var captn = slide.attr( 'data-thumbcaption' );
+ if ( '' != captn && undefined != captn ) item += '' + captn + '';
+ }
+ slider.controlNavScaffold.append('' + item + '');
+ j++;
+ }
+ }
+
+ // CONTROLSCONTAINER:
+ (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);
+ methods.controlNav.set();
+
+ methods.controlNav.active();
+
+ slider.controlNavScaffold.delegate('a, img', eventType, function(event) {
+ event.preventDefault();
+
+ if (watchedEvent === "" || watchedEvent === event.type) {
+ var $this = $(this),
+ target = slider.controlNav.index($this);
+
+ if (!$this.hasClass(namespace + 'active')) {
+ slider.direction = (target > slider.currentSlide) ? "next" : "prev";
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
+ }
+ }
+
+ // setup flags to prevent event duplication
+ if (watchedEvent === "") {
+ watchedEvent = event.type;
+ }
+ methods.setToClearWatchedEvent();
+
+ });
+ },
+ setupManual: function() {
+ slider.controlNav = slider.manualControls;
+ methods.controlNav.active();
+
+ slider.controlNav.bind(eventType, function(event) {
+ event.preventDefault();
+
+ if (watchedEvent === "" || watchedEvent === event.type) {
+ var $this = $(this),
+ target = slider.controlNav.index($this);
+
+ if (!$this.hasClass(namespace + 'active')) {
+ (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
+ }
+ }
+
+ // setup flags to prevent event duplication
+ if (watchedEvent === "") {
+ watchedEvent = event.type;
+ }
+ methods.setToClearWatchedEvent();
+ });
+ },
+ set: function() {
+ var selector = (slider.vars.controlNav === "thumbnails") ? 'img' : 'a';
+ slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);
+ },
+ active: function() {
+ slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active");
+ },
+ update: function(action, pos) {
+ if (slider.pagingCount > 1 && action === "add") {
+ slider.controlNavScaffold.append($('' + slider.count + ''));
+ } else if (slider.pagingCount === 1) {
+ slider.controlNavScaffold.find('li').remove();
+ } else {
+ slider.controlNav.eq(pos).closest('li').remove();
+ }
+ methods.controlNav.set();
+ (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();
+ }
+ },
+ directionNav: {
+ setup: function() {
+ var directionNavScaffold = $('');
+
+ // CONTROLSCONTAINER:
+ if (slider.controlsContainer) {
+ $(slider.controlsContainer).append(directionNavScaffold);
+ slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
+ } else {
+ slider.append(directionNavScaffold);
+ slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);
+ }
+
+ methods.directionNav.update();
+
+ slider.directionNav.bind(eventType, function(event) {
+ event.preventDefault();
+ var target;
+
+ if (watchedEvent === "" || watchedEvent === event.type) {
+ target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
+ }
+
+ // setup flags to prevent event duplication
+ if (watchedEvent === "") {
+ watchedEvent = event.type;
+ }
+ methods.setToClearWatchedEvent();
+ });
+ },
+ update: function() {
+ var disabledClass = namespace + 'disabled';
+ if (slider.pagingCount === 1) {
+ slider.directionNav.addClass(disabledClass).attr('tabindex', '-1');
+ } else if (!slider.vars.animationLoop) {
+ if (slider.animatingTo === 0) {
+ slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass).attr('tabindex', '-1');
+ } else if (slider.animatingTo === slider.last) {
+ slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass).attr('tabindex', '-1');
+ } else {
+ slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
+ }
+ } else {
+ slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
+ }
+ }
+ },
+ pausePlay: {
+ setup: function() {
+ var pausePlayScaffold = $('');
+
+ // CONTROLSCONTAINER:
+ if (slider.controlsContainer) {
+ slider.controlsContainer.append(pausePlayScaffold);
+ slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);
+ } else {
+ slider.append(pausePlayScaffold);
+ slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);
+ }
+
+ methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play');
+
+ slider.pausePlay.bind(eventType, function(event) {
+ event.preventDefault();
+
+ if (watchedEvent === "" || watchedEvent === event.type) {
+ if ($(this).hasClass(namespace + 'pause')) {
+ slider.manualPause = true;
+ slider.manualPlay = false;
+ slider.pause();
+ } else {
+ slider.manualPause = false;
+ slider.manualPlay = true;
+ slider.play();
+ }
+ }
+
+ // setup flags to prevent event duplication
+ if (watchedEvent === "") {
+ watchedEvent = event.type;
+ }
+ methods.setToClearWatchedEvent();
+ });
+ },
+ update: function(state) {
+ (state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').html(slider.vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').html(slider.vars.pauseText);
+ }
+ },
+ touch: function() {
+ var startX,
+ startY,
+ offset,
+ cwidth,
+ dx,
+ startT,
+ scrolling = false,
+ localX = 0,
+ localY = 0,
+ accDx = 0;
+
+ if(!msGesture){
+ el.addEventListener('touchstart', onTouchStart, false);
+
+ function onTouchStart(e) {
+ if (slider.animating) {
+ e.preventDefault();
+ } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {
+ slider.pause();
+ // CAROUSEL:
+ cwidth = (vertical) ? slider.h : slider. w;
+ startT = Number(new Date());
+ // CAROUSEL:
+
+ // Local vars for X and Y points.
+ localX = e.touches[0].pageX;
+ localY = e.touches[0].pageY;
+
+ offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
+ (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
+ (carousel && slider.currentSlide === slider.last) ? slider.limit :
+ (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
+ (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
+ startX = (vertical) ? localY : localX;
+ startY = (vertical) ? localX : localY;
+
+ el.addEventListener('touchmove', onTouchMove, false);
+ el.addEventListener('touchend', onTouchEnd, false);
+ }
+ }
+
+ function onTouchMove(e) {
+ // Local vars for X and Y points.
+
+ localX = e.touches[0].pageX;
+ localY = e.touches[0].pageY;
+
+ dx = (vertical) ? startX - localY : startX - localX;
+ scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY));
+
+ var fxms = 500;
+
+ if ( ! scrolling || Number( new Date() ) - startT > fxms ) {
+ e.preventDefault();
+ if (!fade && slider.transitions) {
+ if (!slider.vars.animationLoop) {
+ dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
+ }
+ slider.setProps(offset + dx, "setTouch");
+ }
+ }
+ }
+
+ function onTouchEnd(e) {
+ // finish the touch by undoing the touch session
+ el.removeEventListener('touchmove', onTouchMove, false);
+
+ if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
+ var updateDx = (reverse) ? -dx : dx,
+ target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
+
+ if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
+ } else {
+ if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
+ }
+ }
+ el.removeEventListener('touchend', onTouchEnd, false);
+
+ startX = null;
+ startY = null;
+ dx = null;
+ offset = null;
+ }
+ }else{
+ el.style.msTouchAction = "none";
+ el._gesture = new MSGesture();
+ el._gesture.target = el;
+ el.addEventListener("MSPointerDown", onMSPointerDown, false);
+ el._slider = slider;
+ el.addEventListener("MSGestureChange", onMSGestureChange, false);
+ el.addEventListener("MSGestureEnd", onMSGestureEnd, false);
+
+ function onMSPointerDown(e){
+ e.stopPropagation();
+ if (slider.animating) {
+ e.preventDefault();
+ }else{
+ slider.pause();
+ el._gesture.addPointer(e.pointerId);
+ accDx = 0;
+ cwidth = (vertical) ? slider.h : slider. w;
+ startT = Number(new Date());
+ // CAROUSEL:
+
+ offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
+ (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
+ (carousel && slider.currentSlide === slider.last) ? slider.limit :
+ (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
+ (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
+ }
+ }
+
+ function onMSGestureChange(e) {
+ e.stopPropagation();
+ var slider = e.target._slider;
+ if(!slider){
+ return;
+ }
+ var transX = -e.translationX,
+ transY = -e.translationY;
+
+ //Accumulate translations.
+ accDx = accDx + ((vertical) ? transY : transX);
+ dx = accDx;
+ scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY));
+
+ if(e.detail === e.MSGESTURE_FLAG_INERTIA){
+ setImmediate(function (){
+ el._gesture.stop();
+ });
+
+ return;
+ }
+
+ if (!scrolling || Number(new Date()) - startT > 500) {
+ e.preventDefault();
+ if (!fade && slider.transitions) {
+ if (!slider.vars.animationLoop) {
+ dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1);
+ }
+ slider.setProps(offset + dx, "setTouch");
+ }
+ }
+ }
+
+ function onMSGestureEnd(e) {
+ e.stopPropagation();
+ var slider = e.target._slider;
+ if(!slider){
+ return;
+ }
+ if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
+ var updateDx = (reverse) ? -dx : dx,
+ target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
+
+ if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
+ } else {
+ if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
+ }
+ }
+
+ startX = null;
+ startY = null;
+ dx = null;
+ offset = null;
+ accDx = 0;
+ }
+ }
+ },
+ resize: function() {
+ if (!slider.animating && slider.is(':visible')) {
+ if (!carousel) slider.doMath();
+
+ if (fade) {
+ // SMOOTH HEIGHT:
+ methods.smoothHeight();
+ } else if (carousel) { //CAROUSEL:
+ slider.slides.width(slider.computedW);
+ slider.update(slider.pagingCount);
+ slider.setProps();
+ }
+ else if (vertical) { //VERTICAL:
+ slider.viewport.height(slider.h);
+ slider.setProps(slider.h, "setTotal");
+ } else {
+ // SMOOTH HEIGHT:
+ if (slider.vars.smoothHeight) methods.smoothHeight();
+ slider.newSlides.width(slider.computedW);
+ slider.setProps(slider.computedW, "setTotal");
+ }
+ }
+ },
+ smoothHeight: function(dur) {
+ if (!vertical || fade) {
+ var $obj = (fade) ? slider : slider.viewport;
+ (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());
+ }
+ },
+ sync: function(action) {
+ var $obj = $(slider.vars.sync).data("flexslider"),
+ target = slider.animatingTo;
+
+ switch (action) {
+ case "animate": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break;
+ case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;
+ case "pause": $obj.pause(); break;
+ }
+ },
+ uniqueID: function($clone) {
+ $clone.find( '[id]' ).each(function() {
+ var $this = $(this);
+ $this.attr( 'id', $this.attr( 'id' ) + '_clone' );
+ });
+ return $clone;
+ },
+ pauseInvisible: {
+ visProp: null,
+ init: function() {
+ var prefixes = ['webkit','moz','ms','o'];
+
+ if ('hidden' in document) return 'hidden';
+ for (var i = 0; i < prefixes.length; i++) {
+ if ((prefixes[i] + 'Hidden') in document)
+ methods.pauseInvisible.visProp = prefixes[i] + 'Hidden';
+ }
+ if (methods.pauseInvisible.visProp) {
+ var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
+ document.addEventListener(evtname, function() {
+ if (methods.pauseInvisible.isHidden()) {
+ if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible
+ else slider.pause(); //Or just pause
+ }
+ else {
+ if(slider.started) slider.play(); //Initiated before, just play
+ else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it
+ }
+ });
+ }
+ },
+ isHidden: function() {
+ return document[methods.pauseInvisible.visProp] || false;
+ }
+ },
+ setToClearWatchedEvent: function() {
+ clearTimeout(watchedEventClearTimer);
+ watchedEventClearTimer = setTimeout(function() {
+ watchedEvent = "";
+ }, 3000);
+ }
+ };
+
+ // public methods
+ slider.flexAnimate = function(target, pause, override, withSync, fromNav) {
+ if (!slider.vars.animationLoop && target !== slider.currentSlide) {
+ slider.direction = (target > slider.currentSlide) ? "next" : "prev";
+ }
+
+ if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev";
+
+ if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) {
+ if (asNav && withSync) {
+ var master = $(slider.vars.asNavFor).data('flexslider');
+ slider.atEnd = target === 0 || target === slider.count - 1;
+ master.flexAnimate(target, true, false, true, fromNav);
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
+ master.direction = slider.direction;
+
+ if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {
+ slider.currentItem = target;
+ slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
+ target = Math.floor(target/slider.visible);
+ } else {
+ slider.currentItem = target;
+ slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
+ return false;
+ }
+ }
+
+ slider.animating = true;
+ slider.animatingTo = target;
+
+ // SLIDESHOW:
+ if (pause) slider.pause();
+
+ // API: before() animation Callback
+ slider.vars.before(slider);
+
+ // SYNC:
+ if (slider.syncExists && !fromNav) methods.sync("animate");
+
+ // CONTROLNAV
+ if (slider.vars.controlNav) methods.controlNav.active();
+
+ // !CAROUSEL:
+ // CANDIDATE: slide active class (for add/remove slide)
+ if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide');
+
+ // INFINITE LOOP:
+ // CANDIDATE: atEnd
+ slider.atEnd = target === 0 || target === slider.last;
+
+ // DIRECTIONNAV:
+ if (slider.vars.directionNav) methods.directionNav.update();
+
+ if (target === slider.last) {
+ // API: end() of cycle Callback
+ slider.vars.end(slider);
+ // SLIDESHOW && !INFINITE LOOP:
+ if (!slider.vars.animationLoop) slider.pause();
+ }
+
+ // SLIDE:
+ if (!fade) {
+ var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,
+ margin, slideString, calcNext;
+
+ // INFINITE LOOP / REVERSE:
+ if (carousel) {
+ //margin = (slider.vars.itemWidth > slider.w) ? slider.vars.itemMargin * 2 : slider.vars.itemMargin;
+ margin = slider.vars.itemMargin;
+ calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
+ slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
+ } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== "next") {
+ slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;
+ } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== "prev") {
+ slideString = (reverse) ? 0 : (slider.count + 1) * dimension;
+ } else {
+ slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;
+ }
+ slider.setProps(slideString, "", slider.vars.animationSpeed);
+ if (slider.transitions) {
+ if (!slider.vars.animationLoop || !slider.atEnd) {
+ slider.animating = false;
+ slider.currentSlide = slider.animatingTo;
+ }
+ slider.container.unbind("webkitTransitionEnd transitionend");
+ slider.container.bind("webkitTransitionEnd transitionend", function() {
+ slider.wrapup(dimension);
+ });
+ } else {
+ slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){
+ slider.wrapup(dimension);
+ });
+ }
+ } else { // FADE:
+ if (!touch) {
+ //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing);
+ //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
+
+ slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing);
+ slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
+
+ } else {
+ slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
+ slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
+ slider.wrapup(dimension);
+ }
+ }
+ // SMOOTH HEIGHT:
+ if (slider.vars.smoothHeight) methods.smoothHeight(slider.vars.animationSpeed);
+ }
+ };
+ slider.wrapup = function(dimension) {
+ // SLIDE:
+ if (!fade && !carousel) {
+ if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) {
+ slider.setProps(dimension, "jumpEnd");
+ } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) {
+ slider.setProps(dimension, "jumpStart");
+ }
+ }
+ slider.animating = false;
+ slider.currentSlide = slider.animatingTo;
+ // API: after() animation Callback
+ slider.vars.after(slider);
+ };
+
+ // SLIDESHOW:
+ slider.animateSlides = function() {
+ if (!slider.animating && focused ) slider.flexAnimate(slider.getTarget("next"));
+ };
+ // SLIDESHOW:
+ slider.pause = function() {
+ clearInterval(slider.animatedSlides);
+ slider.animatedSlides = null;
+ slider.playing = false;
+ // PAUSEPLAY:
+ if (slider.vars.pausePlay) methods.pausePlay.update("play");
+ // SYNC:
+ if (slider.syncExists) methods.sync("pause");
+ };
+ // SLIDESHOW:
+ slider.play = function() {
+ if (slider.playing) clearInterval(slider.animatedSlides);
+ slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
+ slider.started = slider.playing = true;
+ // PAUSEPLAY:
+ if (slider.vars.pausePlay) methods.pausePlay.update("pause");
+ // SYNC:
+ if (slider.syncExists) methods.sync("play");
+ };
+ // STOP:
+ slider.stop = function () {
+ slider.pause();
+ slider.stopped = true;
+ };
+ slider.canAdvance = function(target, fromNav) {
+ // ASNAV:
+ var last = (asNav) ? slider.pagingCount - 1 : slider.last;
+ return (fromNav) ? true :
+ (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true :
+ (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false :
+ (target === slider.currentSlide && !asNav) ? false :
+ (slider.vars.animationLoop) ? true :
+ (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false :
+ (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false :
+ true;
+ };
+ slider.getTarget = function(dir) {
+ slider.direction = dir;
+ if (dir === "next") {
+ return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;
+ } else {
+ return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;
+ }
+ };
+
+ // SLIDE:
+ slider.setProps = function(pos, special, dur) {
+ var target = (function() {
+ var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo,
+ posCalc = (function() {
+ if (carousel) {
+ return (special === "setTouch") ? pos :
+ (reverse && slider.animatingTo === slider.last) ? 0 :
+ (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
+ (slider.animatingTo === slider.last) ? slider.limit : posCheck;
+ } else {
+ switch (special) {
+ case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;
+ case "setTouch": return (reverse) ? pos : pos;
+ case "jumpEnd": return (reverse) ? pos : slider.count * pos;
+ case "jumpStart": return (reverse) ? slider.count * pos : pos;
+ default: return pos;
+ }
+ }
+ }());
+
+ return (posCalc * -1) + "px";
+ }());
+
+ if (slider.transitions) {
+ target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
+ dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
+ slider.container.css("-" + slider.pfx + "-transition-duration", dur);
+ slider.container.css("transition-duration", dur);
+ }
+
+ slider.args[slider.prop] = target;
+ if (slider.transitions || dur === undefined) slider.container.css(slider.args);
+
+ slider.container.css('transform',target);
+ };
+
+ slider.setup = function(type) {
+ // SLIDE:
+ if (!fade) {
+ var sliderOffset, arr;
+
+ if (type === "init") {
+ slider.viewport = $('').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container);
+ // INFINITE LOOP:
+ slider.cloneCount = 0;
+ slider.cloneOffset = 0;
+ // REVERSE:
+ if (reverse) {
+ arr = $.makeArray(slider.slides).reverse();
+ slider.slides = $(arr);
+ slider.container.empty().append(slider.slides);
+ }
+ }
+ // INFINITE LOOP && !CAROUSEL:
+ if (slider.vars.animationLoop && !carousel) {
+ slider.cloneCount = 2;
+ slider.cloneOffset = 1;
+ // clear out old clones
+ if (type !== "init") slider.container.find('.clone').remove();
+ slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true'));
+ methods.uniqueID( slider.slides.first().clone().addClass('clone') ).appendTo( slider.container );
+ methods.uniqueID( slider.slides.last().clone().addClass('clone') ).prependTo( slider.container );
+ }
+ slider.newSlides = $(slider.vars.selector, slider);
+
+ sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;
+ // VERTICAL:
+ if (vertical && !carousel) {
+ slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
+ setTimeout(function(){
+ slider.newSlides.css({"display": "block"});
+ slider.doMath();
+ slider.viewport.height(slider.h);
+ slider.setProps(sliderOffset * slider.h, "init");
+ }, (type === "init") ? 100 : 0);
+ } else {
+ slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
+ slider.setProps(sliderOffset * slider.computedW, "init");
+ setTimeout(function(){
+ slider.doMath();
+ slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
+ // SMOOTH HEIGHT:
+ if (slider.vars.smoothHeight) methods.smoothHeight();
+ }, (type === "init") ? 100 : 0);
+ }
+ } else { // FADE:
+ slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
+ if (type === "init") {
+ if (!touch) {
+ //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);
+ slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing);
+ } else {
+ slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});
+ }
+ }
+ // SMOOTH HEIGHT:
+ if (slider.vars.smoothHeight) methods.smoothHeight();
+ }
+ // !CAROUSEL:
+ // CANDIDATE: active slide
+ if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide");
+
+ //FlexSlider: init() Callback
+ slider.vars.init(slider);
+ };
+
+ slider.doMath = function() {
+ var slide = slider.slides.first(),
+ slideMargin = slider.vars.itemMargin,
+ minItems = slider.vars.minItems,
+ maxItems = slider.vars.maxItems;
+
+ slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width();
+ slider.h = slide.height();
+ slider.boxPadding = slide.outerWidth() - slide.width();
+
+ // CAROUSEL:
+ if (carousel) {
+ slider.itemT = slider.vars.itemWidth + slideMargin;
+ slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
+ slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;
+ slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :
+ (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems :
+ (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth;
+
+ slider.visible = Math.floor(slider.w/(slider.itemW));
+ slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible;
+ slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);
+ slider.last = slider.pagingCount - 1;
+ slider.limit = (slider.pagingCount === 1) ? 0 :
+ (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;
+ } else {
+ slider.itemW = slider.w;
+ slider.pagingCount = slider.count;
+ slider.last = slider.count - 1;
+ }
+ slider.computedW = slider.itemW - slider.boxPadding;
+ };
+
+ slider.update = function(pos, action) {
+ slider.doMath();
+
+ // update currentSlide and slider.animatingTo if necessary
+ if (!carousel) {
+ if (pos < slider.currentSlide) {
+ slider.currentSlide += 1;
+ } else if (pos <= slider.currentSlide && pos !== 0) {
+ slider.currentSlide -= 1;
+ }
+ slider.animatingTo = slider.currentSlide;
+ }
+
+ // update controlNav
+ if (slider.vars.controlNav && !slider.manualControls) {
+ if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) {
+ methods.controlNav.update("add");
+ } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) {
+ if (carousel && slider.currentSlide > slider.last) {
+ slider.currentSlide -= 1;
+ slider.animatingTo -= 1;
+ }
+ methods.controlNav.update("remove", slider.last);
+ }
+ }
+ // update directionNav
+ if (slider.vars.directionNav) methods.directionNav.update();
+
+ };
+
+ slider.addSlide = function(obj, pos) {
+ var $obj = $(obj);
+
+ slider.count += 1;
+ slider.last = slider.count - 1;
+
+ // append new slide
+ if (vertical && reverse) {
+ (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);
+ } else {
+ (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);
+ }
+
+ // update currentSlide, animatingTo, controlNav, and directionNav
+ slider.update(pos, "add");
+
+ // update slider.slides
+ slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
+ // re-setup the slider to accomdate new slide
+ slider.setup();
+
+ //FlexSlider: added() Callback
+ slider.vars.added(slider);
+ };
+ slider.removeSlide = function(obj) {
+ var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;
+
+ // update count
+ slider.count -= 1;
+ slider.last = slider.count - 1;
+
+ // remove slide
+ if (isNaN(obj)) {
+ $(obj, slider.slides).remove();
+ } else {
+ (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();
+ }
+
+ // update currentSlide, animatingTo, controlNav, and directionNav
+ slider.doMath();
+ slider.update(pos, "remove");
+
+ // update slider.slides
+ slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
+ // re-setup the slider to accomdate new slide
+ slider.setup();
+
+ // FlexSlider: removed() Callback
+ slider.vars.removed(slider);
+ };
+
+ //FlexSlider: Initialize
+ methods.init();
+ };
+
+ // Ensure the slider isn't focussed if the window loses focus.
+ $( window ).blur( function ( e ) {
+ focused = false;
+ }).focus( function ( e ) {
+ focused = true;
+ });
+
+ //FlexSlider: Default Settings
+ $.flexslider.defaults = {
+ namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin
+ selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril
+ animation: "fade", //String: Select your animation type, "fade" or "slide"
+ easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!
+ direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical"
+ reverse: false, //{NEW} Boolean: Reverse the animation direction
+ animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
+ smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
+ startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide)
+ slideshow: true, //Boolean: Animate slider automatically
+ slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds
+ animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
+ initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
+ randomize: false, //Boolean: Randomize slide order
+ thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.
+
+ // Usability features
+ pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
+ pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
+ pauseInvisible: true, //{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.
+ useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available
+ touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
+ video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
+
+ // Primary Controls
+ controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
+ directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
+ prevText: "Previous", //String: Set the text for the "previous" directionNav item
+ nextText: "Next", //String: Set the text for the "next" directionNav item
+
+ // Secondary Navigation
+ keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys
+ multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.
+ mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel
+ pausePlay: false, //Boolean: Create pause/play dynamic element
+ pauseText: "Pause", //String: Set the text for the "pause" pausePlay item
+ playText: "Play", //String: Set the text for the "play" pausePlay item
+
+ // Special properties
+ controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found.
+ manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs.
+ sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
+ asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
+
+ // Carousel Options
+ itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.
+ itemMargin: 0, //{NEW} Integer: Margin between carousel items.
+ minItems: 1, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.
+ maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.
+ move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.
+ allowOneSlide: true, //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide
+
+ // Callback API
+ start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide
+ before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation
+ after: function(){}, //Callback: function(slider) - Fires after each slider animation completes
+ end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
+ added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added
+ removed: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is removed
+ init: function() {} //{NEW} Callback: function(slider) - Fires after the slider is initially setup
+ };
+
+ //FlexSlider: Plugin Function
+ $.fn.flexslider = function(options) {
+ if (options === undefined) options = {};
+
+ if (typeof options === "object") {
+ return this.each(function() {
+ var $this = $(this),
+ selector = (options.selector) ? options.selector : ".slides > li",
+ $slides = $this.find(selector);
+
+ if ( ( $slides.length === 1 && options.allowOneSlide === true ) || $slides.length === 0 ) {
+ $slides.fadeIn(400);
+ if (options.start) options.start($this);
+ } else if ($this.data('flexslider') === undefined) {
+ new $.flexslider(this, options);
+ }
+ });
+ } else {
+ // Helper strings to quickly perform functions on the slider
+ var $slider = $(this).data('flexslider');
+ switch (options) {
+ case "play": $slider.play(); break;
+ case "pause": $slider.pause(); break;
+ case "stop": $slider.stop(); break;
+ case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
+ case "prev":
+ case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
+ default: if (typeof options === "number") $slider.flexAnimate(options, true);
+ }
+ }
+ };
+})(jQuery);
diff --git a/static/js/jquery.min.js b/Web-Terminal/static/js/jquery.min.js
similarity index 100%
rename from static/js/jquery.min.js
rename to Web-Terminal/static/js/jquery.min.js
diff --git a/static/js/jquery1.3.1.min.js b/Web-Terminal/static/js/jquery1.3.1.min.js
similarity index 100%
rename from static/js/jquery1.3.1.min.js
rename to Web-Terminal/static/js/jquery1.3.1.min.js
diff --git a/Web-Terminal/static/js/keyboardbind.js b/Web-Terminal/static/js/keyboardbind.js
new file mode 100644
index 0000000..9047b77
--- /dev/null
+++ b/Web-Terminal/static/js/keyboardbind.js
@@ -0,0 +1,75 @@
+//page buttons bind to keyboard buttons
+//driver
+// keycode 65 = a A
+// keycode 68 = d D
+// keycode 83 = s S
+// keycode 87 = w W
+
+//servo
+// keycode 37 = Left
+// keycode 38 = Up
+// keycode 39 = Right
+// keycode 40 = Down
+//keycode 82 = r R
+
+document.onkeydown = function (event) {
+ var e = event || window.event;
+ var keyCode = e.keyCode || e.which;
+ switch (keyCode) {
+ //driver
+ case 87:
+ $("#robot_up").click();
+ break;
+ case 83:
+ $("#robot_down").click();
+ break;
+ case 65:
+ $("#robot_left").click();
+ break;
+ case 68:
+ $("#robot_right").click();
+ break;
+ default:
+ break;
+ }
+}
+
+document.onkeyup = function (event) {
+ var e = event || window.event;
+ var keyCode = e.keyCode || e.which;
+ switch (keyCode) {
+ //driver
+ case 87:
+ $("#robot_stop").click();
+ break;
+ case 83:
+ $("#robot_stop").click();
+ break;
+ case 65:
+ $("#robot_stop").click();
+ break;
+ case 68:
+ $("#robot_stop").click();
+ break;
+ //servo
+ case 38:
+ $("#up").click();
+ break;
+ case 40:
+ $("#down").click();
+ break;
+ case 37:
+ $("#left").click();
+ break;
+ case 39:
+ $("#right").click();
+ break;
+ case 82:
+ $("#reset").click();
+ break;
+ default:
+ break;
+ }
+}
+
+
diff --git a/static/js/logging.js.bak b/Web-Terminal/static/js/logging.js.bak
similarity index 100%
rename from static/js/logging.js.bak
rename to Web-Terminal/static/js/logging.js.bak
diff --git a/Web-Terminal/static/js/modernizr.js b/Web-Terminal/static/js/modernizr.js
new file mode 100644
index 0000000..471dead
--- /dev/null
+++ b/Web-Terminal/static/js/modernizr.js
@@ -0,0 +1,2 @@
+/* Modernizr 2.0.6 (Custom Build) | MIT & BSD */
+;window.Modernizr=function(a,b,c){function D(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+o.join(c+" ")+c).split(" ");return C(d,b)}function C(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function B(a,b){return!!~(""+a).indexOf(b)}function A(a,b){return typeof a===b}function z(a,b){return y(n.join(a+";")+(b||""))}function y(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=Object.prototype.toString,n=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),o="Webkit Moz O ms Khtml".split(" "),p={},q={},r={},s=[],t=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["",""].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},u=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;t("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},v,w={}.hasOwnProperty,x;!A(w,c)&&!A(w.call,c)?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],c)},p.rgba=function(){y("background-color:rgba(150,255,150,.5)");return B(k.backgroundColor,"rgba")},p.boxshadow=function(){return D("boxShadow")},p.csstransitions=function(){return D("transitionProperty")};for(var E in p)x(p,E)&&(v=E.toLowerCase(),e[v]=p[E](),s.push((e[v]?"":"no-")+v));e.addTest=function(a,b){if(typeof a=="object")for(var d in a)x(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},y(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h
+var t=10; //设定跳转的时间
+setInterval("refer()",1000); //启动1秒定时
+function refer(){
+if(t==0){
+location="/"; //#设定跳转的链接地址
+}
+document.getElementById('show').innerHTML = "" + t + " seconds left before relogin."; // 显示倒计时
+t--; // 计数器递减
+}
+
+
+
+
God Damn It!
-

+
You sorry ass, are you fucking trying to crack my RaspberryPi?!
diff --git a/Web-Terminal/templates/404.html b/Web-Terminal/templates/404.html
new file mode 100644
index 0000000..78985ab
--- /dev/null
+++ b/Web-Terminal/templates/404.html
@@ -0,0 +1,22 @@
+{% extends "front_layout.html" %} {% block body %}
+
+
+
+
+
+
Holy crap!
+
 }})
+
You sorry ass, page not found!
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/Web-Terminal/templates/503.html b/Web-Terminal/templates/503.html
new file mode 100644
index 0000000..9488934
--- /dev/null
+++ b/Web-Terminal/templates/503.html
@@ -0,0 +1,22 @@
+{% extends "front_layout.html" %} {% block body %}
+
+
+
+
+
+
Shit happened!
+
 }})
+
Fix this shit, bro!
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/Amaze_Me.html b/Web-Terminal/templates/Amaze_Me.html
similarity index 60%
rename from templates/Amaze_Me.html
rename to Web-Terminal/templates/Amaze_Me.html
index 5c6a1a4..c4facda 100644
--- a/templates/Amaze_Me.html
+++ b/Web-Terminal/templates/Amaze_Me.html
@@ -12,6 +12,9 @@
+
+
+
@@ -33,15 +36,28 @@
+
+
 }})
+
+
+
 }})
+
Amaze me
-
+
##########################################################################################################
+
@@ -51,13 +67,27 @@
Amaze me
-
+
+
+