Home | History | Annotate | Download | only in include
      1 /*
      2  * noVNC: HTML5 VNC client
      3  * Copyright (C) 2011 Joel Martin
      4  * Licensed under LGPL-3 (see LICENSE.txt)
      5  *
      6  * See README.md for usage and integration instructions.
      7  */
      8 
      9 "use strict";
     10 /*jslint bitwise: false, white: false */
     11 /*global Util, window, document */
     12 
     13 // Globals defined here
     14 var WebUtil = {}, $D;
     15 
     16 /*
     17  * Simple DOM selector by ID
     18  */
     19 if (!window.$D) {
     20     window.$D = function (id) {
     21         if (document.getElementById) {
     22             return document.getElementById(id);
     23         } else if (document.all) {
     24             return document.all[id];
     25         } else if (document.layers) {
     26             return document.layers[id];
     27         }
     28         return undefined;
     29     };
     30 }
     31 
     32 
     33 /*
     34  * ------------------------------------------------------
     35  * Namespaced in WebUtil
     36  * ------------------------------------------------------
     37  */
     38 
     39 // init log level reading the logging HTTP param
     40 WebUtil.init_logging = function() {
     41     Util._log_level = (document.location.href.match(
     42          /logging=([A-Za-z0-9\._\-]*)/) ||
     43          ['', Util._log_level])[1];
     44 
     45     Util.init_logging();
     46 };
     47 WebUtil.init_logging();
     48 
     49 
     50 WebUtil.dirObj = function (obj, depth, parent) {
     51     var i, msg = "", val = "";
     52     if (! depth) { depth=2; }
     53     if (! parent) { parent= ""; }
     54 
     55     // Print the properties of the passed-in object
     56     for (i in obj) {
     57         if ((depth > 1) && (typeof obj[i] === "object")) {
     58             // Recurse attributes that are objects
     59             msg += WebUtil.dirObj(obj[i], depth-1, parent + "." + i);
     60         } else {
     61             //val = new String(obj[i]).replace("\n", " ");
     62             if (typeof(obj[i]) === "undefined") {
     63                 val = "undefined";
     64             } else {
     65                 val = obj[i].toString().replace("\n", " ");
     66             }
     67             if (val.length > 30) {
     68                 val = val.substr(0,30) + "...";
     69             }
     70             msg += parent + "." + i + ": " + val + "\n";
     71         }
     72     }
     73     return msg;
     74 };
     75 
     76 // Read a query string variable
     77 WebUtil.getQueryVar = function(name, defVal) {
     78     var re = new RegExp('[?][^#]*' + name + '=([^&#]*)');
     79     if (typeof defVal === 'undefined') { defVal = null; }
     80     return (document.location.href.match(re) || ['',defVal])[1];
     81 };
     82 
     83 
     84 /*
     85  * Cookie handling. Dervied from: http://www.quirksmode.org/js/cookies.html
     86  */
     87 
     88 // No days means only for this browser session
     89 WebUtil.createCookie = function(name,value,days) {
     90     var date, expires;
     91     if (days) {
     92         date = new Date();
     93         date.setTime(date.getTime()+(days*24*60*60*1000));
     94         expires = "; expires="+date.toGMTString();
     95     }
     96     else {
     97         expires = "";
     98     }
     99     document.cookie = name+"="+value+expires+"; path=/";
    100 };
    101 
    102 WebUtil.readCookie = function(name, defaultValue) {
    103     var i, c, nameEQ = name + "=", ca = document.cookie.split(';');
    104     for(i=0; i < ca.length; i += 1) {
    105         c = ca[i];
    106         while (c.charAt(0) === ' ') { c = c.substring(1,c.length); }
    107         if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); }
    108     }
    109     return (typeof defaultValue !== 'undefined') ? defaultValue : null;
    110 };
    111 
    112 WebUtil.eraseCookie = function(name) {
    113     WebUtil.createCookie(name,"",-1);
    114 };
    115 
    116 /*
    117  * Alternate stylesheet selection
    118  */
    119 WebUtil.getStylesheets = function() { var i, links, sheets = [];
    120     links = document.getElementsByTagName("link");
    121     for (i = 0; i < links.length; i += 1) {
    122         if (links[i].title &&
    123             links[i].rel.toUpperCase().indexOf("STYLESHEET") > -1) {
    124             sheets.push(links[i]);
    125         }
    126     }
    127     return sheets;
    128 };
    129 
    130 // No sheet means try and use value from cookie, null sheet used to
    131 // clear all alternates.
    132 WebUtil.selectStylesheet = function(sheet) {
    133     var i, link, sheets = WebUtil.getStylesheets();
    134     if (typeof sheet === 'undefined') {
    135         sheet = 'default';
    136     }
    137     for (i=0; i < sheets.length; i += 1) {
    138         link = sheets[i];
    139         if (link.title === sheet) {
    140             Util.Debug("Using stylesheet " + sheet);
    141             link.disabled = false;
    142         } else {
    143             //Util.Debug("Skipping stylesheet " + link.title);
    144             link.disabled = true;
    145         }
    146     }
    147     return sheet;
    148 };
    149