~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-03-15 07:49:26 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:701
Moved "open_exercise_file" from tutorialservice to util.
    Will be used by tutorial app as well.

Show diffs side-by-side

added added

removed removed

Lines of Context:
278
278
            query_string += "&" + encodeURIComponent(arg_key) + "=" +
279
279
                encodeURIComponent(arg_val);
280
280
    }
281
 
    if (query_string == "")
282
 
        query_string = null;
283
 
    else
 
281
    if (query_string != "")
284
282
        /* Drop the first "&" */
285
283
        query_string = query_string.substr(1);
286
284
 
321
319
    else if (("args" in obj) && obj.args != null)
322
320
        query_string = make_query_string(obj.args);
323
321
 
324
 
    if (query_string != null)
 
322
    if (query_string != "" && query_string != null)
325
323
        url += "?" + query_string;
326
324
 
327
325
    return url;
343
341
    return path;
344
342
}
345
343
 
 
344
/** Writes a JSONable object to the cookie under a particular key
 
345
 * (JSON encoded and URL encoded).
 
346
 */
 
347
function write_cookie(key, value)
 
348
{
 
349
    var sendstr = encodeURIComponent(key) + "="
 
350
        + encodeURIComponent(JSON.stringify(value))
 
351
        + "; path=" + urlencode_path(root_dir);
 
352
    /* This actually just assigns to the key, not replacing the whole cookie
 
353
     * as it appears to. */
 
354
    document.cookie = sendstr;
 
355
}
 
356
/** Reads a cookie which has a JSONable object encoded as its value.
 
357
 * Returns the object, parsed from JSON.
 
358
 */
 
359
function read_cookie(key)
 
360
{
 
361
    var cookies = document.cookie.split(";");
 
362
    var checkstart = encodeURIComponent(key) + "=";
 
363
    var checklen = checkstart.length;
 
364
    for (var i=0; i<cookies.length; i++)
 
365
    {
 
366
        var cookie = cookies[i];
 
367
        while (cookie[0] == ' ')
 
368
            cookie = cookie.substr(1);
 
369
        if (cookie.substr(0, checklen) == checkstart)
 
370
        {
 
371
            var valstr = cookie.substr(checklen);
 
372
            valstr = decodeURIComponent(valstr);
 
373
            return JSON.parse(valstr);
 
374
        }
 
375
    }
 
376
}
 
377
 
346
378
/** Given an argument map, as output in the args parameter of the return of
347
379
 * parseurl, gets the first occurence of an argument in the URL string.
348
380
 * If the argument was not found, returns null.
428
460
    {
429
461
        /* FIXME: Encoding not supported here (should not matter if we
430
462
         * only use ASCII names */
431
 
        data += "--" + boundary + "\n"
 
463
        data += "--" + boundary + "\r\n"
432
464
            + "Content-Disposition: form-data; name=\"" + arg_key
433
 
            + "\"\n\n"
434
 
            + arg_val + "\n";
 
465
            + "\"\r\n\r\n"
 
466
            + arg_val + "\r\n";
435
467
    }
436
468
 
437
469
    for (var arg_key in args)
446
478
            extend_data(arg_key, arg_val);
447
479
    }
448
480
    /* End boundary */
449
 
    data += "--" + boundary + "--\n";
 
481
    data += "--" + boundary + "--\r\n";
450
482
 
451
483
    return data;
452
484
}
521
553
    arr.splice(j, i-j);
522
554
}
523
555
 
524
 
/** Makes an XMLHttpRequest call to the server. Waits (synchronously) for a
525
 
 * response, and returns an XMLHttpRequest object containing the completed
526
 
 * response.
 
556
/** Shallow-clones an object */
 
557
function shallow_clone_object(obj)
 
558
{
 
559
    o = {};
 
560
    for (k in obj)
 
561
        o[k] = obj[k];
 
562
    return o;
 
563
}
 
564
 
 
565
/** Returns a new XMLHttpRequest object, in a somewhat browser-agnostic
 
566
 * fashion.
 
567
 */
 
568
function new_xmlhttprequest()
 
569
{
 
570
    try
 
571
    {
 
572
        /* Real Browsers */
 
573
        return new XMLHttpRequest();
 
574
    }
 
575
    catch (e)
 
576
    {
 
577
        /* Internet Explorer */
 
578
        try
 
579
        {
 
580
            return new ActiveXObject("Msxml2.XMLHTTP");
 
581
        }
 
582
        catch (e)
 
583
        {
 
584
            try
 
585
            {
 
586
                return new ActiveXObject("Microsoft.XMLHTTP");
 
587
            }
 
588
            catch (e)
 
589
            {
 
590
                throw("Your browser does not support AJAX. "
 
591
                    + "IVLE requires a modern browser.");
 
592
            }
 
593
        }
 
594
    }
 
595
}
 
596
 
 
597
/** Makes an asynchronous XMLHttpRequest call to the server.
 
598
 * Sends the XMLHttpRequest object containing the completed response to a
 
599
 * specified callback function.
527
600
 *
 
601
 * \param callback A callback function. Will be called when the response is
 
602
 *      complete. Passed 1 parameter, an XMLHttpRequest object containing the
 
603
 *      completed response.
528
604
 * \param app IVLE app to call (such as "fileservice").
529
605
 * \param path URL path to make the request to, within the application.
530
606
 * \param args Argument object, as described in parse_url and friends.
532
608
 * \param content_type String, optional. Only applies if method is "POST".
533
609
 *      May be "application/x-www-form-urlencoded" or "multipart/form-data".
534
610
 *      Defaults to "application/x-www-form-urlencoded".
535
 
 * \return An XMLHttpRequest object containing the completed response.
536
611
 */
537
 
function ajax_call(app, path, args, method, content_type)
 
612
function ajax_call(callback, app, path, args, method, content_type)
538
613
{
539
614
    if (content_type != "multipart/form-data")
540
615
        content_type = "application/x-www-form-urlencoded";
544
619
     * (This is not checked against anywhere else, it is solely defined and
545
620
     * used within this function) */
546
621
    var boundary = "48234n334nu7n4n2ynonjn234t683jyh80j";
547
 
    var xhr = new XMLHttpRequest();
 
622
    var xhr = new_xmlhttprequest();
 
623
    xhr.onreadystatechange = function()
 
624
        {
 
625
            if (xhr.readyState == 4)
 
626
            {
 
627
                callback(xhr);
 
628
            }
 
629
        }
548
630
    if (method == "GET")
549
631
    {
550
632
        /* GET sends the args in the URL */
551
633
        url = build_url({"path": path, "args": args});
552
 
        /* open's 3rd argument = false -> SYNCHRONOUS (wait for response)
553
 
         * (No need for a callback function) */
554
 
        xhr.open(method, url, false);
 
634
        /* open's 3rd argument = true -> asynchronous */
 
635
        xhr.open(method, url, true);
555
636
        xhr.send(null);
556
637
    }
557
638
    else
558
639
    {
559
640
        /* POST sends the args in application/x-www-form-urlencoded */
560
641
        url = encodeURI(path);
561
 
        xhr.open(method, url, false);
 
642
        xhr.open(method, url, true);
562
643
        var message;
563
644
        if (content_type == "multipart/form-data")
564
645
        {
571
652
            xhr.setRequestHeader("Content-Type", content_type);
572
653
            message = make_query_string(args);
573
654
        }
 
655
        xhr.setRequestHeader("Content-Length", message.length);
574
656
        xhr.send(message);
575
657
    }
576
 
    return xhr;
577
658
}
578
659