Please disable Adblockers and enable JavaScript for domain CEWebS.cs.univie.ac.at! We have NO ADS, but they may interfere with some of our course material.

Name: ui/js/worklist.js 
1:
$(document).ready(function() {// {{{
2:
  $("input[name=base-url]").val(location.protocol + "//" + location.host + ":" + $('body').data('defaultport'));
3:
  $("#arealogin > form").submit(function(event){
4:
    get_worklist();
5:
    subscribe_worklist($("input[name=domain-name]").val());
6:
    ui_toggle_vis_tab($("#worklist .switch"));
7:
    event.preventDefault();
8:
  });
9:
  var q = $.parseQuerySimple();
10:
  if (q.user && q.domain) {
11:
    $("input[name=domain-name]").val(q.domain);
12:
    $("input[name=user-name]").val(q.user);
13:
    ui_toggle_vis_tab($("#worklist .switch"));
14:
    get_worklist();
15:
    subscribe_worklist(q.domain);
16:
  }
17:
  $(document).on('click','.orgmodeltab',function(event){
18:
    var id = $(this).attr('data-tab');
19:
    ui_empty_tab_contents(id);
20:
    // TODO Hier kommt Raphi
21:
  });
22:
  $(document).on('click','#orgmodels li a.model',function(event){
23:
    var id = $(this).attr('href').hashCode();
24:
    if (!ui_add_tab("#main", "Orgmodel Oida", id, true, 'orgmodeltab')) {
25:
      ui_empty_tab_contents(id);
26:
    }
27:
    // TODO Hier kommt Raphi
28:
    event.preventDefault();
29:
  });
30:
  $(document).on('click','.task_do',function(){
31:
    var url =$("input[name=user-url]").val()+'/tasks';
32:
    var taskid = $(this).parents('tr').attr('data-id');
33:
    var taskidurl = url + '/' + taskid;
34:
    take_work(taskidurl,$('.task_take',$(this).parent()),$('.task_giveback',$(this).parent()),1);
35:
    do_work(taskid,taskidurl);
36:
  });
37:
  $(document).on('click','.task_take',function(){
38:
    var url =$("input[name=user-url]").val()+'/tasks';
39:
    var taskid = $(this).parents('tr').attr('data-id');
40:
    var taskidurl = url + '/' + taskid;
41:
    take_work(taskidurl,$('.task_take',$(this).parent()),$('.task_giveback',$(this).parent()),1);
42:
  });
43:
  $(document).on('click','.task_giveback',function(){
44:
    var url =$("input[name=user-url]").val()+'/tasks';
45:
    var taskid = $(this).parents('tr').attr('data-id');
46:
    var taskidurl = url + '/' + taskid;
47:
    take_work(taskidurl,$('.task_giveback',$(this).parent()),$('.task_take',$(this).parent()),0);
48:
  });
49:
 
50:
});// }}}
51:
 
52:
function get_worklist() {// {{{
53:
  $("input[name=user-url]").val($("input[name=base-url]").val()+'/'+$("input[name=domain-name]").val()+'/'+$("input[name=user-name]").val());
54:
  var url =$("input[name=base-url]").val()+'/'+$("input[name=domain-name]").val()+'/'+$("input[name=user-name]").val()+'/tasks';
55:
  // subscribe_worklist($("input[name=domain-name]").val());
56:
  // Set url (no more cookie nonsense!)
57:
  history.replaceState({}, '', '?user='+encodeURIComponent($("input[name=user-name]").val())+'&domain='+encodeURIComponent($("input[name=domain-name]").val()));
58:
 
59:
  $.ajax({
60:
    type: "GET",
61:
    url: url,
62:
    dataType: "xml",
63:
    success: function(res){
64:
 
65:
      $('#taborganisation').removeClass("hidden");
66:
      $.ajax({
67:
        type: "GET",
68:
        url: $("input[name=base-url]").val()+'/'+$("input[name=domain-name]").val()+'/orgmodels',
69:
        dataType: "xml",
70:
        success: function(res){
71:
          var ctv = $("#orgmodels");
72:
          ctv.empty();
73:
          $(res).find('orgmodel').each(function(){
74:
            var uri = decodeURIComponent($(this).text());
75:
            var node = $("#dat_template_orgmodels li").clone(true);
76:
            $('.link',node).text(uri);
77:
            $('.link',node).attr('href',uri);
78:
            $('.model',node).attr('href',uri);
79:
            ctv.append(node);
80:
          });
81:
        }
82:
      });
83:
      $("#main").removeClass("hidden");
84:
      var ctv = $("#dat_tasks");
85:
      ctv.empty();
86:
      $(res).find('task').each(function(){
87:
        var node = $("#dat_template_tasks tr").clone(true);
88:
        var taskidurl = $(this).attr('id');
89:
        var tasklabel = $(this).attr('label');
90:
        node.attr('data-id',taskidurl);
91:
        node.attr('data-id',taskidurl);
92:
        $('.name',node).text(tasklabel);
93:
        if ($(this).attr('uid')=='*') {
94:
          $('.task_giveback',node).prop('disabled', true);
95:
        } else {
96:
          $('.task_take',node).prop('disabled', true);
97:
        }
98:
        ctv.append(node);
99:
      });
100:
    },
101:
    error: function(a,b,c) {
102:
      alert("Wrong Domain.");
103:
    }
104:
  });
105:
}// }}}
106:
 
