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

« back to all changes in this revision

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

  • Committer: wagrant
  • Date: 2008-07-16 00:24:07 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:879
diffservice, fileservice_lib: Factor out conversion of strings to
      revision specifications, to common.svn.

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",
70
69
    "revision": "revision.png"
71
70
};
72
71
 
105
104
/** The listing object returned by the server as JSON */
106
105
file_listing = null;
107
106
current_file = null;
108
 
current_revision = null;
109
107
current_path = "";
110
108
 
111
109
/** Filenames of all files selected
241
239
        return;
242
240
    }
243
241
 
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
 
 
253
242
    /* This will always return a listing, whether it is a dir or a file.
254
243
     */
255
244
    var listing = response.responseText;
298
287
    current_file = file_listing["."];     /* Global */
299
288
    delete file_listing["."];
300
289
 
301
 
    if ('revision' in listing)
302
 
    {
303
 
        current_revision = listing.revision;
304
 
    }
305
 
 
306
290
    /* Check if this is a directory listing or file contents */
307
291
    var isdir = response.getResponseHeader("X-IVLE-Return") == "Dir";
308
292
    if (isdir)
309
293
    {
310
 
        setup_for_listing();
311
 
        home_listing(listing, subjects, path);
 
294
        handle_dir_listing(path, listing);
312
295
    }
313
296
    else
314
297
    {
377
360
    upload_callback_count++;
378
361
    if (upload_callback_count >= 2)
379
362
    {
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']));
385
363
        document.getElementsByName('data')[0].value = '';
386
364
        refresh();
387
365
    }
449
427
    files.appendChild(txt_elem);
450
428
}
451
429
 
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
 
 
465
430
/** Given a mime type, returns the path to the icon.
466
431
 * \param type String, Mime type.
467
432
 * \param sizelarge Boolean, optional.
527
492
 
528
493
/* Enable or disable actions1 moreactions actions. Takes either a single
529
494
 * name, or an array of them.*/
530
 
function set_action_state(names, which, allow_on_revision)
 
495
function set_action_state(names, which)
531
496
{
532
497
    if (!(names instanceof Array)) names = Array(names);
533
498
 
534
499
    for (var i=0; i < names.length; i++)
535
500
    {
536
501
        element = document.getElementById('act_' + names[i]);
537
 
        if (which &&
538
 
            !(current_file.svnstatus == 'revision' && !allow_on_revision))
 
502
        if (which)
539
503
        {
540
504
            /* Enabling */
541
505
            element.setAttribute("class", "choice");
550
514
    }
551
515
}
552
516
 
553
 
/* Updates the list of available actions based on files selected */
554
517
function update_actions()
555
518
{
556
519
    var file;
557
520
    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
 
    
571
521
    if (numsel <= 1)
572
522
    {
573
523
        if (numsel == 0)
599
549
        else
600
550
            open.setAttribute("title",
601
551
                "Edit or view this file");
602
 
        open.setAttribute("href", build_revision_url(current_path, filename,
603
 
                                                     current_revision));
 
552
        open.setAttribute("href", app_path(this_app, current_path, filename));
604
553
    }
605
554
    else
606
555
    {
613
562
    /* Available if zero or one files are selected,
614
563
     * and only if this is a file, not a directory */
615
564
    var serve = document.getElementById("act_serve");
616
 
    if (numsel <= 1 && !file.isdir && current_file.svnstatus != 'revision')
 
565
    if (numsel <= 1 && !file.isdir)
617
566
    {
618
567
        serve.setAttribute("class", "choice");
619
568
        serve.setAttribute("onclick",
638
587
     */
639
588
    var run = document.getElementById("act_run");
640
589
     
641
 
    if (numsel <= 1 && !file.isdir && file.type == "text/x-python" 
642
 
            && current_file.svnstatus != 'revision')
 
590
    if (!file.isdir && file.type == "text/x-python" && numsel <= 1)
643
591
    {
644
592
        if (numsel == 0)
645
593
        {
661
609
    }
662
610
 
663
611
    /* Download */
664
 
    /* Always available for current files.
 
612
    /* Always available.
665
613
     * If 0 files selected, download the current file or directory as a ZIP.
666
614
     * If 1 directory selected, download it as a ZIP.
667
615
     * If 1 non-directory selected, download it.
668
616
     * If >1 files selected, download them all as a ZIP.
669
617
     */
670
618
    var download = document.getElementById("act_download");
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")
 
619
    if (numsel <= 1)
 
620
    {
679
621
        if (numsel == 0)
680
622
        {
681
623
            download.setAttribute("href",
706
648
        for (var i=0; i<numsel; i++)
707
649
            dlpath += "path=" + encodeURIComponent(selected_files[i]) + "&";
708
650
        dlpath = dlpath.substr(0, dlpath.length-1);
709
 
        download.setAttribute("class", "choice")
710
651
        download.setAttribute("href", dlpath);
711
652
        download.setAttribute("title",
712
653
            "Download the selected files as a ZIP file");
722
663
    var pubcond = numsel <= 1 && file.isdir;
723
664
    if (pubcond)
724
665
    {
 
666
        /* TODO: Work out of file is svn'd */
725
667
        /* If this dir is already published, call it "Unpublish" */
726
668
        if (file.published)
727
669
        {
760
702
    /* Subversion actions */
761
703
    /* These are only useful if we are in a versioned directory and have some
762
704
     * files selected. */
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);
 
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);
783
716
 
784
717
    /* There is currently nothing on the More Actions menu of use
785
718
     * when the current file is not a directory. Hence, just remove
792
725
    {
793
726
        var actions2_directory = document.getElementById("actions2_directory");
794
727
        actions2_directory.setAttribute("style", "display: inline;");
795
 
        var moreactions = document.getElementById("moreactions_area");
796
 
        moreactions.setAttribute("style", "display: inline;");
797
728
    }
798
729
    else
799
730
    {
800
731
        var actions2_file = document.getElementById("actions2_file");
801
732
        actions2_file.setAttribute("style", "display: inline;");
 
733
        var moreactions = document.getElementById("moreactions_area");
 
734
        moreactions.setAttribute("style", "display: none;");
802
735
    }
803
736
 
804
737
    return;
846
779
        action_rename(filename);
847
780
        break;
848
781
    case "delete":
849
 
        action_delete(selected_files);
 
782
        action_remove(selected_files);
850
783
        break;
851
784
    case "copy":
852
785
        action_copy(selected_files);
869
802
    case "svnadd":
870
803
        action_add(selected_files);
871
804
        break;
872
 
    case "svnremove":
873
 
        action_remove(selected_files);
874
 
        break;
875
805
    case "svnrevert":
876
806
        action_revert(selected_files);
877
807
        break;
878
808
    case "svndiff":
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);
 
809
        window.location = path_join(app_path('diff'), current_path, selected_files[0]);
886
810
        break;
887
811
    case "svncommit":
888
812
        action_commit(selected_files);
889
813
        break;
890
814
    case "svnlog":
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);
 
815
        window.location = path_join(app_path('svnlog'), current_path, selected_files[0]);
 
816
        break;
 
817
    case "svncheckout":
 
818
        action_checkout();
898
819
        break;
899
820
    }
900
821
}