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

« back to all changes in this revision

Viewing changes to www/media/browser/browser.js

  • Committer: chadnickbok
  • Date: 2009-02-03 03:53:54 UTC
  • Revision ID: svn-v4:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:1193
Fixed a few small issues with the way the Worksheet menus were
being displayed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
66
66
    "missing": "missing.png",
67
67
    "deleted": "deleted.png",
68
68
    "modified": "modified.png",
 
69
    "conflicted": "conflicted.png",
69
70
    "revision": "revision.png"
70
71
};
71
72
 
104
105
/** The listing object returned by the server as JSON */
105
106
file_listing = null;
106
107
current_file = null;
 
108
current_revision = null;
107
109
current_path = "";
108
110
 
109
111
/** Filenames of all files selected
239
241
        return;
240
242
    }
241
243
 
 
244
    var subjects = null;
 
245
    var top_level_dir = path==username;
 
246
    if (top_level_dir)
 
247
    {
 
248
        var req = ajax_call(null, "userservice", "get_enrolments", null, "GET")
 
249
        subjects = decode_response(req);
 
250
    }
 
251
 
 
252
 
242
253
    /* This will always return a listing, whether it is a dir or a file.
243
254
     */
244
255
    var listing = response.responseText;
287
298
    current_file = file_listing["."];     /* Global */
288
299
    delete file_listing["."];
289
300
 
 
301
    if ('revision' in listing)
 
302
    {
 
303
        current_revision = listing.revision;
 
304
    }
 
305
 
290
306
    /* Check if this is a directory listing or file contents */
291
307
    var isdir = response.getResponseHeader("X-IVLE-Return") == "Dir";
292
308
    if (isdir)
293
309
    {
294
 
        handle_dir_listing(path, listing);
 
310
        setup_for_listing();
 
311
        home_listing(listing, subjects, path);
295
312
    }
296
313
    else
297
314
    {
360
377
    upload_callback_count++;
361
378
    if (upload_callback_count >= 2)
362
379
    {
 
380
        myFrame = frames['upload_iframe'].document;
 
381
        data = myFrame.firstChild.childNodes[1].firstChild.firstChild.nodeValue;
 
382
        data = JSON.parse(data);
 
383
        if ('Error' in data)
 
384
            alert("Error: " + decodeURIComponent(data['Error']));
363
385
        document.getElementsByName('data')[0].value = '';
364
386
        refresh();
365
387
    }
427
449
    files.appendChild(txt_elem);
428
450
}
429
451
 
 
452
/** Given a path, filename and optional revision, returns a URL to open that
 
453
 *  revision of that file.
 
454
 */
 
455
function build_revision_url(path, filename, revision)
 
456
{
 
457
    bits = {'path': app_path(this_app, path, filename)};
 
458
    if (current_revision)
 
459
    {
 
460
        bits['query_string'] = 'r=' + revision;
 
461
    }
 
462
    return build_url(bits);
 
463
}
 
464
 
430
465
/** Given a mime type, returns the path to the icon.
431
466
 * \param type String, Mime type.
432
467
 * \param sizelarge Boolean, optional.
492
527
 
493
528
/* Enable or disable actions1 moreactions actions. Takes either a single
494
529
 * name, or an array of them.*/
495
 
function set_action_state(names, which)
 
