1&&(r+='
'+o+""),r+='
'+n+s+t+""}}}(a,n),n.update()}return window.Chart&&s(Chart,(a={defaults:{global:{responsive:!0,maintainAspectRatio:!1,defaultColor:"dark"==n?o.gray[700]:o.gray[600],defaultFontColor:"dark"==n?o.gray[700]:o.gray[600],defaultFontFamily:t.base,defaultFontSize:13,layout:{padding:0},legend:{display:!1,position:"bottom",labels:{usePointStyle:!0,padding:16}},elements:{point:{radius:0,backgroundColor:o.theme.primary},line:{tension:.4,borderWidth:4,borderColor:o.theme.primary,backgroundColor:o.transparent,borderCapStyle:"rounded"},rectangle:{backgroundColor:o.theme.warning},arc:{backgroundColor:o.theme.primary,borderColor:"dark"==n?o.gray[800]:o.white,borderWidth:4}},tooltips:{enabled:!0,mode:"index",intersect:!1}},doughnut:{cutoutPercentage:83,legendCallback:function(a){var e=a.data,n="";return e.labels.forEach(function(a,t){var o=e.datasets[0].backgroundColor[t];n+='
',n+='',n+=a,n+=""}),n}}}},Chart.scaleService.updateScaleDefaults("linear",{gridLines:{borderDash:[2],borderDashOffset:[2],color:"dark"==n?o.gray[900]:o.gray[300],drawBorder:!1,drawTicks:!1,drawOnChartArea:!0,zeroLineWidth:0,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{beginAtZero:!0,padding:10,callback:function(a){if(!(a%10))return a}}}),Chart.scaleService.updateScaleDefaults("category",{gridLines:{drawBorder:!1,drawOnChartArea:!1,drawTicks:!1},ticks:{padding:20},maxBarThickness:10}),a)),e.on({change:function(){var a=$(this);a.is("[data-add]")&&r(a)},click:function(){var a=$(this);a.is("[data-update]")&&i(a)}}),{colors:o,fonts:t,mode:n}}(),CopyIcon=function(){var a,e=".btn-icon-clipboard",n=$(e);n.length&&((a=n).tooltip().on("mouseleave",function(){a.tooltip("hide")}),new ClipboardJS(e).on("success",function(a){$(a.trigger).attr("title","Copied!").tooltip("_fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("_fixTitle"),a.clearSelection()}))}(),Navbar=function(){var a=$(".navbar-nav, .navbar-nav .nav"),e=$(".navbar .collapse"),n=$(".navbar .dropdown");e.on({"show.bs.collapse":function(){var n;(n=$(this)).closest(a).find(e).not(n).collapse("hide")}}),n.on({"hide.bs.dropdown":function(){var a,e;a=$(this),(e=a.find(".dropdown-menu")).addClass("close"),setTimeout(function(){e.removeClass("close")},200)}})}(),NavbarCollapse=function(){$(".navbar-nav");var a=$(".navbar .navbar-custom-collapse");a.length&&(a.on({"hide.bs.collapse":function(){a.addClass("collapsing-out")}}),a.on({"hidden.bs.collapse":function(){a.removeClass("collapsing-out")}}));var e=0;$(".sidenav-toggler").click(function(){if(1==e)$("body").removeClass("nav-open"),e=0,$(".bodyClick").remove();else{$('
').appendTo("body").click(function(){$("body").removeClass("nav-open"),e=0,$(".bodyClick").remove()}),$("body").addClass("nav-open"),e=1}})}(),Popover=function(){var a=$('[data-toggle="popover"]'),e="";a.length&&a.each(function(){!function(a){a.data("color")&&(e="popover-"+a.data("color"));var n={trigger:"focus",template:'
'};a.popover(n)}($(this))})}(),ScrollTo=function(){var a=$(".scroll-me, [data-scroll-to], .toc-entry a");function e(a){var e=a.attr("href"),n=a.data("scroll-to-offset")?a.data("scroll-to-offset"):0,t={scrollTop:$(e).offset().top-n};$("html, body").stop(!0,!0).animate(t,600),event.preventDefault()}a.length&&a.on("click",function(a){e($(this))})}(),Tooltip=function(){var a=$('[data-toggle="tooltip"]');a.length&&a.tooltip()}(),FormControl=function(){var a=$(".form-control");a.length&&a.on("focus blur",function(a){$(this).parents(".form-group").toggleClass("focused","focus"===a.type)}).trigger("blur")}(),$map=$("#map-default"),color="#5e72e4";function initMap(){map=document.getElementById("map-default"),lat=map.getAttribute("data-lat"),lng=map.getAttribute("data-lng");var a=new google.maps.LatLng(lat,lng),e={zoom:12,scrollwheel:!1,center:a,mapTypeId:google.maps.MapTypeId.ROADMAP};map=new google.maps.Map(map,e);var n=new google.maps.Marker({position:a,map:map,animation:google.maps.Animation.DROP,title:"Hello World!"}),t=new google.maps.InfoWindow({content:'
Argon Dashboard
A beautiful Dashboard for Bootstrap 4. It is Free and Open Source.
'});google.maps.event.addListener(n,"click",function(){t.open(map,n)})}$map.length&&google.maps.event.addDomListener(window,"load",initMap);var BarsChart=function(){var a=$("#chart-bars");a.length&&function(a){var e=new Chart(a,{type:"bar",data:{labels:["Jul","Aug","Sep","Oct","Nov","Dec"],datasets:[{label:"Sales",data:[25,20,30,22,17,29]}]}});a.data("chart",e)}(a)}(),SalesChart=function(){var a=$("#chart-sales-dark");a.length&&function(a){var e=new Chart(a,{type:"line",options:{scales:{yAxes:[{gridLines:{lineWidth:1,color:Charts.colors.gray[900],zeroLineColor:Charts.colors.gray[900]},ticks:{callback:function(a){if(!(a%10))return"$"+a+"k"}}}]},tooltips:{callbacks:{label:function(a,e){var n=e.datasets[a.datasetIndex].label||"",t=a.yLabel,o="";return e.datasets.length>1&&(o+='
'+n+""),o+='
$'+t+"k"}}}},data:{labels:["May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],datasets:[{label:"Performance",data:[0,20,10,30,15,40,20,60,60]}]}});a.data("chart",e)}(a)}(),Datepicker=function(){var a=$(".datepicker");a.length&&a.each(function(){$(this).datepicker({disableTouchKeyboard:!0,autoclose:!1})})}(),noUiSlider=function(){if($(".input-slider-container")[0]&&$(".input-slider-container").each(function(){var a=$(this).find(".input-slider"),e=a.attr("id"),n=a.data("range-value-min"),t=a.data("range-value-max"),o=$(this).find(".range-slider-value"),s=o.attr("id"),r=o.data("range-value-low"),i=document.getElementById(e),d=document.getElementById(s);noUiSlider.create(i,{start:[parseInt(r)],connect:[!0,!1],range:{min:[parseInt(n)],max:[parseInt(t)]}}),i.noUiSlider.on("update",function(a,e){d.textContent=a[e]})}),$("#input-slider-range")[0]){var a=document.getElementById("input-slider-range"),e=document.getElementById("input-slider-range-value-low"),n=document.getElementById("input-slider-range-value-high"),t=[e,n];noUiSlider.create(a,{start:[parseInt(e.getAttribute("data-range-value-low")),parseInt(n.getAttribute("data-range-value-high"))],connect:!0,range:{min:parseInt(a.getAttribute("data-range-value-min")),max:parseInt(a.getAttribute("data-range-value-max"))}}),a.noUiSlider.on("update",function(a,e){t[e].textContent=a[e]})}}(),Scrollbar=function(){var a=$(".scrollbar-inner");a.length&&a.scrollbar().scrollLock()}();
\ No newline at end of file
diff --git a/yaksh/static/yaksh/js/course.js b/yaksh/static/yaksh/js/course.js
index d469af4..9daf5e5 100644
--- a/yaksh/static/yaksh/js/course.js
+++ b/yaksh/static/yaksh/js/course.js
@@ -90,8 +90,9 @@ $(document).ready(function(){
course_id = data.split("+")[0];
student_id = data.split("+")[1];
var status_div = $("#show_status_"+course_id+"_"+student_id);
- if(!status_div.is(":visible")){
+ if(!status_div.is(":visible")) {
var get_url = $("#url-"+student_id).attr("data-url");
+ lock_screen();
$.ajax({
url: get_url,
timeout: 8000,
@@ -99,10 +100,12 @@ $(document).ready(function(){
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function(data) {
+ unlock_screen();
status_div.toggle();
status_div.html(data.user_data);
},
error: function(jqXHR, textStatus) {
+ unlock_screen();
alert("Unable to get user data. Please Try again later.");
}
});
@@ -130,3 +133,11 @@ $(document).ready(function(){
});
}); // end document ready
+
+function lock_screen() {
+ document.getElementById("loader").style.display = "block";
+}
+
+function unlock_screen() {
+ document.getElementById("loader").style.display = "none";
+}
diff --git a/yaksh/static/yaksh/js/js.cookie.js b/yaksh/static/yaksh/js/js.cookie.js
new file mode 100644
index 0000000..9a0945e
--- /dev/null
+++ b/yaksh/static/yaksh/js/js.cookie.js
@@ -0,0 +1,165 @@
+/*!
+ * JavaScript Cookie v2.2.0
+ * https://github.com/js-cookie/js-cookie
+ *
+ * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
+ * Released under the MIT license
+ */
+;(function (factory) {
+ var registeredInModuleLoader = false;
+ if (typeof define === 'function' && define.amd) {
+ define(factory);
+ registeredInModuleLoader = true;
+ }
+ if (typeof exports === 'object') {
+ module.exports = factory();
+ registeredInModuleLoader = true;
+ }
+ if (!registeredInModuleLoader) {
+ var OldCookies = window.Cookies;
+ var api = window.Cookies = factory();
+ api.noConflict = function () {
+ window.Cookies = OldCookies;
+ return api;
+ };
+ }
+}(function () {
+ function extend () {
+ var i = 0;
+ var result = {};
+ for (; i < arguments.length; i++) {
+ var attributes = arguments[ i ];
+ for (var key in attributes) {
+ result[key] = attributes[key];
+ }
+ }
+ return result;
+ }
+
+ function init (converter) {
+ function api (key, value, attributes) {
+ var result;
+ if (typeof document === 'undefined') {
+ return;
+ }
+
+ // Write
+
+ if (arguments.length > 1) {
+ attributes = extend({
+ path: '/'
+ }, api.defaults, attributes);
+
+ if (typeof attributes.expires === 'number') {
+ var expires = new Date();
+ expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
+ attributes.expires = expires;
+ }
+
+ // We're using "expires" because "max-age" is not supported by IE
+ attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
+
+ try {
+ result = JSON.stringify(value);
+ if (/^[\{\[]/.test(result)) {
+ value = result;
+ }
+ } catch (e) {}
+
+ if (!converter.write) {
+ value = encodeURIComponent(String(value))
+ .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
+ } else {
+ value = converter.write(value, key);
+ }
+
+ key = encodeURIComponent(String(key));
+ key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
+ key = key.replace(/[\(\)]/g, escape);
+
+ var stringifiedAttributes = '';
+
+ for (var attributeName in attributes) {
+ if (!attributes[attributeName]) {
+ continue;
+ }
+ stringifiedAttributes += '; ' + attributeName;
+ if (attributes[attributeName] === true) {
+ continue;
+ }
+ stringifiedAttributes += '=' + attributes[attributeName];
+ }
+ return (document.cookie = key + '=' + value + stringifiedAttributes);
+ }
+
+ // Read
+
+ if (!key) {
+ result = {};
+ }
+
+ // To prevent the for loop in the first place assign an empty array
+ // in case there are no cookies at all. Also prevents odd result when
+ // calling "get()"
+ var cookies = document.cookie ? document.cookie.split('; ') : [];
+ var rdecode = /(%[0-9A-Z]{2})+/g;
+ var i = 0;
+
+ for (; i < cookies.length; i++) {
+ var parts = cookies[i].split('=');
+ var cookie = parts.slice(1).join('=');
+
+ if (!this.json && cookie.charAt(0) === '"') {
+ cookie = cookie.slice(1, -1);
+ }
+
+ try {
+ var name = parts[0].replace(rdecode, decodeURIComponent);
+ cookie = converter.read ?
+ converter.read(cookie, name) : converter(cookie, name) ||
+ cookie.replace(rdecode, decodeURIComponent);
+
+ if (this.json) {
+ try {
+ cookie = JSON.parse(cookie);
+ } catch (e) {}
+ }
+
+ if (key === name) {
+ result = cookie;
+ break;
+ }
+
+ if (!key) {
+ result[name] = cookie;
+ }
+ } catch (e) {}
+ }
+
+ return result;
+ }
+
+ api.set = api;
+ api.get = function (key) {
+ return api.call(api, key);
+ };
+ api.getJSON = function () {
+ return api.apply({
+ json: true
+ }, [].slice.call(arguments));
+ };
+ api.defaults = {};
+
+ api.remove = function (key, attributes) {
+ api(key, '', extend(attributes, {
+ expires: -1
+ }));
+ };
+
+ api.withConverter = init;
+
+ return api;
+ }
+
+ return init(function () {});
+}));
diff --git a/yaksh/templates/base.html b/yaksh/templates/base.html
index a946c12..fd9cde3 100644
--- a/yaksh/templates/base.html
+++ b/yaksh/templates/base.html
@@ -24,6 +24,8 @@
+
+
@@ -47,6 +49,12 @@
+
+
+
@@ -110,7 +118,7 @@
- {% block footer %}
+