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 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + \ 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('
  1. ' + item + '
  2. '); + 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($('
  3. ' + slider.count + '
  4. ')); + } 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

    -

    +

    ##########################################################################################################

    +
    +
      +
    • slide 1
    • +
    • slide 1
    • +
    • slide 1
    • +
    +
    @@ -51,13 +67,27 @@

    Amaze me

    -
    + + + \ No newline at end of file diff --git a/templates/Home_Automation.html b/Web-Terminal/templates/Home_Automation.html similarity index 88% rename from templates/Home_Automation.html rename to Web-Terminal/templates/Home_Automation.html index 765f669..49b868b 100644 --- a/templates/Home_Automation.html +++ b/Web-Terminal/templates/Home_Automation.html @@ -38,15 +38,18 @@ +
    + +

    Home Automation

    -

    +

    ########################################################################################################## -

    +

    @@ -70,7 +73,7 @@

    Home Automation

    diff --git a/templates/Patrol_Monitor.html b/Web-Terminal/templates/Patrol_Monitor.html similarity index 64% rename from templates/Patrol_Monitor.html rename to Web-Terminal/templates/Patrol_Monitor.html index a990462..bc81043 100644 --- a/templates/Patrol_Monitor.html +++ b/Web-Terminal/templates/Patrol_Monitor.html @@ -16,6 +16,7 @@ + @@ -39,7 +40,9 @@ - +
    + +
    @@ -78,30 +81,46 @@

    Patrol Monitor

    WheelControl

    - + +
    - - - + + +
    - +

    Panel

    +
    - + + \ No newline at end of file diff --git a/templates/Sensor_Graph.html b/Web-Terminal/templates/Sensor_Graph.html similarity index 78% rename from templates/Sensor_Graph.html rename to Web-Terminal/templates/Sensor_Graph.html index 00d15cf..3736d9f 100644 --- a/templates/Sensor_Graph.html +++ b/Web-Terminal/templates/Sensor_Graph.html @@ -40,31 +40,36 @@ +
    + +

    Sensor Graphs

    -

    +

    ########################################################################################################## -

    +

    -
    + +
    -
    + + \ No newline at end of file diff --git a/Web-Terminal/templates/command.html b/Web-Terminal/templates/command.html new file mode 100644 index 0000000..5f0dc02 --- /dev/null +++ b/Web-Terminal/templates/command.html @@ -0,0 +1,27 @@ +{% extends "front_layout.html" %} {% block body %} + +
    +

    Command-line:

    +
    + +
    + +
    +
    +
    +

    RESULT

    +
    + {% with messages = get_flashed_messages() %} + {% if messages %} +
      + {% for message in messages %} +
    • {{ message }}
    • + {% endfor %} +
    + {% endif %} + {% endwith %} +
    + +
    + +{% endblock %} \ No newline at end of file diff --git a/templates/front_layout.html b/Web-Terminal/templates/front_layout.html similarity index 92% rename from templates/front_layout.html rename to Web-Terminal/templates/front_layout.html index c777b7b..6e5e8f5 100644 --- a/templates/front_layout.html +++ b/Web-Terminal/templates/front_layout.html @@ -13,6 +13,7 @@ + diff --git a/templates/index.html b/Web-Terminal/templates/index.html similarity index 93% rename from templates/index.html rename to Web-Terminal/templates/index.html index a65b6f0..7b11382 100644 --- a/templates/index.html +++ b/Web-Terminal/templates/index.html @@ -36,6 +36,9 @@ +
    + +
    @@ -76,7 +79,7 @@

    简单介绍

    diff --git a/templates/login.html b/Web-Terminal/templates/login.html similarity index 60% rename from templates/login.html rename to Web-Terminal/templates/login.html index c1afd43..b8de14d 100644 --- a/templates/login.html +++ b/Web-Terminal/templates/login.html @@ -1,4 +1,16 @@ -{% extends "front_layout.html" %} {% block body %} +{% extends "front_layout.html" %} + +{% block body %} + +{% with messages = get_flashed_messages() %} + {% if messages %} +
      + {% for message in messages %} +
    • {{ message }}
    • + {% endfor %} +
    + {% endif %} +{% endwith %}

    RaspberryPi Login

    @@ -11,6 +23,7 @@

    RaspberryPi Login


    -
    Designed By Jailman
    +
    Designed By Jailman
    {% endblock %} \ No newline at end of file diff --git a/static/js/button.js b/static/js/button.js deleted file mode 100644 index 599c0b4..0000000 --- a/static/js/button.js +++ /dev/null @@ -1,19 +0,0 @@ -function turn_on() -{} - -function turn_off() -{} - -function changeImage() -{ -element=document.getElementById('myimage') -if (element.src.match("on")) - { - element.src="/static/btimg/off.png"; - } -else - { - element.src="/static/btimg/on.png"; - } -} - diff --git a/templates/404.html b/templates/404.html deleted file mode 100644 index e166104..0000000 --- a/templates/404.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "front_layout.html" %} {% block body %} - -
    -

    Holy crap!

    - -

    You sorry ass, page not found!

    -
    - -{% endblock %} \ No newline at end of file diff --git a/templates/503.html b/templates/503.html deleted file mode 100644 index 3ef165b..0000000 --- a/templates/503.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "front_layout.html" %} {% block body %} - -
    -

    Shit happened!

    - -

    Fix this shit, bro!

    -
    - -{% endblock %} \ No newline at end of file diff --git a/templates/command.html b/templates/command.html deleted file mode 100644 index c4efc6d..0000000 --- a/templates/command.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "front_layout.html" %} {% block body %} - - -
    - - -
    -

    Command-line:

    - -
    -
    - - - -
    -
    -
    -

    Here shows the result!

    -
    -
    - -{% endblock %} \ No newline at end of file