530
function set_action_state(names, which, allow_on_revision)
496
531
{
497
532
    if (!(names instanceof Array)) names = Array(names);
498
533
 
499
534
    for (var i=0; i < names.length; i++)
500
535
    {
501
536
        element = document.getElementById('act_' + names[i]);
502
 
        if (which)
 
537
        if (which &&
 
538
            !(current_file.svnstatus == 'revision' && !allow_on_revision))
503
539
        {
504
540
            /* Enabling */
505
541
            element.setAttribute("class", "choice");
514
550
    }
515
551
}
516
552
 
 
553
/* Updates the list of available actions based on files selected */
517
554
function update_actions()
518
555
{
519
556
    var file;
520
557
    var numsel = selected_files.length;
 
558
    var svn_selection = false;
 
559
    
 
560
    if (numsel > 0)
 
561
    {
 
562
        svn_selection = true;
 
563
        for (var i = 0; i < selected_files.length; i++){
 
564
            if (file_listing[selected_files[i]]["svnstatus"] == "unversioned")
 
565
            {
 
566
                svn_selection = false;        
 
567
            }
 
568
        }
 
569
    }
 
570
    
521
571
    if (numsel <= 1)
522
572
    {
523
573
        if (numsel == 0)
549
599
        else
550
600
            open.setAttribute("title",
551
601
                "Edit or view this file");
552
 
        open.setAttribute("href", app_path(this_app, current_path, filename));
 
602
        open.setAttribute("href", build_revision_url(current_path, filename,
 
603
                                                     current_revision));
553
604
    }
554
605
    else
555
606
    {
562
613
    /* Available if zero or one files are selected,
563
614
     * and only if this is a file, not a directory */
564
615
    var serve = document.getElementById("act_serve");
565
 
    if (numsel <= 1 && !file.isdir)
 
616
    if (numsel <= 1 && !file.isdir && current_file.svnstatus != 'revision')
566
617
    {
567
618
        serve.setAttribute("class", "choice");
568
619
        serve.setAttribute("onclick",
587
638
     */
588
639
    var run = document.getElementById("act_run");
589
640
     
590
 
    if (!file.isdir && file.type == "text/x-python" && numsel <= 1)
 
641
    if (numsel <= 1 && !file.isdir && file.type == "text/x-python" 
 
642
            && current_file.svnstatus != 'revision')
591
643
    {
592
644
        if (numsel == 0)
593
645
        {
609
661
    }
610
662
 
611
663
    /* Download */
612
 
    /* Always available.
 
664
    /* Always available for current files.
613
665
     * If 0 files selected, download the current file or directory as a ZIP.
614
666
     * If 1 directory selected, download it as a ZIP.
615
667
     * If 1 non-directory selected, download it.
616
668
     * If >1 files selected, download them all as a ZIP.
617
669
     */
618
670
    var download = document.getElementById("act_download");
619
 
    if (numsel <= 1)
620
 
    {
 
671
    if (current_file.svnstatus == 'revision')
 
672
    {
 
673
        download.setAttribute("class", "disabled");
 
674
        download.removeAttribute("onclick");
 
675
    }
 
676
    else if (numsel <= 1)
 
677
    {
 
678
        download.setAttribute("class", "choice")
621
679
        if (numsel == 0)
622
680
        {
623
681
            download.setAttribute("href",
648
706
        for (var i=0; i<numsel; i++)
649
707
            dlpath += "path=" + encodeURIComponent(selected_files[i]) + "&";
650
708
        dlpath = dlpath.substr(0, dlpath.length-1);
 
709
        download.setAttribute("class", "choice")
651
710
        download.setAttribute("href", dlpath);
652
711
        download.setAttribute("title",
653
712
            "Download the selected files as a ZIP file");
663
722
    var pubcond = numsel <= 1 && file.isdir;
664
723
    if (pubcond)
665
724
    {
666
 
        /* TODO: Work out of file is svn'd */
667
725
        /* If this dir is already published, call it "Unpublish" */
668
726
        if (file.published)
669
727
        {
702
760
    /* Subversion actions */
703
761
    /* These are only useful if we are in a versioned directory and have some
704
762
     * files selected. */
705
 
    set_action_state(["svnadd", "svnrevert", "svncommit"], numsel >= 1 && current_file.svnstatus);
706
 
 
707
 
    /* Diff and log only support one path at the moment. */
708
 
    single_versioned_path = (numsel == 1 &&
709
 
                             (svnst = file_listing[selected_files[0]].svnstatus) &&
710
 
                             svnst != "unversioned");
711
 
    set_action_state("svnlog", single_versioned_path);
712
 
    set_action_state("svndiff", single_versioned_path && svnst != "normal");
713
 
 
714
 
    /* current_path == username: We are at the top level */
715
 
    set_action_state("svncheckout", current_path == username);
 
763
    set_action_state(["svnadd",], numsel >= 1 && current_file.svnstatus);
 
764
    /* And these are only usefull is ALL the selected files are versioned */
 
765
    set_action_state(["svnremove", "svnrevert", "svncommit", "svncopy", 
 
766
            "svncut"], numsel >= 1 && current_file.svnstatus && svn_selection);
 
767
    
 
768
    /* Diff, log and update only support one path at the moment, so we must
 
769
     * have 0 or 1 versioned files selected. If 0, the directory must be
 
770
     * versioned. */
 
771
    single_versioned_path = (
 
772
         (
 
773
          (numsel == 1 && (svnst = file_listing[selected_files[0]].svnstatus)) ||
 
774
          (numsel == 0 && (svnst = current_file.svnstatus))
 
775
         ) && svnst != "unversioned");
 
776
    set_action_state(["svndiff", "svnupdate"], single_versioned_path);
 
777
 
 
778
    /* We can resolve if we have a file selected and it is conflicted. */
 
779
    set_action_state("svnresolved", single_versioned_path && numsel == 1 && svnst == "conflicted");
 
780
 
 
781
    /* Log should be available for revisions as well. */
 
782
    set_action_state("svnlog", single_versioned_path, true);
716
783
 
717
784
    /* There is currently nothing on the More Actions menu of use
718
785
     * when the current file is not a directory. Hence, just remove
725
792
    {
726
793
        var actions2_directory = document.getElementById("actions2_directory");
727
794
        actions2_directory.setAttribute("style", "display: inline;");
 
795
        var moreactions = document.getElementById("moreactions_area");
 
796
        moreactions.setAttribute("style", "display: inline;");
728
797
    }
729
798
    else
730
799
    {
731
800
        var actions2_file = document.getElementById("actions2_file");
732
801
        actions2_file.setAttribute("style", "display: inline;");
733
 
        var moreactions = document.getElementById("moreactions_area");
734
 
        moreactions.setAttribute("style", "display: none;");
735
802
    }
736
803
 
737
804
    return;
779
846
        action_rename(filename);
780
847
        break;
781
848
    case "delete":
782
 
        action_remove(selected_files);
 
849
        action_delete(selected_files);
783
850
        break;
784
851
    case "copy":
785
852
        action_copy(selected_files);
802
869
    case "svnadd":
803
870
        action_add(selected_files);
804
871
        break;
 
872
    case "svnremove":
 
873
        action_remove(selected_files);
 
874
        break;
805
875
    case "svnrevert":
806
876
        action_revert(selected_files);
807
877
        break;
808
878
    case "svndiff":
809
 
        window.location = path_join(app_path('diff'), current_path, selected_files[0]);
 
879
        window.location = path_join(app_path('diff'), current_path, selected_files[0] || '');
 
880
        break;
 
881
    case "svnupdate":
 
882
        action_update(selected_files);
 
883
        break;
 
884
    case "svnresolved":
 
885
        action_resolved(selected_files);
810
886
        break;
811
887
    case "svncommit":
812
888
        action_commit(selected_files);
813
889
        break;
814
890
    case "svnlog":
815
 
        window.location = path_join(app_path('svnlog'), current_path, selected_files[0]);
816
 
        break;
817
 
    case "svncheckout":
818
 
        action_checkout();
 
891
        window.location = path_join(app_path('svnlog'), current_path, selected_files[0] || '');
 
892
        break;
 
893
    case "svncopy":
 
894
        action_svncopy(selected_files);
 
895
        break;
 
896
    case "svncut":
 
897
        action_svncut(selected_files);
819
898
        break;
820
899
    }
821
900
}