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

« back to all changes in this revision

Viewing changes to ivle/webapp/groups/media/groups.js

  • Committer: David Coles
  • Date: 2010-07-28 10:52:48 UTC
  • mfrom: (1791.2.10 mediahandlers)
  • Revision ID: coles.david@gmail.com-20100728105248-zvbn9g72v1nsskvd
A series of HTML5 based media handlers using the <audio> and <video> tags.  
This replaces the previous page that just showed a download link (which is 
already available on the menu).

Also solves issue where media files were downloaded by the client twice (once 
in an AJAX request intended only for text).

Known issues:
    * Bug #588285: External BHO will not be able to play media due to not
      having IVLE cookie.
    * Bug #610745: Does not correctly preview revisions
    * Bug #610780: Ogg media does not work in Chromium

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* IVLE - Informatics Virtual Learning Environment
 
2
 * Copyright (C) 2007-2008 The University of Melbourne
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License as published by
 
6
 * the Free Software Foundation; either version 2 of the License, or
 
7
 * (at your option) any later version.
 
8
 *
 
9
 * This program is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
 * GNU General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program; if not, write to the Free Software
 
16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
17
 *
 
18
 * Module: Group management system (client)
 
19
 * Author: Matt Giuca
 
20
 * Date: 21/7/2008
 
21
 */
 
22
 
 
23
serviceapp = 'userservice';
 
24
 
 
25
/* Creates a group */
 
26
function create_new_group(projectsetid)
 
27
{
 
28
    groupnm = window.prompt('Please enter a name for the group','');
 
29
 
 
30
    /* If the provided name is empty, or the prompt is cancelled, stop. */
 
31
    if (groupnm)
 
32
    {
 
33
        args = {
 
34
            'projectsetid': projectsetid,
 
35
            'groupnm':groupnm,
 
36
            'nick': groupnm
 
37
        };
 
38
        response = ajax_call(null, serviceapp, 'create_group', args, 'POST');
 
39
        if (response.status == 200)
 
40
        {
 
41
            /* pass */
 
42
        }
 
43
        else if (response.status == 400)
 
44
        {
 
45
            alert("Could not create group: " + response.getResponseHeader('X-IVLE-Error'));
 
46
        }
 
47
        else
 
48
        {
 
49
            alert("Error: Could not add group. Does it already exist?");
 
50
        }
 
51
        /* Reload the display */
 
52
        window.location.href = window.location.href;
 
53
    }
 
54
}
 
55
 
 
56
function manage_group(offeringid, groupid, namespace)
 
57
{
 
58
    var button = document.getElementById(namespace+"_button");
 
59
    var manage_div = document.createElement("div")
 
60
    manage_div.id = namespace + "_contents";
 
61
 
 
62
    /* Get the td which is button's parent (the 'actions' column) */
 
63
    button_td = button.parentNode;
 
64
    button_td.appendChild(manage_div);
 
65
 
 
66
    /* Refresh contents */
 
67
    list_projectgroup_contents(offeringid, groupid, manage_div.id);
 
68
 
 
69
    /* Remove the button element */
 
70
    button_td.removeChild(button);
 
71
}
 
72
 
 
73
/* Lists the information about a particular project group identified by groupid 
 
74
 * in an offering identified by offeringid in the element with id elemnm. May 
 
75
 * be called multiple times safely to refresh the displayed information.
 
76
 */
 
77
function list_projectgroup_contents(offeringid, groupid, elemnm)
 
78
{
 
79
    var contents = document.getElementById(elemnm);
 
80
    dom_removechildren(contents);
 
81
    var callback = function(xhr)
 
82
    {
 
83
        var members = JSON.parse(xhr.responseText);
 
84
        var available = members.available;
 
85
        var groupmembers = members.groupmembers;
 
86
        
 
87
        /* Existing members */
 
88
        var ul = document.createElement("ul");
 
89
        for (var i=0; i<groupmembers.length; i++)
 
90
        {
 
91
            var member = groupmembers[i];
 
92
 
 
93
            var li = dom_make_text_elem("li", member.fullname + " (" +
 
94
                                              member.login + ") ");
 
95
            var rmbutton = document.createElement("input");
 
96
            rmbutton.value = "Remove";
 
97
            rmbutton.type = "image";
 
98
            /* XXX: There must be a better way to do this! */
 
99
            rmbutton.src = "/+media/ivle.webapp.core/images/interface/delete.png";
 
100
 
 
101
            $(rmbutton).click(function(offeringid, login, groupid, elemnm)
 
102
            {
 
103
                return function() {
 
104
                    if (!confirm("Are you sure want to revoke this user's membership?"))
 
105
                        return;
 
106
                    this.disabled = true;
 
107
                    var args = {'login': login, 'groupid': groupid};
 
108
                    ajax_call(null, serviceapp, 'unassign_group', args, 'POST');
 
109
                    list_projectgroup_contents(offeringid, groupid, elemnm);
 
110
                };
 
111
            }(offeringid, member.login, groupid, elemnm));
 
112
 
 
113
            li.appendChild(rmbutton);
 
114
            ul.appendChild(li);
 
115
        }
 
116
 
 
117
        /* Add member box */
 
118
        var add_li = document.createElement("li");
 
119
        var select = document.createElement("select");
 
120
        for (var i=0; i<available.length; i++)
 
121
        {
 
122
            var option = dom_make_text_elem("option", available[i].login);
 
123
            option.value = available[i].login;
 
124
            select.appendChild(option);
 
125
        }
 
126
        var button = document.createElement("input");
 
127
        button.value = "Add";
 
128
        button.type = 'button';
 
129
        $(button).click(function()
 
130
        {
 
131
            this.disabled = true;
 
132
            args = {'login': select.value, 'groupid': groupid};
 
133
            ajax_call(null, serviceapp, 'assign_group', args, 'POST');
 
134
            list_projectgroup_contents(offeringid, groupid, elemnm);
 
135
        });
 
136
        add_li.appendChild(select);
 
137
        add_li.appendChild(button);
 
138
        ul.appendChild(add_li);
 
139
        contents.appendChild(ul);
 
140
    }
 
141
    var args = {'offeringid': offeringid, 'groupid': groupid};
 
142
    ajax_call(callback, serviceapp, 'get_group_membership', args, 'GET');
 
143
 
 
144
}