~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/media/common/util.js

  • Committer: mattgiuca
  • Date: 2008-02-24 22:09:16 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:553
Added new app: Settings (UI for userservice).
    (Added app dir, media dir with empty JS file, icon).
apps/__init__.py: Added error message.
dispatch/__init__.py: Added error message.
dispatch/html.py: Added link to Settings at the top
    (a special app).
    Fixed HTML icons (correct size link).
    Catch keyerror on icon which would otherwise be thrown all
    the way up on certain errors.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
/* Expects the following variables to have been declared by JavaScript in
26
26
 * the HTML generated by the server:
27
27
 * - root_dir
28
 
 * - public_host
29
28
 * - username
30
29
 */
31
30
 
311
310
    if (("path" in obj) && obj.path != null)
312
311
    {
313
312
        var path = urlencode_path(obj.path.toString());
314
 
        if (url.length > 0 && path.length > 0 && path.charAt(0) != "/")
 
313
        if (url.length > 0 && path.length > 0 && path[0] != "/")
315
314
            path = "/" + path;
316
315
        url += path;
317
316
    }
342
341
    return path;
343
342
}
344
343
 
345
 
/** Writes a JSONable object to the cookie under a particular key
346
 
 * (JSON encoded and URL encoded).
347
 
 */
348
 
function write_cookie(key, value)
349
 
{
350
 
    var sendstr = encodeURIComponent(key) + "="
351
 
        + encodeURIComponent(JSON.stringify(value))
352
 
        + "; path=" + urlencode_path(root_dir);
353
 
    /* This actually just assigns to the key, not replacing the whole cookie
354
 
     * as it appears to. */
355
 
    document.cookie = sendstr;
356
 
}
357
 
/** Reads a cookie which has a JSONable object encoded as its value.
358
 
 * Returns the object, parsed from JSON.
359
 
 */
360
 
function read_cookie(key)
361
 
{
362
 
    var cookies = document.cookie.split(";");
363
 
    var checkstart = encodeURIComponent(key) + "=";
364
 
    var checklen = checkstart.length;
365
 
    for (var i=0; i<cookies.length; i++)
366
 
    {
367
 
        var cookie = cookies[i];
368
 
        while (cookie[0] == ' ')
369
 
            cookie = cookie.substr(1);
370
 
        if (cookie.substr(0, checklen) == checkstart)
371
 
        {
372
 
            var valstr = cookie.substr(checklen);
373
 
            valstr = decodeURIComponent(valstr);
374
 
            return JSON.parse(valstr);
375
 
        }
376
 
    }
377
 
}
378
 
 
379
344
/** Given an argument map, as output in the args parameter of the return of
380
345
 * parseurl, gets the first occurence of an argument in the URL string.
381
346
 * If the argument was not found, returns null.
426
391
    {
427
392
        arg = arguments[i];
428
393
        if (arg.length == 0) continue;
429
 
        if (arg.charAt(0) == '/')
 
394
        if (arg[0] == '/')
430
395
            path = arg;
431
396
        else
432
397
        {
433
 
            if (path.length > 0 && path.charAt(path.length-1) != '/')
 
398
            if (path.length > 0 && path[path.length-1] != '/')
434
399
                path += '/';
435
400
            path += arg;
436
401
        }
491
456
function pathlist_to_path(pathlist)
492
457
{
493
458
    ret = path_join.apply(null, pathlist);
494
 
    if (ret.charAt(ret.length-1) != '/')
 
459
    if (ret[ret.length-1] != '/')
495
460
        ret += '/';
496
461
    return ret;
497
462
}
512
477
    return make_path(path_join.apply(null, arguments));
513
478
}
514
479
 
515
 
/** Generates an absolute URL to a public application
516
 
 */
517
 
function public_app_path(app /*,...*/)
518
 
{
519
 
    return location.protocol + "//" + public_host
520
 
        + make_path(path_join.apply(null, arguments));
521
 
}
522
 
 
523
480
/** Given a path, gets the "basename" (the last path segment).
524
481
 */
525
482
function path_basename(path)
562
519
    arr.splice(j, i-j);
563
520
}
564
521
 
565
 
/** Shallow-clones an object */
566
 
function shallow_clone_object(obj)
567
 
{
568
 
    o = {};
569
 
    for (k in obj)
570
 
        o[k] = obj[k];
571
 
    return o;
572
 
}
573
 
 
574
 
/** Returns a new XMLHttpRequest object, in a somewhat browser-agnostic
575
 
 * fashion.
576
 
 */
577
 
function new_xmlhttprequest()
578
 
