1var actickets = { 2 tickets: [], // list of all ticket links 3 requests: [], // list of all ticket requests we have to issue 4 requested: 0, // count of requests we already fetched from the requests list 5 batch: 15, // count of requests to made with one ajax request 6 pattern: /\/projects\/(\d+)\/tickets\/(\d+)/, 7 ajax: null, 8 9 init: function() { 10 // get all ticket links 11 actickets.tickets = getElementsByClass('acticket', document, 'a'); 12 if (!actickets.tickets.length) return; 13 14 // parse projectId and ticketId 15 for (var n = 0; n < actickets.tickets.length; n++) { 16 var ticket = actickets.tickets[n]; 17 18 matches = ticket.href.match(actickets.pattern); 19 if (matches) { 20 ticket.acticket = true; 21 ticket.projectId = matches[1]; 22 ticket.ticketId = matches[2]; 23 24 // not listed for request? 25 var found = false; 26 for (var r = 0; r < actickets.requests.length; r++) { 27 req = actickets.requests[r]; 28 if (req.ticketId == ticket.ticketId && req.projectId == ticket.projectId) { 29 found = true; 30 break; 31 } 32 } 33 if (!found) { 34 actickets.requests[actickets.requests.length] = { 35 ticketId: ticket.ticketId, 36 projectId: ticket.projectId 37 }; 38 } 39 } else { 40 ticket.acticket = false; 41 } 42 } 43 44 // prepare ajax client 45 actickets.ajax = new sack(DOKU_BASE + 'lib/plugins/actickets/ajax.php'); 46 actickets.ajax.AjaxFailedAlert = ''; 47 actickets.ajax.encodeURIString = false; 48 actickets.ajax.onCompletion = actickets.resolved; 49 50 // start requests 51 actickets.request(); 52 }, 53 54 request: function() { 55 // create ajax query 56 var request = ''; 57 58 // ask for the next batchszie of requests 59 var end = actickets.requested + actickets.batch; 60 if (end > actickets.requests.length) { 61 end = actickets.requests.length; 62 } 63 var r = 0; 64 for (var n = actickets.requested; n < end; n++) { 65 var ticket = actickets.requests[n]; 66 request = request 67 + 'tickets[' + r + '][projectId]=' + ticket.projectId + '&' 68 + 'tickets[' + r + '][ticketId]=' + ticket.ticketId + '&'; 69 r++; 70 } 71 actickets.requested = end; 72 73 actickets.ajax.runAJAX(request); 74 }, 75 76 resolved: function() { 77 result = eval('(' + this.response + ')'); 78 for (var n = 0; n < result.length; n++) { 79 var ticket = result[n]; 80 if (ticket != null) { 81 for (var t = 0; t < actickets.tickets.length; t++) { 82 var acticket = actickets.tickets[t]; 83 if (acticket.projectId == ticket.project_id 84 && acticket.ticketId == ticket.ticket_id) { 85 // informations for a linked ticket received 86 acticket.title = ticket.name; 87 if (ticket.priority == 1) { 88 acticket.className = acticket.className + ' acticket_prio'; 89 acticket.className = acticket.className + ' acticket_prio_high'; 90 } else if (ticket.priority == 2) { 91 acticket.className = acticket.className + ' acticket_prio'; 92 acticket.className = acticket.className + ' acticket_prio_highest'; 93 } else if (ticket.priority == -1) { 94 acticket.className = acticket.className + ' acticket_prio'; 95 acticket.className = acticket.className + ' acticket_prio_low'; 96 } else if (ticket.priority == -2) { 97 acticket.className = acticket.className + ' acticket_prio'; 98 acticket.className = acticket.className + ' acticket_prio_lowest'; 99 } 100 if (ticket.completed_on != null) { 101 acticket.className = acticket.className + ' acticket_completed'; 102 } 103 } 104 } 105 } 106 } 107 if (actickets.requested < actickets.requests.length) { 108 actickets.request(); 109 } 110 } 111}; 112 113addInitEvent(actickets.init); 114