Mhttpd.js: Difference between revisions
|  (→About) | |||
| Line 26: | Line 26: | ||
| = Functions = | = Functions = | ||
| function getMouseXY(e) | |||
| { | |||
|    try { | |||
|       var x = e.pageX; | |||
|       var y = e.pageY; | |||
|       var p = 'abs: ' + x + '/' + y; | |||
|       i = document.getElementById('refimg'); | |||
|       if (i == null) | |||
|          return false; | |||
|       document.body.style.cursor = 'crosshair'; | |||
|       x -= i.offsetLeft; | |||
|       y -= i.offsetTop; | |||
|       while (i = i.offsetParent) { | |||
|          x -= i.offsetLeft; | |||
|          y -= i.offsetTop; | |||
|       } | |||
|       p += '   rel: ' + x + '/' + y; | |||
|       window.status = p; | |||
|       return true; | |||
|       } | |||
|    catch (e) { | |||
|       return false; | |||
|    } | |||
| } | |||
| function XMLHttpRequestGeneric() | |||
| { | |||
|    var request; | |||
|    try { | |||
|       request = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari | |||
|    } | |||
|    catch (e) { | |||
|       try { | |||
|          request = new ActiveXObject('Msxml2.XMLHTTP'); // Internet Explorer | |||
|       } | |||
|       catch (e) { | |||
|          try { | |||
|             request = new ActiveXObject('Microsoft.XMLHTTP'); | |||
|          } | |||
|          catch (e) { | |||
|            alert('Your browser does not support AJAX!'); | |||
|            return undefined; | |||
|          } | |||
|       } | |||
|    } | |||
|    return request; | |||
| } | |||
| function ODBSet(path, value, pwdname) | |||
| { | |||
|    var value, request, url; | |||
|    if (pwdname != undefined) | |||
|       pwd = prompt('Please enter password', ''); | |||
|    else | |||
|       pwd = ''; | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    url = '?cmd=jset&odb=' + path + '&value=' + value; | |||
|    if (pwdname != undefined) | |||
|       url += '&pnam=' + pwdname; | |||
|    request.open('GET', url, false); | |||
|    if (pwdname != undefined) | |||
|       request.setRequestHeader('Cookie', 'cpwd='+pwd); | |||
|    request.send(null); | |||
|    if (request.status != 200 || request.responseText != 'OK')  | |||
|       alert('ODBSet error:\nPath: '+path+'\nHTTP Status: '+request.status+'\nMessage: '+request.responseText+'\n'+document.location) ; | |||
| } | |||
| function ODBGet(path, format, defval, len, type) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jget&odb=' + path; | |||
|    if (format != undefined && format != '') | |||
|       url += '&format=' + format; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    if (path.match(/[*]/)) { | |||
|       if (request.responseText == null) | |||
|          return null; | |||
|       if (request.responseText == '<DB_NO_KEY>') { | |||
|          url = '?cmd=jset&odb=' + path + '&value=' + defval + '&len=' + len + '&type=' + type; | |||
|          request.open('GET', url, false); | |||
|          request.send(null); | |||
|          return defval; | |||
|       } else { | |||
|          var array = request.responseText.split('\n'); | |||
|          return array; | |||
|       } | |||
|    } else { | |||
|       if ((request.responseText == '<DB_NO_KEY>' || | |||
|            request.responseText == '<DB_OUT_OF_RANGE>') && defval != undefined) { | |||
|          url = '?cmd=jset&odb=' + path + '&value=' + defval + '&len=' + len + '&type=' + type; | |||
|          request.open('GET', url, false); | |||
|          request.send(null); | |||
|          return defval; | |||
|       } | |||
|       return request.responseText.split('\n')[0]; | |||
|    } | |||
| } | |||
| function ODBMGet(paths, callback, formats) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jget'; | |||
|    for (var i=0 ; i<paths.length ; i++) { | |||
|       url += '&odb'+i+'='+paths[i]; | |||
|       if (formats != undefined && formats != '') | |||
|          url += '&format'+i+'=' + formats[i]; | |||
|    } | |||
|    if (callback != undefined) { | |||
|       request.onreadystatechange = function()  | |||
|          { | |||
|          if (request.readyState == 4) { | |||
|             if (request.status == 200) { | |||
|                var array = request.responseText.split('$#----#$\n'); | |||
|                for (var i=0 ; i<array.length ; i++) | |||
|                   if (paths[i].match(/[*]/)) { | |||
|                      array[i] = array[i].split('\n'); | |||
|                      array[i].length--; | |||
|                   } else | |||
|                      array[i] = array[i].split('\n')[0]; | |||
|                callback(array); | |||
|             } | |||
|          } | |||
|       } | |||
|       request.open('GET', url, true); | |||
|    } else | |||
|       request.open('GET', url, false); | |||
|    request.send(null); | |||
|    if (callback == undefined) { | |||
|       var array = request.responseText.split('$#----#$\n'); | |||
|       for (var i=0 ; i<array.length ; i++) { | |||
|          if (paths[i].match(/[*]/)) { | |||
|             array[i] = array[i].split('\n'); | |||
|             array[i].length--; | |||
|          } else | |||
|             array[i] = array[i].split('\n')[0]; | |||
|       } | |||
|       return array; | |||
|    } | |||
| } | |||
| function ODBGetRecord(path) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jget&odb=' + path + '&name=1'; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    return request.responseText; | |||
| } | |||
| function ODBExtractRecord(record, key) | |||
| { | |||
|    var array = record.split('\n'); | |||
|    for (var i=0 ; i<array.length ; i++) { | |||
|       var ind = array[i].indexOf(':'); | |||
|       if (ind > 0) { | |||
|          var k = array[i].substr(0, ind); | |||
|          if (k == key) | |||
|             return array[i].substr(ind+1, array[i].length); | |||
|       } | |||
|       var ind = array[i].indexOf('['); | |||
|       if (ind > 0) { | |||
|          var k = array[i].substr(0, ind); | |||
|          if (k == key) { | |||
|             var a = new Array(); | |||
|             for (var j=0 ; ; j++,i++) { | |||
|                if (array[i].substr(0, ind) != key) | |||
|                   break; | |||
|                var k = array[i].indexOf(':'); | |||
|                a[j] = array[i].substr(k+1, array[i].length); | |||
|             } | |||
|             return a; | |||
|          } | |||
|       } | |||
|    } | |||
|    return null; | |||
| } | |||
| function ODBKey(path) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jkey&odb=' + path; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    if (request.responseText == null) | |||
|       return null; | |||
|    var res = request.responseText.split('\n'); | |||
|    this.name = res[0]; | |||
|    this.type = res[1]; | |||
|    this.num_values = res[2]; | |||
|    this.item_size = res[3]; | |||
|    this.last_written = res[4]; | |||
| } | |||
| function ODBCopy(path, format) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jcopy&odb=' + path; | |||
|    if (format != undefined && format != '') | |||
|       url += '&format=' + format; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    return request.responseText; | |||
| } | |||
| function ODBRpc_rev0(name, rpc, args) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jrpc_rev0&name=' + name + '&rpc=' + rpc; | |||
|    for (var i = 2; i < arguments.length; i++) { | |||
|      url += '&arg'+(i-2)+'='+arguments[i]; | |||
|    }; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    if (request.responseText == null) | |||
|       return null; | |||
|    this.reply = request.responseText.split('\n'); | |||
| } | |||
| function ODBRpc_rev1(name, rpc, max_reply_length, args) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jrpc_rev1&name=' + name + '&rpc=' + rpc + '&max_reply_length=' + max_reply_length; | |||
|    for (var i = 3; i < arguments.length; i++) { | |||
|      url += '&arg'+(i-3)+'='+arguments[i]; | |||
|    }; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    if (request.responseText == null) | |||
|       return null; | |||
|    return request.responseText; | |||
| } | |||
| function ODBGetMsg(n) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jmsg&n=' + n; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    if (n > 1) { | |||
|       var array = request.responseText.split('\n'); | |||
|       return array; | |||
|    } else | |||
|       return request.responseText; | |||
| } | |||
| function ODBGenerateMsg(m) | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    var url = '?cmd=jgenmsg&msg=' + m; | |||
|    request.open('GET', url, false); | |||
|    request.send(null); | |||
|    return request.responseText; | |||
| } | |||
| function ODBGetAlarms() | |||
| { | |||
|    var request = XMLHttpRequestGeneric(); | |||
|    request.open('GET', '?cmd=jalm', false); | |||
|    request.send(null); | |||
|    var a = request.responseText.split('\n'); | |||
|    a.length = a.length-1; | |||
|    return a; | |||
| } | |||
| function ODBEdit(path) | |||
| { | |||
|    var value = ODBGet(path); | |||
|    var new_value = prompt('Please enter new value', value); | |||
|    if (new_value != undefined) { | |||
|       ODBSet(path, new_value); | |||
|       window.location.reload(); | |||
|    } | |||
| } | |||
Revision as of 21:47, 12 August 2013
About
mhttpd.js contains javascript function wrappers for most MIDAS AJAX functions typically used for implementing interactive custom pages for MIDAS experiments.
mhttpd.js is typically served by mhttpd from $MIDASSYS/resources/mhttpd.js
<html> <head> ... <script src='mhttpd.js'></script> ... </head> ... </html>
A mostly up to date copy of mhttpd.js is linked here:
An example for using all mhttpd.js functions is included in the MIDAS distribution under examples/javascript1:
- http://ladd00.triumf.ca/~daqweb/doc/midas/examples/javascript1/
- http://ladd00.triumf.ca/~daqweb/doc/midas/examples/javascript1/example.html
Functions
function getMouseXY(e) {
  try {
     var x = e.pageX;
     var y = e.pageY;
     var p = 'abs: ' + x + '/' + y;
     i = document.getElementById('refimg');
     if (i == null)
        return false;
     document.body.style.cursor = 'crosshair';
     x -= i.offsetLeft;
     y -= i.offsetTop;
     while (i = i.offsetParent) {
        x -= i.offsetLeft;
        y -= i.offsetTop;
     }
     p += '   rel: ' + x + '/' + y;
     window.status = p;
     return true;
     }
  catch (e) {
     return false;
  }
}
function XMLHttpRequestGeneric() {
  var request;
  try {
     request = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
  }
  catch (e) {
     try {
        request = new ActiveXObject('Msxml2.XMLHTTP'); // Internet Explorer
     }
     catch (e) {
        try {
           request = new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch (e) {
          alert('Your browser does not support AJAX!');
          return undefined;
        }
     }
  }
return request;
}
function ODBSet(path, value, pwdname) {
var value, request, url;
  if (pwdname != undefined)
     pwd = prompt('Please enter password', );
  else
     pwd = ;
var request = XMLHttpRequestGeneric();
url = '?cmd=jset&odb=' + path + '&value=' + value;
  if (pwdname != undefined)
     url += '&pnam=' + pwdname;
  request.open('GET', url, false);
  if (pwdname != undefined)
     request.setRequestHeader('Cookie', 'cpwd='+pwd);
request.send(null);
  if (request.status != 200 || request.responseText != 'OK') 
     alert('ODBSet error:\nPath: '+path+'\nHTTP Status: '+request.status+'\nMessage: '+request.responseText+'\n'+document.location) ;
}
function ODBGet(path, format, defval, len, type) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jget&odb=' + path;
  if (format != undefined && format != )
     url += '&format=' + format;
  request.open('GET', url, false);
  request.send(null);
  if (path.match(/[*]/)) {
     if (request.responseText == null)
        return null;
     if (request.responseText == '<DB_NO_KEY>') {
        url = '?cmd=jset&odb=' + path + '&value=' + defval + '&len=' + len + '&type=' + type;
        request.open('GET', url, false);
        request.send(null);
        return defval;
     } else {
        var array = request.responseText.split('\n');
        return array;
     }
  } else {
     if ((request.responseText == '<DB_NO_KEY>' ||
          request.responseText == '<DB_OUT_OF_RANGE>') && defval != undefined) {
        url = '?cmd=jset&odb=' + path + '&value=' + defval + '&len=' + len + '&type=' + type;
        request.open('GET', url, false);
        request.send(null);
        return defval;
     }
     return request.responseText.split('\n')[0];
  }
}
function ODBMGet(paths, callback, formats) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jget';
  for (var i=0 ; i<paths.length ; i++) {
     url += '&odb'+i+'='+paths[i];
     if (formats != undefined && formats != )
        url += '&format'+i+'=' + formats[i];
  }
  if (callback != undefined) {
     request.onreadystatechange = function() 
        {
        if (request.readyState == 4) {
           if (request.status == 200) {
              var array = request.responseText.split('$#----#$\n');
              for (var i=0 ; i<array.length ; i++)
                 if (paths[i].match(/[*]/)) {
                    array[i] = array[i].split('\n');
                    array[i].length--;
                 } else
                    array[i] = array[i].split('\n')[0];
              callback(array);
           }
        }
     }
     request.open('GET', url, true);
  } else
     request.open('GET', url, false);
  request.send(null);
  if (callback == undefined) {
     var array = request.responseText.split('$#----#$\n');
     for (var i=0 ; i<array.length ; i++) {
        if (paths[i].match(/[*]/)) {
           array[i] = array[i].split('\n');
           array[i].length--;
        } else
           array[i] = array[i].split('\n')[0];
     }
     return array;
  }
}
function ODBGetRecord(path) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jget&odb=' + path + '&name=1';
  request.open('GET', url, false);
  request.send(null);
  return request.responseText;
}
function ODBExtractRecord(record, key) {
  var array = record.split('\n');
  for (var i=0 ; i<array.length ; i++) {
     var ind = array[i].indexOf(':');
     if (ind > 0) {
        var k = array[i].substr(0, ind);
        if (k == key)
           return array[i].substr(ind+1, array[i].length);
     }
     var ind = array[i].indexOf('[');
     if (ind > 0) {
        var k = array[i].substr(0, ind);
        if (k == key) {
           var a = new Array();
           for (var j=0 ; ; j++,i++) {
              if (array[i].substr(0, ind) != key)
                 break;
              var k = array[i].indexOf(':');
              a[j] = array[i].substr(k+1, array[i].length);
           }
           return a;
        }
     }
  }
  return null;
}
function ODBKey(path) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jkey&odb=' + path;
  request.open('GET', url, false);
  request.send(null);
  if (request.responseText == null)
     return null;
  var res = request.responseText.split('\n');
  this.name = res[0];
  this.type = res[1];
  this.num_values = res[2];
  this.item_size = res[3];
  this.last_written = res[4];
}
function ODBCopy(path, format) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jcopy&odb=' + path;
  if (format != undefined && format != )
     url += '&format=' + format;
  request.open('GET', url, false);
  request.send(null);
  return request.responseText;
}
function ODBRpc_rev0(name, rpc, args) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jrpc_rev0&name=' + name + '&rpc=' + rpc;
  for (var i = 2; i < arguments.length; i++) {
    url += '&arg'+(i-2)+'='+arguments[i];
  };
  request.open('GET', url, false);
  request.send(null);
  if (request.responseText == null)
     return null;
  this.reply = request.responseText.split('\n');
}
function ODBRpc_rev1(name, rpc, max_reply_length, args) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jrpc_rev1&name=' + name + '&rpc=' + rpc + '&max_reply_length=' + max_reply_length;
  for (var i = 3; i < arguments.length; i++) {
    url += '&arg'+(i-3)+'='+arguments[i];
  };
  request.open('GET', url, false);
  request.send(null);
  if (request.responseText == null)
     return null;
  return request.responseText;
}
function ODBGetMsg(n) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jmsg&n=' + n;
  request.open('GET', url, false);
  request.send(null);
  if (n > 1) {
     var array = request.responseText.split('\n');
     return array;
  } else
     return request.responseText;
}
function ODBGenerateMsg(m) {
var request = XMLHttpRequestGeneric();
  var url = '?cmd=jgenmsg&msg=' + m;
  request.open('GET', url, false);
  request.send(null);
  return request.responseText;
}
function ODBGetAlarms() {
  var request = XMLHttpRequestGeneric();
  request.open('GET', '?cmd=jalm', false);
  request.send(null);
  var a = request.responseText.split('\n');
  a.length = a.length-1;
  return a;
}
function ODBEdit(path) {
  var value = ODBGet(path);
  var new_value = prompt('Please enter new value', value);
  if (new_value != undefined) {
     ODBSet(path, new_value);
     window.location.reload();
  }
}