summaryrefslogtreecommitdiff
path: root/templates
diff options
context:
space:
mode:
Diffstat (limited to 'templates')
-rw-r--r--templates/account/home.html23
-rw-r--r--templates/account/index.html59
-rw-r--r--templates/account/sub_nav.html9
-rw-r--r--templates/admin/booking_index.html33
-rw-r--r--templates/admin/index.html34
-rw-r--r--templates/admin/profile.html46
-rw-r--r--templates/admin/sub_nav.html4
-rw-r--r--templates/admin/webcam_index.html22
-rw-r--r--templates/experiment/logs.html35
-rw-r--r--templates/footer.html45
-rw-r--r--templates/layout.html40
-rw-r--r--templates/modals.html29
-rw-r--r--templates/nav.html36
-rw-r--r--templates/pages/about.html59
-rw-r--r--templates/pages/contact.html34
-rw-r--r--templates/pages/downloads.html53
-rw-r--r--templates/pages/e404.html13
-rw-r--r--templates/pages/e500.html13
-rw-r--r--templates/pages/experiments.html38
-rw-r--r--templates/pages/feedback.html22
-rw-r--r--templates/pages/index.html64
-rw-r--r--templates/pages/info.html36
-rw-r--r--templates/pages/procedure.html32
-rw-r--r--templates/pages/quiz.html19
-rw-r--r--templates/pages/theory.html20
-rw-r--r--templates/password/edit.html25
-rw-r--r--templates/password/new.html19
-rw-r--r--templates/slot/index.html37
-rw-r--r--templates/slot/new.html72
-rw-r--r--templates/slot/show.html6
-rw-r--r--templates/webcam/show_video.html61
31 files changed, 1038 insertions, 0 deletions
diff --git a/templates/account/home.html b/templates/account/home.html
new file mode 100644
index 0000000..fed34a5
--- /dev/null
+++ b/templates/account/home.html
@@ -0,0 +1,23 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <script>
+ document.getElementById("home-nav").classList.add("active");
+ </script>
+ <div class="span12">
+ <h2>Welcome to Single Board Heater System Lab</h2>
+ <br>
+ You can:
+ <ul>
+ <li>book your slot by going to the "Book slot" section above</li>
+ <li>download the client code for experiments using the download link above</li>
+ <li>download your previous experiment logs by going to "Download log files" section above</li>
+ <li>see the experiment video by going to "Show video" section above</li>
+ </ul>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/account/index.html b/templates/account/index.html
new file mode 100644
index 0000000..d90ba9d
--- /dev/null
+++ b/templates/account/index.html
@@ -0,0 +1,59 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ <div class="span5">
+ <h2>Login</h2>
+ <br>
+ <form action="{% url 'sbhs_server.account.views.login' %}" method="POST">
+ {% csrf_token %}
+ <label for="login_username">Username</label>
+ <input type="text" name="username" id="login_username" required>
+ <br>
+ <label for="login_password">Password</label>
+ <input type="password" name="password" id="login_password" required>
+ <br>
+ <input type="submit" class="btn btn-primary" value="Login">
+ &nbsp;&nbsp;<a href="{% url 'sbhs_server.password.views.new' %}">Forgot Password?</a>
+ </form>
+ </div>
+ <div class="span5 pull-right">
+ <h2>Create Account</h2>
+ <form action="{% url 'sbhs_server.account.views.create' %}" method="POST">
+ {% csrf_token %}
+ <label for="name">Name</label>
+ <input type="text" name="name" id="name" required>
+ <br>
+ <label for="email">Email</label>
+ <input type="email" name="email" id="email" required>
+ <br>
+ <label for="username">Enter a username</label>
+ <input type="text" name="username" id="username" required>
+ <br>
+ <label for="roll_number">Roll No.</label>
+ <input type="text" name="roll_number" id="roll_number" required>
+ <br>
+ <label for="password">Password</label>
+ <input type="password" name="password" id="password" required>
+ <br>
+ <label for="confirm">Confirm Password</label>
+ <input type="password" name="confirm" id="confirm" required>
+ <br>
+ <label for="institute">Institute</label>
+ <input type="text" name="institute" id="institute" required>
+ <br>
+ <label for="department">Department</label>
+ <input type="text" name="department" id="department" required>
+ <br>
+ <label for="position">Position</label>
+ <input type="text" name="position" id="position" required>
+ <br>
+
+ <input type="submit" class="btn btn-inverse" value="Create Account">
+ </form>
+ </div>
+ </div>
+
+</div>
+{% endblock %}
diff --git a/templates/account/sub_nav.html b/templates/account/sub_nav.html
new file mode 100644
index 0000000..432ff9d
--- /dev/null
+++ b/templates/account/sub_nav.html
@@ -0,0 +1,9 @@
+<div class="span12">
+ <ul class="nav nav-pills">
+ <li id="home-nav"><a href="{% url 'sbhs_server.account.views.home' %}">Home</a></li>
+ <li id="book-slot-nav"><a href="{% url 'sbhs_server.slot.views.new' %}">Book slot</a></li>
+ <li id="view-slot-nav"><a href="{% url 'sbhs_server.slot.views.index' %}">View/Delete slot</a></li>
+ <li id="download-log-nav"><a href="{% url 'sbhs_server.experiment.views.logs' %}">Download log files</a></li>
+ <li id="video-nav"><a href="{% url 'sbhs_server.webcam.views.show_video' %}">Show video</a></li>
+ </ul>
+</div>
diff --git a/templates/admin/booking_index.html b/templates/admin/booking_index.html
new file mode 100644
index 0000000..db9b41e
--- /dev/null
+++ b/templates/admin/booking_index.html
@@ -0,0 +1,33 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <div class="span12">
+ {% include "admin/sub_nav.html" %}
+ <table class="table table-bordered table-condensed">
+ <thead>
+ <tr>
+ <th>Date</th>
+ <th>Slot</th>
+ <th>Board</th>
+ <th>User</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for b in bookings %}
+ <tr>
+ <td>{{ b.booking_date }}</td>
+ <td>{{ b.slot }}</td>
+ <td>{{ b.account.board.mid }}</td>
+ <td>{{ b.account.name }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/admin/index.html b/templates/admin/index.html
new file mode 100644
index 0000000..e954960
--- /dev/null
+++ b/templates/admin/index.html
@@ -0,0 +1,34 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <div class="span12">
+ {% include "admin/sub_nav.html" %}
+ <h4>MID allotment mode is {{ allotment_mode }}. <small>Change to <a href="{% url 'sbhs_server.admin.views.toggle_allotment_mode' %}">{% if allotment_mode == 'Random' %}Workshop mode{% else %}Random mode{% endif %}</a></small></h4>
+ <h1>Board status</h1>
+ <table class="table table-bordered">
+ <thead>
+ <tr>
+ <th>Board MID</th>
+ <th>Status</th>
+ <th>Webcam</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for b in boards %}
+ <tr>
+ <td>{{ b.mid }}</td>
+ <td><span class="label label-{% if b.online %}success{% else %}important{% endif %}">{% if b.online %}Online{% else %}Offline{% endif %}</span></td>
+ <td><a href="{% url 'sbhs_server.webcam.views.show_video_to_admin' b.mid %}" target="_blank">View image</a></td>
+ <td><a href="{% url 'sbhs_server.admin.views.profile' b.mid %}">View temperature profile</a></td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/admin/profile.html b/templates/admin/profile.html
new file mode 100644
index 0000000..4a0da61
--- /dev/null
+++ b/templates/admin/profile.html
@@ -0,0 +1,46 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block headerfiles %}
+<script src="{% static 'js/dygraph-combined.js' %}"></script>
+{% endblock %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <div class="span12">
+ {% include "admin/sub_nav.html" %}
+ <h2>SBHS MID: {{ mid }} <small>Profile for past {{ delta_T }} instances</small></h2>
+ <h3>Heat</h3>
+ <div id="heat" style="width:800px; height: 80px"></div>
+ <h3>Fan</h3>
+ <div id="fan" style="width:800px; height: 80px"></div>
+ <h3>Temperature</h3>
+ <div id="temp" style="width:800px; height: 80px"></div>
+ </div>
+ </div>
+</div>
+<script>
+(function(){
+ var h = new Dygraph(
+ document.getElementById("heat"),
+ "{{ heat }}",
+ {
+ valueRange: [0,100]
+ }
+ );
+ var f = new Dygraph(
+ document.getElementById("fan"),
+ "{{ fan }}",
+ {
+ valueRange: [0,100]
+ }
+ );
+ var t = new Dygraph(
+ document.getElementById("temp"),
+ "{{ temp }}"
+ );
+})();
+</script>
+{% endblock %} \ No newline at end of file
diff --git a/templates/admin/sub_nav.html b/templates/admin/sub_nav.html
new file mode 100644
index 0000000..abbcce0
--- /dev/null
+++ b/templates/admin/sub_nav.html
@@ -0,0 +1,4 @@
+<a href="{% url 'sbhs_server.admin.views.index' %}" class="btn">Show all boards</a>
+<a href="{% url 'sbhs_server.admin.views.booking_index' %}" class="btn">Show all bookings</a>
+<a href="{% url 'sbhs_server.admin.views.webcam_index' %}" class="btn">Show all images</a>
+<br><br> \ No newline at end of file
diff --git a/templates/admin/webcam_index.html b/templates/admin/webcam_index.html
new file mode 100644
index 0000000..85356d1
--- /dev/null
+++ b/templates/admin/webcam_index.html
@@ -0,0 +1,22 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <div class="span12">
+ {% include "admin/sub_nav.html" %}
+ </div>
+ </div>
+ <div class="row">
+ {% for b in boards %}
+ <div class="span4" style="text-align: center; outline: 1px solid black">
+ <img src="{% static b.image_link %}" alt="{{ b.mid }}" style="width:90%;">
+ <br>
+ Board MID: {{ b.mid }}
+ </div>
+ {% endfor %}
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/experiment/logs.html b/templates/experiment/logs.html
new file mode 100644
index 0000000..61816dd
--- /dev/null
+++ b/templates/experiment/logs.html
@@ -0,0 +1,35 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <script>
+ document.getElementById("download-log-nav").classList.add("active");
+ </script>
+ <div class="span12">
+ <h3>Download previous log files</h3>
+ <table class="table table-condensed">
+ <thead>
+ <tr>
+ <th>Date</th>
+ <th>Slot timings</th>
+ <th>Filename</th>
+ <th>Download</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for e in experiments %}
+ <tr>
+ <td>{{ e.booking.start_time|date:"M d, Y" }}</td>
+ <td>{{ e.booking.slot }}</td>
+ <td>{{ e.logname }}</td>
+ <td><a href="{% url 'sbhs_server.experiment.views.download_log' e.id e.logname %}" target="_blank">Download</a></td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/footer.html b/templates/footer.html
new file mode 100644
index 0000000..a34f575
--- /dev/null
+++ b/templates/footer.html
@@ -0,0 +1,45 @@
+<div class="wrapper" style="position: absolute; bottom: 0; right: 0; width: 100%;">
+ <div class="container">
+ <div class="navbar">
+ <ul class="nav pull-right">
+ <li><a href="#"><b>External links</b></a></li>
+ <li><a href="http://www.iitb.ac.in/" target="_blank">IIT Bombay</a></li>
+ <li><a href="http://www.vlab.co.in/" target="_blank">Virtual Labs</a></li>
+ <li><a href="http://www.spoken-tutorial.org/" target="_blank">Spoken Tutorials</a></li>
+ <li><a href="http://www.co-learn.in/" target="_blank">Co-learn</a></li>
+ <li><a href="http://www.nex-robotics.com/" target="_blank">Nex Robotics</a></li>
+ <li><a href="http://sbhs.os-hardware.in/forum" target="_blank">SBHS Forum</a></li>
+ <li><a href="http://www.cdeep.iitb.ac.in/" target="_blank">CDEEP</a></li>
+ </ul>
+ </div>
+ <small style="float: right; font-size: 10px; margin: -8px 10px 2px 0;">Server time: <span id="timer">{% now "jS M Y h:i:s A" %}</span>. Copyright &copy; 2014 <a href="www.iitb.ac.in" target="_blank">www.iitb.ac.in</a>. Designed and hosted by <a href="http://www.cdeep.iitb.ac.in/" target="_blank">Automation Lab, CDEEP, IIT Bombay</a></small>
+ </div>
+</div>
+
+<script>
+(function(){
+ var date_string = "{% now 'Y-m-d H:i:s' %}";
+ var a = date_string.split(/[^0-9]/);
+ for(i=0;i<6;i++){a[i]=parseInt(a[i])}
+ window.date = new Date(a[0],a[1]-1,a[2],a[3],a[4],a[5]);
+ window.monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+ window.ordinalize = function (i) {
+ var j = i % 10;
+ if (j == 1 && i != 11) return i + "st";
+ if (j == 2 && i != 12) return i + "nd";
+ if (j == 3 && i != 13) return i + "rd";
+ return i + "th";
+ }
+ window.num_padding = function(i) {
+ return i < 10 ? "0" + i : i;
+ }
+
+ var timer = function() {
+ window.date.setSeconds(window.date.getSeconds() + 1);
+ str = window.ordinalize(window.date.getDate()) + " " + window.monthNames[window.date.getMonth()] + " " + window.date.getFullYear() + " " + window.date.toLocaleTimeString().toUpperCase();
+ document.getElementById("timer").innerHTML = str;
+ }
+
+ setInterval(timer, 1000);
+})();
+</script>
diff --git a/templates/layout.html b/templates/layout.html
new file mode 100644
index 0000000..32300ff
--- /dev/null
+++ b/templates/layout.html
@@ -0,0 +1,40 @@
+{% load staticfiles %}
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>Single Board Heater System &middot; Virtual Labs</title>
+ <link rel="shortcut icon" href="{% static 'img/favicon.ico' %}">
+ <link rel="stylesheet" href="{% static "css/bootstrap.min.css" %}">
+ <link rel="stylesheet" href="{% static "css/bootstrap-responsive.min.css" %}">
+ <script src="{% static "js/jquery-latest.min.js" %}"></script>
+ <script src="{% static "js/bootstrap.min.js" %}"></script>
+ {% block headerfiles %}
+ {% endblock %}
+ <style>
+ html { margin: 0; height: 100%; }
+ body { padding-top: 70px; position: relative; margin: 0; min-height: 88%; }
+ </style>
+</head>
+<body>
+
+ {% include 'nav.html' %}
+ {% if messages %}
+ <div class="container">
+ {% for message in messages %}
+ <div class="alert alert-{{ message.tags }}">{{ message|safe }}
+ <a class="close" data-dismiss="alert" href="#">&times;</a></div>
+ {% endfor %}
+ </div>
+ {% endif %}
+
+ {% block content %}
+ {% endblock %}
+ <br><br><br>
+ {% include 'footer.html' %}
+ {% include 'modals.html' %}
+ <script>
+ $(".alert").alert();
+ </script>
+</body>
+</html> \ No newline at end of file
diff --git a/templates/modals.html b/templates/modals.html
new file mode 100644
index 0000000..9d0f280
--- /dev/null
+++ b/templates/modals.html
@@ -0,0 +1,29 @@
+{% if user.is_authenticated %}
+<div class="modal hide fade" id="passwordModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <h3>Change Password</h3>
+ </div>
+ <div class="modal-body">
+ <p>Please click following button to send password change link to your email address.</p>
+ </div>
+ <div class="modal-footer">
+ <a data-dismiss="modal" aria-hidden="true" class="btn">Close</a>
+ <a href="{% url 'sbhs_server.password.views.new' %}" class="btn btn-primary">Send password change link</a>
+ </div>
+</div>
+
+
+<div class="modal hide fade" id="machineModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <h3>Machine change</h3>
+ </div>
+ <div class="modal-body">
+ <p>Please send an email to rupakrokade@iitb.ac.in stating the reasons why machine change is required.</p>
+ </div>
+ <div class="modal-footer">
+ <a data-dismiss="modal" aria-hidden="true" class="btn">Close</a>
+ </div>
+</div>
+{% endif %} \ No newline at end of file
diff --git a/templates/nav.html b/templates/nav.html
new file mode 100644
index 0000000..34559bd
--- /dev/null
+++ b/templates/nav.html
@@ -0,0 +1,36 @@
+<div class="navbar navbar-inverse navbar-fixed-top">
+ <div class="navbar-inner">
+ <div class="container">
+ <a href="{% url 'sbhs_server.pages.views.index' %}" class="brand">Single Board Heater System Lab</a>
+
+ <ul class="nav pull-right">
+ {% if user.is_authenticated %}
+ <li class="dropdown">
+ <a class="dropdown-toggle" data-toggle="dropdown" href="#">Welcome, {{ user.name }} <b class="caret"></b></a>
+ <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+ <li><a href="#passwordModal" role="button" data-toggle="modal">Change Password</a></li>
+ <li><a href="#machineModal" role="button" data-toggle="modal">Request machine change</a></li>
+ <li><a href="{% url 'sbhs_server.account.views.logout' %}">Logout</a></li>
+ </ul>
+ </li>
+ {% else %}
+ <li><a href="{% url 'sbhs_server.account.views.index' %}">Login / Register</a></li>
+ {% endif %}
+ </ul>
+ </div>
+ </div>
+ <div class="navbar-inner">
+ <div class="container">
+ <ul class="nav pull-right">
+ <li><a href="{% url 'sbhs_server.pages.views.info' %}">SBHS InfoCentre</a></li>
+ <li><a href="http://sbhs.os-hardware.in/downloads" target="_blank">Downloads</a></li>
+ <li><a href="{% url 'sbhs_server.pages.views.theory' %}">Theory</a></li>
+ <li><a href="{% url 'sbhs_server.pages.views.procedure' %}">Procedure</a></li>
+ <li><a href="{% url 'sbhs_server.pages.views.experiments' %}">Experiments</a></li>
+ <li><a href="{% url 'sbhs_server.pages.views.quiz' %} ">Quiz</a></li>
+ <li><a href="{% url 'sbhs_server.pages.views.feedback' %}">Feedback / Contact Us</a></li>
+ <li><a href="{% url 'sbhs_server.pages.views.about' %}">About Us</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
diff --git a/templates/pages/about.html b/templates/pages/about.html
new file mode 100644
index 0000000..8858e0e
--- /dev/null
+++ b/templates/pages/about.html
@@ -0,0 +1,59 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <div class="page-header">
+ <div class="span1" style="margin-left: 0; margin-right: 20px;">
+ <img src="{% static 'img/iitbLogo.png' %}" alt="IITB">
+ </div>
+ <h1>About us</h1>
+ <p>SBHS Virtual Labs Team</p>
+ </div>
+ </div>
+ <div class="span2">
+ <img src="{% static 'img/kannan.jpg' %}" alt="Prof. Kannan Moudgalya">
+ <b>Principal Investigator</b><br>
+ Prof. Kannan Moudgalya
+ </div>
+ <div class="span10">
+ <p style="text-align:justify">
+ Prof. Kannan M. Moudgalya received a B.Tech degree in chemical engineering from IIT Madras, a Master of Electrical Engineering from Rice University and a Ph.D (Chemical Engineering) degree, also from Rice Uni versity. He has been a professor at IIT Bombay for 22 years. He spent one year at the University of Alberta as a visiting professor.
+ <br><br>
+ Prof. Moudgalya works in the areas of control, simulation, mathematical modelling and education technologies. He has a large number of publications in international journals and conferences. He has written two books:
+ <ol>
+ <li><a href="http://books.google.co.in/books/about/Optimization.html?id=Byqreay8y_MC" target="_blank">Optimization: theory and practice, with Prof. M. C. Joshi, published by Narosa</a></li>
+ <li><a href="http://as.wiley.com/WileyCDA/WileyTitle/productCd-0470031441.html" target="_blank">Digital Control, published by John Wiley &amp; Sons</a></li>
+ </ol>
+ <br>
+ Prof.Moudgalya held the posts of Associate Dean (R&amp;D), Head of Office Automation and Head of Distance Education, at IIT Bombay. He is currently a Member of the Standing Committee of the National Mission on Education through ICT. He contributes to this Mission through projects in the areas of spoken tutorials (<a href="http://www.spoken-tutorial.org/" target="_blank">www.spoken-tutorial.org</a>), open source software (<a href="http://www.scilab.in/" target="_blank">www.scilab.in</a>) and talk to a teacher (<a href="http://www.co-learn.in/" target="_blank">www.co-learn.in</a>).
+ </p>
+ </div>
+ </div>
+ <div class="row">
+ <div class="span10 offset2">
+ <br>
+ <h3>SBHS Team</h3>
+ <ul>
+ <li>Inderpreet Arora</li>
+ <li>Rupak Rokade</li>
+ <li>Kaushik Venkata Belusonti</li>
+ <li>Prashant Shah</li>
+ <li>Victor Chakroborty</li>
+ <li>Shalini Shrivastava</li>
+ <li>Rakhi R</li>
+ <li>Sushant Poojary</li>
+ <li>Tanuj Bhojwani</li>
+ <li>Sitesh Patel</li>
+ <li>Ankit Bahuguna</li>
+ <li>Amol Mandhane</li>
+ </ul>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/pages/contact.html b/templates/pages/contact.html
new file mode 100644
index 0000000..16d391d
--- /dev/null
+++ b/templates/pages/contact.html
@@ -0,0 +1,34 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <h2>Contact Us</h2>
+ <table class="table">
+ <tbody>
+ <tr>
+ <td>Prof. Kannan Moudgalya</td>
+ <td>kannan@iitb.ac.in</td>
+ </tr>
+ <tr>
+ <td>Rupak Rokade</td>
+ <td>rupakrokade@gmail.com</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ <br>
+ <h2>SBHS Discussion Forum</h2>
+ The SBHS Community has maintained a discussion forum and exhaustive documentation to answer basic questions about SBHS and SBHS Vlabs.
+ </div>
+ </div>
+</div>
+{% endblock %}
diff --git a/templates/pages/downloads.html b/templates/pages/downloads.html
new file mode 100644
index 0000000..631009d
--- /dev/null
+++ b/templates/pages/downloads.html
@@ -0,0 +1,53 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span8">
+ <h1>Downloads</h1>
+ <br><br>
+ <table class="table">
+ <tbody>
+ <tr>
+ <td>Scilab 5.3.3 for Windows</td>
+ <td><a href="{% static 'scilab/scilab-5.3.3-windows.exe' %}" target="_blank">Download</a></td>
+ </tr>
+ <tr>
+ <td>Scilab 5.3.3 for Linux</td>
+ <td><a href="{% static 'scilab/scilab-5.3.3-linux.tar.gz' %}" target="_blank">Download</a></td>
+ </tr>
+ <tr>
+ <td>SBHS Scilab codes for Windows</td>
+ <td><a href="{% static 'sbhsclient/scilab_codes_windows.zip' %}" target="_blank">Download</a></td>
+ </tr>
+ <tr>
+ <td>SBHS Scilab codes for Linux (32 bit)</td>
+ <td><a href="{% static 'sbhsclient/scilab_codes_linux_32.zip' %}" target="_blank">Download</a></td>
+ </tr>
+ <tr>
+ <td>SBHS Scilab codes for Linux (64 bit)</td>
+ <td><a href="{% static 'sbhsclient/scilab_codes_linux_64.zip' %}" target="_blank">Download</a></td>
+ </tr>
+ <tr>
+ <td>SBHS Scilab codes for Local experiments</td>
+ <td><a href="{% static 'sbhsclient/scilab_codes_local.zip' %}" target="_blank">Download</a></td>
+ </tr>
+ <tr>
+ <td>SBHS Scilab codes for Data Analysis</td>
+ <td><a href="{% static 'sbhsclient/scilab_codes_analysis.zip' %}" target="_blank">Download</a></td>
+ </tr>
+ <tr><td></td><td></td></tr>
+ </tbody>
+ </table>
+ <br><br>
+ <div class="alert alert-info">
+ For older versions of linux (For example, Ubuntu <= 11.10), a new version of package <b>libc6</b> (>= 2.15) is required. The package is available from Ubuntu archives on <a href="http://archive.ubuntu.com/ubuntu/pool/main/e/eglibc/libc6_2.17-0ubuntu5_i386.deb" target="_blank" style="color: yellow">this link</a>.
+ </div>
+ </div>
+ </div>
+</div>
+{% endblock %}
diff --git a/templates/pages/e404.html b/templates/pages/e404.html
new file mode 100644
index 0000000..62ef99d
--- /dev/null
+++ b/templates/pages/e404.html
@@ -0,0 +1,13 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ <div class="span12">
+ <h1>Page not found <small>Error 404</small></h1>
+ <br>
+ <p>The page you are looking for doesn't exist. Please click <a href="{% url 'sbhs_server.account.views.index' %}">here</a> to go to the homepage.</p>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/pages/e500.html b/templates/pages/e500.html
new file mode 100644
index 0000000..2a5acb7
--- /dev/null
+++ b/templates/pages/e500.html
@@ -0,0 +1,13 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ <div class="span12">
+ <h1>Internal server error <small>Error 500</small></h1>
+ <br>
+ <p>Something went wrong on the server. We are correcting the issue. Contact vlabs team if the problem persists. Please click <a href="{% url 'sbhs_server.account.views.index' %}">here</a> to go to the homepage.</p>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/pages/experiments.html b/templates/pages/experiments.html
new file mode 100644
index 0000000..af9df33
--- /dev/null
+++ b/templates/pages/experiments.html
@@ -0,0 +1,38 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <h2>Experiments</h2>
+ <br>
+ <br>
+ <p><h4>
+ <strong>List of experiments:</strong>
+ </h4>
+ <p>
+ <ol>
+ <li>Identification of Transfer Function of a Single Board Heater System through Step Response
+
+Experiment</li>
+ <li>Identification of Transfer Function of a Single Board Heater System through Ramp Response
+
+Experiment</li>
+ <li>Frequency Response Analysis of a Single Board Heater System by the Application of Sine Wave</li>
+ <li>Controlling Single Board Heater System using PID controller</li>
+ <li>Two Degrees of Freedom (2­DOF) Controller</li>
+ <li>PRBS Modeling and Implementation of Pole Placement Controller</li>
+ <li>Implementing Internal Model Controller for First Order System on a Single Board Heater System</li>
+ <li>Design and Implementation of Self Tuning PI and PID Controllers on Single Board Heater System</li>
+ <li>Model Predictive Control in Single Board Heater System using SCILAB</li>
+ </ol>
+ </p></p>
+ </div>
+ </div>
+</div>
+{% endblock %}
diff --git a/templates/pages/feedback.html b/templates/pages/feedback.html
new file mode 100644
index 0000000..f19b706
--- /dev/null
+++ b/templates/pages/feedback.html
@@ -0,0 +1,22 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <h2>Feedback / Contact Us</h2>
+ <br>
+ <br>
+ <p>
+ <h5>Write a mail to <a href="mailto:sbhs@os-hardware.in">sbhs[at]os-hardware[dot]in</a> to provide a feedback on SBHS virtual lab experience. If you have any questions, please use the <a href="http://sbhs.os-hardware.in/forum" target="_blank">forum</a>.
+ </h5>
+ </p>
+ <br>
+ </div>
+ </div>
+</div>
+{% endblock %}
diff --git a/templates/pages/index.html b/templates/pages/index.html
new file mode 100644
index 0000000..7a1aa5c
--- /dev/null
+++ b/templates/pages/index.html
@@ -0,0 +1,64 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <div class="page-header">
+ <div class="span1" style="margin-left: 0; margin-right: 20px;">
+ <img src="{% static 'img/iitbLogo.png' %}" alt="IITB">
+ </div>
+ <h1>Single Board Heater System Lab</h1>
+ <p>By <a href="http://www.iitb.ac.in/" target="_blank">Indian Institute of Technology, Bombay</a></p>
+ </div>
+ </div>
+ <div class="span6">
+ <h3>Welcome to Virtual Labs (SBHS)</h3>
+ <p style="text-align: justify;">The Virtual Labs Project was started as an initiative from the Ministry of Human Resource and Development (MHRD) to create online interactive media which would help students learn and experiment with difficult concepts in various domains. As a part of this initiative, a virtual laboratory for Single Board Heater System (SBHS) has been developed. The objective of this lab is to help students, teachers or in general enthusiasts perform experiments in the Instrumentation and Control System labs virtually, and yet have close to real life experience. The platform is focused on learning aspects as much as on performing the experiments.</p>
+ </div>
+ <div class="span6">
+ <div id="slider" class="carousel slide" data-interval="4000">
+ <ol class="carousel-indicators">
+ <li data-target="#slider" data-slide-to="0" class="active"></li>
+ <li data-target="#slider" data-slide-to="1"></li>
+ <li data-target="#slider" data-slide-to="2"></li>
+ <li data-target="#slider" data-slide-to="3"></li>
+ <li data-target="#slider" data-slide-to="4"></li>
+ </ol>
+ <!-- Carousel items -->
+ <div class="carousel-inner">
+ <div class="active item"><img src="{% static 'img/01.jpg' %}" alt="SBHS"></div>
+ <div class="item"><img src="{% static 'img/02.jpg' %}" alt="SBHS"></div>
+ <div class="item"><img src="{% static 'img/03.jpg' %}" alt="SBHS"></div>
+ <div class="item"><img src="{% static 'img/04.jpg' %}" alt="SBHS"></div>
+ <div class="item"><img src="{% static 'img/05.jpg' %}" alt="SBHS"></div>
+ </div>
+ <!-- Carousel nav -->
+ <a class="carousel-control left" href="#slider" data-slide="prev">&lsaquo;</a>
+ <a class="carousel-control right" href="#slider" data-slide="next">&rsaquo;</a>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="span6">
+ <h3>Key features of virtual labs</h3>
+ <ul style="text-align: justify;">
+ <li>You can remotely access the Single Board Heater Systems (SBHS) hosted at IIT Bombay, and perform various experiments using it.</li>
+ <li>Single Board Heater system is a lab-in-a-box setup which is primarily used for teaching/studying the theory of control systems. It can be thought of as a plant with a very small time constant (of the order of 60s). You can remotely access this system and perform experiments on it - from tests as simple as Step Tests to complicated closed loop tests!</li>
+ <li>Users are given two slots of 55 minute duration for performing the tests every day. They can also make use of vacant current slots, if any, in addition to this. The relatively small time constant of the SBHS allows the user to complete one or more experiments within the 55 minute duration.</li>
+ </ul>
+ </div>
+ <div class="span6">
+ <h3>SBHS Discussion Forum</h3>
+ <p style="text-align: justify;">We provide you extensive documentation and spoken tutorials on the SBHS and how to access it using Virtual Labs. You can find the links in the downloads section. Support is given for Scilab based experiments on the SBHS. The Scilab based experiments on SBHS. Sample Scilab code for Step Test is also available in the downloads section. Join us also in the SBHS discussion forum (<a href="http://sbhs.os-hardware.in/node/5" target="_blank">here</a>).</p>
+ </div>
+ </div>
+</div>
+<script>
+ $('.carousel').carousel();
+</script>
+{% endblock %}
diff --git a/templates/pages/info.html b/templates/pages/info.html
new file mode 100644
index 0000000..3edacd4
--- /dev/null
+++ b/templates/pages/info.html
@@ -0,0 +1,36 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <div class="page-header">
+ <h1>Welcome to Single Board Heater System Lab!</h1>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="span8">
+ <p style="text-align:justify">
+ Welcome to SBHS Virtual Labs. Here you can remotely access the Single Board Heater Systems (SBHS) hosted at IIT Bombay, and perform various experiments using it.
+ <br><br>
+ The virtual Lab for SBHS is made using free and open source software. Python-MySQL is used for web frontend and database. It targets at using Scilab at the client end to carry out various control experiments on SBHS. Python Scripts are used for communicating the data to and fro from the server and client. This Virtual lab interface can be accessed from both inside as well as outside IIT Bombay.
+ <br><br>
+ This virtual lab interface for SBHS at IIT Bombay was successfully used by Prof.Kannan Moudgalya for CL417 - Process Control Course, CL692 - Digital Control Course and by Prof. Kavi Arya for Embedded Systems Course. A good documentation of the hardware side of SBHS is also available on the Downloads page. We also have an active forum so that your questions regarding this project are easily answered. Apart from this, we also provide you with scilab code of various control strategies implemented on SBHS. After getting a feel for SBHS using virtual labs, one can even purchase an SBHS and experiment with it locally. For purchasing SBHS, please visit <a href="http://www.nex-robotics.com/" target="_blank">http://www.nex-robotics.com/</a>
+ <br><br>
+ Following are the steps to be followed for using virtual labs. </p>
+
+ <ol>
+ <li>From the Download Section, download and install Scilab.</li>
+ <li>Register and book slot from this website.</li>
+ <li>Run the client application for establishing communication between server and your computer.</li>
+ <li>Launch Scilab, load the appropriate code and start experimenting remotely!</li>
+ </ol>
+ </div>
+ </div>
+</div>
+{% endblock %}
diff --git a/templates/pages/procedure.html b/templates/pages/procedure.html
new file mode 100644
index 0000000..c191a1f
--- /dev/null
+++ b/templates/pages/procedure.html
@@ -0,0 +1,32 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <h2>Procedure</h2>
+ <h4>
+ <strong>See the spoken tutorial on how to use SBHS virtual labs</strong>
+ </h4>
+ <center>
+ <div class="embed-responsive embed-responsive-16by9">
+ <iframe width="500" height="300" src="https://www.youtube.com/embed/Ax7lYwQctog" frameborder="0" allowfullscreen></iframe>
+ </div>
+ </center><br>
+ <h4>
+ <strong>For more information please read the pdf</strong>
+ </h4>
+ <center>
+ <div class="embed-responsive embed-responsive-16by9">
+ <iframe src="{% static 'data/procedure.pdf' %}" width="100%" height="900px"></iframe><br>
+ </div>
+ </center>
+ </div>
+ </div>
+</div>
+{% endblock %}
diff --git a/templates/pages/quiz.html b/templates/pages/quiz.html
new file mode 100644
index 0000000..b6b78a3
--- /dev/null
+++ b/templates/pages/quiz.html
@@ -0,0 +1,19 @@
+ {% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <h2>Quiz</h2>
+
+ <h5><a href= "http://vlabs.iitb.ac.in/sbhs/exam" target="_blank"> Quiz Link </a>
+ </h5>
+ <br>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/pages/theory.html b/templates/pages/theory.html
new file mode 100644
index 0000000..82cb49c
--- /dev/null
+++ b/templates/pages/theory.html
@@ -0,0 +1,20 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block content %}
+
+<div class="container">
+ <div class="row">
+ {% if user.is_authenticated %}
+ {% include 'account/sub_nav.html' %}
+ {% endif %}
+ <div class="span12">
+ <h2>Theroy</h2>
+ <br>
+ <br>
+ <iframe src="{% static 'data/theory.pdf' %}" width="100%" height="900px" ></iframe>
+ <br>
+ </div>
+ </div>
+</div>
+{% endblock %}
diff --git a/templates/password/edit.html b/templates/password/edit.html
new file mode 100644
index 0000000..487b552
--- /dev/null
+++ b/templates/password/edit.html
@@ -0,0 +1,25 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ <div class="span11">
+ <h2>Change Password</h2>
+ <br>
+ <form action="{% url 'sbhs_server.password.views.update' token %}" method="POST">
+ {% csrf_token %}
+ <label for="email">Email</label>
+ <input type="email" name="email" id="email" required>
+ <br>
+ <label for="password">Password</label>
+ <input type="password" name="password" id="password" required>
+ <br>
+ <label for="confirm">Confirm password</label>
+ <input type="password" name="confirm" id="confirm" required>
+ <br>
+ <input type="submit" class="btn btn-primary" value="Change password">
+ </form>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/password/new.html b/templates/password/new.html
new file mode 100644
index 0000000..e45e24f
--- /dev/null
+++ b/templates/password/new.html
@@ -0,0 +1,19 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ <div class="span11">
+ <h2>Change Password</h2>
+ <br>
+ <form action="{% url 'sbhs_server.password.views.email' %}" method="POST">
+ {% csrf_token %}
+ <label for="email">Email</label>
+ <input type="email" name="email" id="email" required>
+ <br>
+ <input type="submit" class="btn btn-primary" value="Send password change link">
+ </form>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/slot/index.html b/templates/slot/index.html
new file mode 100644
index 0000000..1a25a1f
--- /dev/null
+++ b/templates/slot/index.html
@@ -0,0 +1,37 @@
+{% extends "layout.html" %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <script>
+ document.getElementById("view-slot-nav").classList.add("active");
+ </script>
+ <div class="span12">
+ <h3>Your booked slots</h3>
+ <table class="table table-condensed">
+ <thead>
+ <tr>
+ <th>Date</th>
+ <th>Slot timings</th>
+ <th>Delete</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for b in bookings %}
+ <tr>
+ <td>{{ b.booking_date|date:"M d, Y" }}</td>
+ <td>{{ b.slot }}</td>
+ {% if now_time < b.start_time %}
+ <td><a class="btn btn-danger" href="{% url 'sbhs_server.slot.views.delete' b.id %}" onclick="return confirm('Are you sure you want to delete booking for slot {{b.slot}} ?');">Delete</a></td>
+ {% else %}
+ <td><a class="btn btn-disabled" disabled="disabled">Delete</a></td>
+ {% endif %}
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/templates/slot/new.html b/templates/slot/new.html
new file mode 100644
index 0000000..c0a8b21
--- /dev/null
+++ b/templates/slot/new.html
@@ -0,0 +1,72 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+
+{% block headerfiles %}
+<script src="{% static "js/bootstrap-datepicker.js" %}"></script>
+<link rel="stylesheet" href="{% static "css/datepicker.css" %}">
+{% endblock %}
+
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <script>
+ document.getElementById("book-slot-nav").classList.add("active");
+ </script>
+ <div class="span12">
+ <h3>Book slot</h3>
+ {% if cur_slots|length > 0 %}
+ <h4>Current slot {{ cur_slots.0 }} is vacant</h4>
+ <form action="{% url 'sbhs_server.slot.views.create' %}" method="POST">
+ {% csrf_token %}
+ <input type="hidden" name="slot" value="{{ cur_slots.0.id }}">
+ <input type="hidden" name="date" value="CURRENT">
+ <input type="submit" value="Book now" class="btn btn-primary">
+ </form>
+ {% endif %}
+ <br><br>
+ <h4>Book future slots</h4>
+ <form action="{% url 'sbhs_server.slot.views.create' %}" method="POST">
+ {% csrf_token %}
+ <label for="date">Booking date</label> <br>
+ <div class="input-append date" id="dp1" data-date="{{ nowdate }}" data-date-format="yyyy-mm-dd">
+ <input name="date" id="date" class="span2" size="16" type="text" value="{{ nowdate }}" readonly>
+ <span class="add-on"><i class="icon-calendar"></i></span>
+ </div>
+ <div id="slotTimingWrap">
+ <label for="slot">Free slot timings</label>
+ <select name="slot" id="slot">
+ {% for s in all_slots %}
+ <option value="{{ s.id }}">{{ s }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <br>
+ <input type="submit" value="Book this slot" class="btn">
+ </form>
+ </div>
+ </div>
+</div>
+<script>
+(function(){
+ $("#date").val("{{ nowdate }}");
+ var nowTemp = new Date();
+ var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);
+
+ var DP1 = $('#dp1').datepicker({
+ onRender: function(date) {
+ return date.valueOf() < now.valueOf() ? 'disabled' : '';
+ }
+ }).on('changeDate', function(ev) {
+ var newDate = new Date(ev.date);
+ var string = newDate.getFullYear() + "-" + (newDate.getMonth() + 1) + "-" + newDate.getDate();
+ $.ajax({
+ url: "{% url 'sbhs_server.slot.views.show' '' %}" + string,
+ success: function(msg) {
+ $("#slotTimingWrap").html(msg);
+ }
+ })
+ }).data('datepicker');
+})();
+</script>
+{% endblock %} \ No newline at end of file
diff --git a/templates/slot/show.html b/templates/slot/show.html
new file mode 100644
index 0000000..1777e31
--- /dev/null
+++ b/templates/slot/show.html
@@ -0,0 +1,6 @@
+<label for="future_slot">Free slot timings</label>
+<select name="slot" id="future_slot">
+{% for s in all_slots %}
+ <option value="{{ s.id }}">{{ s }}</option>
+{% endfor %}
+</select> \ No newline at end of file
diff --git a/templates/webcam/show_video.html b/templates/webcam/show_video.html
new file mode 100644
index 0000000..c88cc9a
--- /dev/null
+++ b/templates/webcam/show_video.html
@@ -0,0 +1,61 @@
+{% extends "layout.html" %}
+{% load staticfiles %}
+{% block content %}
+<div class="container">
+ <div class="row">
+ {% include "account/sub_nav.html" %}
+ <script>
+ document.getElementById("video-nav").classList.add("active");
+ </script>
+ <div class="span12">
+ <h3>SBHS live feed: Machine ID {{ mid }}</h3>
+ <div class="span4 offset4" style="text-align: center">
+ </div>
+
+
+
+ {% if mid > 10 %}
+
+ <img id="videoImage" src="http://10.102.152.16:8080/webcams/{{ mid }}/get_image_data" alt="SBHS live feed" class="span4 offset4" style="padding-bottom: 20px;">
+
+
+
+ {% else %}
+
+
+ <img id="videoImage" src="{% static image_link %}" alt="SBHS live feed" class="span4 offset4">
+{% endif %}
+ <div class="span4 offset4" style="text-align: center">
+ <a href="#" onclick="image_reloader()" id="image_reloader" class="btn btn-primary btn-large">Refresh image</a>
+
+ </div>
+ </div>
+ </div>
+</div>
+<script>
+{% if user.is_admin %}
+setInterval(function() {
+ var refresh = new Image();
+ refresh.src = "{% url 'sbhs_server.webcam.views.reload' mid %}";
+ document.getElementById("videoImage").src = "{% static image_link %}?" + new Date().getTime();
+}, 2000);
+{% else %}
+window.image_reloader = function() {
+ var button = document.getElementById("image_reloader");
+
+
+ if (!button.disabled) {
+ button.setAttribute("disabled", true);
+ var refresh = new Image();
+ refresh.src = "{% url 'sbhs_server.webcam.views.reload' mid %}";
+ document.getElementById("videoImage").src = "{% static image_link %}?" + new Date().getTime();
+ setTimeout(function(){
+ button.removeAttribute('disabled');
+ }, 3000);
+ }
+};
+
+(function(){image_reloader();})();
+{% endif %}
+</script>
+{% endblock %}