107:
function take_work(url,butt,butt2,give_or_take){ //{{{
108:
 
109:
  var op = give_or_take == 1 ? "take" : "giveback";
110:
  $.ajax({
111:
    type: "PUT",
112:
    url: url,
113:
    data:"operation="+op ,
114:
    success: function(){
115:
      $(butt).prop('disabled','true');
116:
      $(butt2).prop('disabled','false');
117:
    },
118:
    error: function(a,b,c){
119:
      alert("Put didn't work");
120:
    }
121:
  });
122:
} //}}}
123:
 
124:
function do_work(taskid,taskidurl) { //{{{
125:
  var form_html;
126:
  $.ajax({
127:
    type: "GET",
128:
    url: taskidurl,
129:
    success:function(res) {
130:
      if (!ui_add_tab("#main", res.label, taskid, true, '')) { return; };
131:
      $.ajax({
132:
        type: "GET",
133:
        url: res.form,
134:
        success: function(form) {
135:
          var postFormStr = "<form id='form_" + taskid + "'>";
136:
          form_html=form;
137:
          postFormStr += form_html + "</form>";
138:
          var data = JSON.parse(res.parameters);
139:
          var form_area = "ui-area[data-belongs-to-tab="+taskid+"]";
140:
          $(form_area).append(postFormStr);
141:
          eval($('worklist-form-load').text()); //TODO, da werden alle worklist for loads in allen tabs, nur den aktuellen
142:
          $('worklist-form-load').hide();
143:
          ui_activate_tab($('ui-tabbar ui-tab[data-tab=' + taskid + ']'));
144:
          $("#form_"+taskid).on('submit',function(e){
145:
            // Form data
146:
            var form_data = $(this).serialize();
147:
            // res.url == Cpee Callback url
148:
            $.ajax({
149:
              type: "PUT",
150:
              url: res.url,
151:
              data: form_data,
152:
              success: function(something){
153:
                $.ajax({
154:
                  type: "DELETE",
155:
                  url: taskidurl,
156:
                  success: function(del){
157:
                    ui_close_tab('ui-tab[data-tab='+taskid+'] ui-close');
158:
                    get_worklist();
159:
                  },
160:
                  error: function(a,b,c){
161:
                    console.log("Delete failed");
162:
                  }
163:
                });
164:
              },
165:
              error: function(a,b,c){
166:
                console.log("Put didnt work");
167:
              }
168:
            });
169:
            e.preventDefault();
170:
          });
171:
        },
172:
        error: function(a,b,c){
173:
          console.log("Error while getting form html");
174:
        }
175:
      });
176:
    },
177:
    error: function(a,b,c){
178:
      console.log("Error while getting url for form");
179:
    }
180:
  });
181:
} //}}}
182:
 
183:
function subscribe_worklist(){ //{{{
184:
  var url = $("input[name=base-url]").val()+'/'+$("input[name=domain-name]").val()+'/notifications/subscriptions/';
185:
  $.ajax({
186:
    type: "POST",
187:
    url: url,
188:
    data: "topic=user&events=take,giveback,finish&topic=task&events=add,delete",
189:
    success: function(ret){
190:
      var Socket = "MozWebSocket" in window ? MozWebSocket : WebSocket;
191:
      var subscription = $.parseQuery(ret)[0].value;
192:
      ws = new Socket(url.replace(/http/,'ws') + subscription + "/ws/");
193:
      ws.onmessage = function(e) {
194:
        data = $.parseXML(e.data);
195:
        if ($('event > topic',data).length > 0) {
196:
          var cid = JSON.parse($('event > notification',data).text()).callback_id;
197:
          var tr = $('tr[data-id="'+cid+'"]');
198:
          switch($('event > topic',data).text()) {
199:
            case 'user':
200:
              switch($('event > event',data).text()) {
201:
                case 'finish':
202:
                  tr.remove();
203:
                  break;
204:
                default:
205:
                  tr.remove();
206:
                  get_worklist();
207:
                  break;
208:
              }
209:
              break;
210:
            case 'task':
211:
              switch($('event > event',data).text()) {
212:
                case 'add':
213:
                  get_worklist();
214:
                  break;
215:
                case 'delete':
216:
                  tr.remove();
217:
                  break;
218:
              }
219:
              break;
220:
          }
221:
        }
222:
      };
223:
      ws.onopen  = function(e){ }
224:
      ws.onclose = function(e){ }
225:
      ws.onerror = function(e){ }
226:
    },
227:
    error: function(){
228:
      console.log("Not Successful subscribed");
229:
    }
230:
  });
231:
} //}}}
232:
 
233:
String.prototype.hashCode = function() { //{{{
234:
  var hash = 0, i, chr, len;
235:
  if (this.length == 0) return hash;
236:
  for (i = 0, len = this.length; i < len; i++) {
237:
    chr   = this.charCodeAt(i);
238:
    hash  = ((hash << 5) - hash) + chr;
239:
    hash |= 0; // Convert to 32bit integer
240:
  }
241:
  return hash;
242:
}; //}}}