]> git.parisson.com Git - telemeta.git/commitdiff
Add function to load/unload seminar (for time registering)
authorYoan Le Clanche <yoanl@pilotsystems.net>
Tue, 19 May 2020 09:23:26 +0000 (11:23 +0200)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Tue, 19 May 2020 09:23:26 +0000 (11:23 +0200)
telemeta/static/telemeta/js/application.js

index 313ef896c4af2f8291ba9835ea3229fb2e426039..31dc7c342512c3aefd8e474f80ca8b87a60165ed 100644 (file)
  */
 
 //returns the full path of the current url location removing the last slash '/' followed by one or more '#', if any
-function urlNormalized(){
+function urlNormalized() {
     var sPath = window.location.href;
-    sPath = sPath.replace(/\/#*$/,"");
+    sPath = sPath.replace(/\/#*$/, "");
     return sPath;
 }
 /**
  *sets up few stuff when the page is ready (see functions below it)
  */
-jQuery(document).ready(function() {
+jQuery(document).ready(function () {
     foldInfoBlocks();
     setSelectedMenu();
 });
@@ -50,7 +50,7 @@ function foldInfoBlocks() {
     var $J = jQuery;
     var extra = $J('.extraInfos');
     extra.find('.folded dl, .folded table').css('display', 'none');
-    extra.find('h4').click(function() {
+    extra.find('h4').click(function () {
         $J(this).parents('.extraInfos').children().toggleClass('folded').find('dl, table').toggle(100);
         //toggle toggles the visibility of elements
         return false;
@@ -60,53 +60,53 @@ function foldInfoBlocks() {
 /**
  * Global telemeta function which sets the current selected menu according to the current url
  */
-function setSelectedMenu(){
+function setSelectedMenu() {
     var $J = jQuery;
     var menus = $J('#menu a');
     //build collections/items from http:/site/collections/items,
     //being http:/site/ = window.location.origin
 
     //function for normalizing paths (removes last n occurrences of the slash)
-    var normalize = function(str){
-        return str.replace(/\/+#*$/,"");
+    var normalize = function (str) {
+        return str.replace(/\/+#*$/, "");
     }
 
     var host = window.location.host;
     var protocol = window.location.protocol
     var href = normalize(window.location.href);
 
-    if(!(host) || !(protocol) || !(href)){
+    if (!(host) || !(protocol) || !(href)) {
         return;
     }
 
     //var pageOrigin = normalize(window.location.origin); //does not exist in FF, so:
-    var pageOrigin = normalize(protocol+"//"+host);
+    var pageOrigin = normalize(protocol + "//" + host);
     var pageHref = normalize(href);
 
-    menus.each(function(){
+    menus.each(function () {
         ///if we are at home, the window location href corresponds to window location origin,
         //so we select only links whose link points EXACTLY to the origin (home link)
         var linkHref = normalize(this.href);
         var elm = $J(this);
 
-        if(linkHref.indexOf("#") != -1){
+        if (linkHref.indexOf("#") != -1) {
             var reg = new RegExp("[#]+", "g");
             var baseHref = linkHref.split(reg);
             linkHref = pageOrigin + "/" + baseHref[1]
         }
 
-        if(pageOrigin===pageHref){
-            if(pageHref == linkHref){
+        if (pageOrigin === pageHref) {
+            if (pageHref == linkHref) {
                 elm.addClass('active');
-            }else{
+            } else {
                 elm.removeClass('active');
             }
-        }else{
+        } else {
             //here, on the other hand, we select if a link points to a page or super page
             //of the current page
-            if(linkHref!=pageOrigin && pageHref.match("^"+linkHref+".*")){
+            if (linkHref != pageOrigin && pageHref.match("^" + linkHref + ".*")) {
                 elm.addClass('active');
-            }else{
+            } else {
                 elm.removeClass('active');
             }
         }
@@ -145,34 +145,34 @@ function setSelectedMenu(){
  *       Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror".
  * ****************************************************************************/
 
-var json = function(param,method,onSuccessFcn,onErrorFcn){
+var json = function (param, method, onSuccessFcn, onErrorFcn) {
     //this function converts a javascript object to a string
-    var toString_ = function(string){
-        if(typeof string == "string"){
+    var toString_ = function (string) {
+        if (typeof string == "string") {
             //escapes newlines quotes and backslashes
-            string = string.replace(/\\/g,"\\\\")
-            .replace(/\n/g,"\\n")
-            .replace(/"/g,"\\\"");
+            string = string.replace(/\\/g, "\\\\")
+                .replace(/\n/g, "\\n")
+                .replace(/"/g, "\\\"");
         }
         var array; //used for arrays and objects (see below)
-        if(typeof string == "boolean" || typeof string== "number" || typeof string == "string"){
-            string = '"'+string+'"';
-        }else if(string instanceof Array){
+        if (typeof string == "boolean" || typeof string == "number" || typeof string == "string") {
+            string = '"' + string + '"';
+        } else if (string instanceof Array) {
             array = [];
-            for(var i = 0;i <string.length ; i++){
+            for (var i = 0; i < string.length; i++) {
                 array.push(toString_(string[i])); //recursive invocation
             }
-            string='[';
-            string+=array.join(",");
-            string+=']';
-        }else{
+            string = '[';
+            string += array.join(",");
+            string += ']';
+        } else {
             array = [];
-            for(var k in string){
-                array.push(toString_(k)+":"+toString_(string[k])); //recursive invocation
+            for (var k in string) {
+                array.push(toString_(k) + ":" + toString_(string[k])); //recursive invocation
             }
-            string='{';
-            string+=array.join(",");
-            string+='}';
+            string = '{';
+            string += array.join(",");
+            string += '}';
         }
         return string;
     };
@@ -180,10 +180,10 @@ var json = function(param,method,onSuccessFcn,onErrorFcn){
     //creating the string to send.
     var param2string = toString_(param);
     var data2send = '{"id":"jsonrpc", "params":';
-    data2send+=param2string;
-    data2send+=', "method":"'
-    data2send+=method;
-    data2send+='","jsonrpc":"1.0"}';
+    data2send += param2string;
+    data2send += ', "method":"'
+    data2send += method;
+    data2send += '","jsonrpc":"1.0"}';
 
     var $J = jQuery;
     $J.ajax({
@@ -192,23 +192,23 @@ var json = function(param,method,onSuccessFcn,onErrorFcn){
         contentType: "application/json",
         data: data2send,
         dataType: "json",
-        success: function(data, textStatus, jqXHR){
-            if(onSuccessFcn){
+        success: function (data, textStatus, jqXHR) {
+            if (onSuccessFcn) {
                 onSuccessFcn(data, textStatus, jqXHR);
             }
         },
-        error: function(jqXHR, textStatus, errorThrown){
-            if(onErrorFcn){
+        error: function (jqXHR, textStatus, errorThrown) {
+            if (onErrorFcn) {
                 onErrorFcn(jqXHR, textStatus, errorThrown);
                 return;
             }
             //default:
             var details = "\n(no further info available)";
-            if(jqXHR) {
-                details="\nThe server responded witha status of "+jqXHR.status+" ("+
-                jqXHR.statusText+")\n\nDetails (request responseText):\n"+jqXHR.responseText;
+            if (jqXHR) {
+                details = "\nThe server responded witha status of " + jqXHR.status + " (" +
+                    jqXHR.statusText + ")\n\nDetails (request responseText):\n" + jqXHR.responseText;
             }
-            alert("ERROR: Failed to save"+details);
+            alert("ERROR: Failed to save" + details);
 
         }
     });
@@ -217,34 +217,34 @@ var json = function(param,method,onSuccessFcn,onErrorFcn){
 
 
 
-var json_sync = function(param,method,onSuccessFcn,onErrorFcn){
+var json_sync = function (param, method, onSuccessFcn, onErrorFcn) {
     //this function converts a javascript object to a string
-    var toString_ = function(string){
-        if(typeof string == "string"){
+    var toString_ = function (string) {
+        if (typeof string == "string") {
             //escapes newlines quotes and backslashes
-            string = string.replace(/\\/g,"\\\\")
-            .replace(/\n/g,"\\n")
-            .replace(/"/g,"\\\"");
+            string = string.replace(/\\/g, "\\\\")
+                .replace(/\n/g, "\\n")
+                .replace(/"/g, "\\\"");
         }
         var array; //used for arrays and objects (see below)
-        if(typeof string == "boolean" || typeof string== "number" || typeof string == "string"){
-            string = '"'+string+'"';
-        }else if(string instanceof Array){
+        if (typeof string == "boolean" || typeof string == "number" || typeof string == "string") {
+            string = '"' + string + '"';
+        } else if (string instanceof Array) {
             array = [];
-            for(var i = 0;i <string.length ; i++){
+            for (var i = 0; i < string.length; i++) {
                 array.push(toString_(string[i])); //recursive invocation
             }
-            string='[';
-            string+=array.join(",");
-            string+=']';
-        }else{
+            string = '[';
+            string += array.join(",");
+            string += ']';
+        } else {
             array = [];
-            for(var k in string){
-                array.push(toString_(k)+":"+toString_(string[k])); //recursive invocation
+            for (var k in string) {
+                array.push(toString_(k) + ":" + toString_(string[k])); //recursive invocation
             }
-            string='{';
-            string+=array.join(",");
-            string+='}';
+            string = '{';
+            string += array.join(",");
+            string += '}';
         }
         return string;
     };
@@ -252,50 +252,66 @@ var json_sync = function(param,method,onSuccessFcn,onErrorFcn){
     //creating the string to send.
     var param2string = toString_(param);
     var data2send = '{"id":"jsonrpc", "params":';
-    data2send+=param2string;
-    data2send+=', "method":"'
-    data2send+=method;
-    data2send+='","jsonrpc":"1.0"}';
+    data2send += param2string;
+    data2send += ', "method":"'
+    data2send += method;
+    data2send += '","jsonrpc":"1.0"}';
+
 
     var $J = jQuery;
     $J.ajax({
         type: "POST",
         url: 'json/',
         contentType: "application/json",
-        async : false,
+        async: false,
         data: data2send,
         dataType: "json",
-        success: function(data, textStatus, jqXHR){
-            if(onSuccessFcn){
+        success: function (data, textStatus, jqXHR) {
+            if (onSuccessFcn) {
                 onSuccessFcn(data, textStatus, jqXHR);
             }
         },
-        error: function(jqXHR, textStatus, errorThrown){
-            if(onErrorFcn){
+        error: function (jqXHR, textStatus, errorThrown) {
+            if (onErrorFcn) {
                 onErrorFcn(jqXHR, textStatus, errorThrown);
                 return;
             }
             //default:
             var details = "\n(no further info available)";
-            if(jqXHR) {
-                details="\nThe server responded witha status of "+jqXHR.status+" ("+
-                jqXHR.statusText+")\n\nDetails (request responseText):\n"+jqXHR.responseText;
+            if (jqXHR) {
+                details = "\nThe server responded witha status of " + jqXHR.status + " (" +
+                    jqXHR.statusText + ")\n\nDetails (request responseText):\n" + jqXHR.responseText;
             }
-            alert("ERROR: Failed to save"+details);
+            alert("ERROR: Failed to save" + details);
 
         }
     });
 
 };
 
+function onLoadSeminar(seminarId, username) {
+    // send a request when user load a seminar
+    json([seminarId, username], 'teleforma.seminar_load', function () { return null; });
+}
+
+function onUnloadSeminar(seminarId, username) {
+    try {
+        var params = JSON.stringify({ "id": "jsonrpc", "params": [seminarId, username], "method": "teleforma.seminar_unload", "jsonrpc": "1.0" })
+        navigator.sendBeacon("json/", params);
+    }
+    catch {
+        // compatibility with old navigators
+        json_sync([seminarId, username], 'teleforma.seminar_unload', function () { return null; });
+    }
+}
 
 
 
 /**
  * function for writing to the console. Catches errors, if any (eg, console == undefined) and does nothing in case
  */
-function consolelog(text){
-    if(typeof console != 'undefined'){
+function consolelog(text) {
+    if (typeof console != 'undefined') {
         var c = console;
         if (c.log) {
             c.log(text);