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: | }; //}}} |