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

« back to all changes in this revision

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

  • Committer: mattgiuca
  • Date: 2008-07-15 07:19:34 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:875
Added "migrations" directory, which contains incremental database update
    scripts.
Updated users.sql, uniqueness key on offering table.
Added migration matching this update to the migrations directory. Mm handy!

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
default_type_icon = "txt.png";
56
56
 
57
57
/* Relative to IVLE root */
58
 
type_icons_path = "+media/ivle.webapp.core/images/mime";
59
 
type_icons_path_large = "+media/ivle.webapp.core/images/mime/large";
 
58
type_icons_path = "media/images/mime";
 
59
type_icons_path_large = "media/images/mime/large";
60
60
 
61
61
/* Mapping SVN status to icons, just the file's basename */
62
62
svn_icons = {
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
 
87
86
default_svn_icon = null;
88
87
default_svn_nice = "Unknown status";
89
88
 
90
 
svn_icons_path = "+media/ivle.webapp.core/images/svn";
 
89
svn_icons_path = "media/images/svn";
91
90
 
92
 
published_icon = "+media/ivle.webapp.core/images/interface/published.png";
 
91
published_icon = "media/images/interface/published.png";
93
92
 
94
93
/* List of MIME types considered "executable" by the system.
95
94
 * Executable files offer a "run" link, implying that the "serve"
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;
835
768
        action_unpublish(selected_files);
836
769
        break;
837
770
    case "share":
838
 
        window.open(public_app_path("~" + current_path, filename), 'share')
 
771
        //alert("Not yet implemented: Sharing files");
 
772
        window.open(public_app_path(serve_app, current_path, filename), 'share')
839
773
        break;
840
774
    case "submit":
841
775
        // TODO
845
779
        action_rename(filename);
846
780
        break;
847
781
    case "delete":
848
 
        action_delete(selected_files);
 
782
        action_remove(selected_files);
849
783
        break;
850
784
    case "copy":
851
785
        action_copy(selected_files);
868
802
    case "svnadd":
869
803
        action_add(selected_files);
870
804
        break;
871
 
    case "svnremove":
872
 
        action_remove(selected_files);
873
 
        break;
874
805
    case "svnrevert":
875
806
        action_revert(selected_files);
876
807
        break;
877
808
    case "svndiff":
878
 
        window.location = path_join(app_path('diff'), current_path, selected_files[0] || '');
879
 
        break;
880
 
    case "svnupdate":
881
 
        action_update(selected_files);
882
 
        break;
883
 
    case "svnresolved":
884
 
        action_resolved(selected_files);
 
809
        window.location = path_join(app_path('diff'), current_path, selected_files[0]);
885
810
        break;
886
811
    case "svncommit":
887
812
        action_commit(selected_files);
888
813
        break;
889
814
    case "svnlog":
890
 
        window.location = path_join(app_path('svnlog'), current_path, selected_files[0] || '');
891
 
        break;
892
 
    case "svncopy":
893
 
        action_svncopy(selected_files);
894
 
        break;
895
 
    case "svncut":
896
 
        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();
897
819
        break;
898
820
    }
899
821
}