{
579
 
    try
580
 
    {
581
 
        /* Real Browsers */
582
 
        return new XMLHttpRequest();
583
 
    }
584
 
    catch (e)
585
 
    {
586
 
        /* Internet Explorer */
587
 
        try
588
 
        {
589
 
            return new ActiveXObject("Msxml2.XMLHTTP");
590
 
        }
591
 
        catch (e)
592
 
        {
593
 
            try
594
 
            {
595
 
                return new ActiveXObject("Microsoft.XMLHTTP");
596
 
            }
597
 
            catch (e)
598
 
            {
599
 
                throw("Your browser does not support AJAX. "
600
 
                    + "IVLE requires a modern browser.");
601
 
            }
602
 
        }
603
 
    }
604
 
}
605
 
 
606
 
/** Creates a random string of length length,
607
 
 * consisting of alphanumeric characters.
608
 
 */
609
 
var rand_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"
610
 
               + "abcdefghiklmnopqrstuvwxyz";
611
 
function random_string(length)
612
 
{
613
 
    var str = Array(length);
614
 
    var v;
615
 
    for (var i=0; i<length; i++)
616
 
    {
617
 
        v = Math.floor(Math.random() * rand_chars.length);
618
 
        str[i] = rand_chars.charAt(v);
619
 
    }
620
 
    return str.join('');
621
 
}
622
 
 
623
 
/** Makes an asynchronous XMLHttpRequest call to the server.
624
 
 * Sends the XMLHttpRequest object containing the completed response to a
625
 
 * specified callback function.
 
522
/** Makes an XMLHttpRequest call to the server. Waits (synchronously) for a
 
523
 * response, and returns an XMLHttpRequest object containing the completed
 
524
 * response.
626
525
 *
627
 
 * \param callback A callback function. Will be called when the response is
628
 
 *      complete. Passed 1 parameter, an XMLHttpRequest object containing the
629
 
 *      completed response.
630
526
 * \param app IVLE app to call (such as "fileservice").
631
527
 * \param path URL path to make the request to, within the application.
632
528
 * \param args Argument object, as described in parse_url and friends.
634
530
 * \param content_type String, optional. Only applies if method is "POST".
635
531
 *      May be "application/x-www-form-urlencoded" or "multipart/form-data".
636
532
 *      Defaults to "application/x-www-form-urlencoded".
 
533
 * \return An XMLHttpRequest object containing the completed response.
637
534
 */
638
 
function ajax_call(callback, app, path, args, method, content_type)
 
535
function ajax_call(app, path, args, method, content_type)
639
536
{
640
537
    if (content_type != "multipart/form-data")
641
538
        content_type = "application/x-www-form-urlencoded";
644
541
    /* A random string, for multipart/form-data
645
542
     * (This is not checked against anywhere else, it is solely defined and
646
543
     * used within this function) */
647
 
    var boundary = random_string(20);
648
 
    var xhr = new_xmlhttprequest();
649
 
    xhr.onreadystatechange = function()
650
 
        {
651
 
            if (xhr.readyState == 4)
652
 
            {
653
 
                callback(xhr);
654
 
            }
655
 
        }
 
544
    var boundary = "48234n334nu7n4n2ynonjn234t683jyh80j";
 
545
    var xhr = new XMLHttpRequest();
656
546
    if (method == "GET")
657
547
    {
658
548
        /* GET sends the args in the URL */
659
549
        url = build_url({"path": path, "args": args});
660
 
        /* open's 3rd argument = true -> asynchronous */
661
 
        xhr.open(method, url, true);
 
550
        /* open's 3rd argument = false -> SYNCHRONOUS (wait for response)
 
551
         * (No need for a callback function) */
 
552
        xhr.open(method, url, false);
662
553
        xhr.send(null);
663
554
    }
664
555
    else
665
556
    {
666
557
        /* POST sends the args in application/x-www-form-urlencoded */
667
558
        url = encodeURI(path);
668
 
        xhr.open(method, url, true);
 
559
        xhr.open(method, url, false);
669
560
        var message;
670
561
        if (content_type == "multipart/form-data")
671
562
        {
672
563
            xhr.setRequestHeader("Content-Type",
673
 
                "multipart/form-data; boundary=" + boundary);
 
564
                "multipart/form-data, boundary=" + boundary);
674
565
            message = make_multipart_formdata(args, boundary);
675
566
        }
676
567
        else
678
569
            xhr.setRequestHeader("Content-Type", content_type);
679
570
            message = make_query_string(args);
680
571
        }
 
572
        xhr.setRequestHeader("Content-Length", message.length);
681
573
        xhr.send(message);
682
574
    }
 
575
    return xhr;
683
576
}
684
577