· 7 years ago · Jun 26, 2018, 07:00 AM
1// ==UserScript==
2// @name SpeedTagger
3// @namespace speedtagger
4// @author Obliterator
5// @version 0.11.1
6// @description Speedy Tagger
7// @grant none
8// @include http://nl*.tribalwars.nl/game.php*screen=info_command*
9// @include https://nl*.tribalwars.nl/game.php*screen=info_command*
10// @include http://nl*.tribalwars.nl/game.php*screen=overview*
11// @include https://nl*.tribalwars.nl/game.php*screen=overview*
12// @include http://nl*.tribalwars.nl/game.php*screen=report*
13// @include https://nl*.tribalwars.nl/game.php*screen=report*
14// ==/UserScript==
15
16
17(function (){
18
19var kleurtjes = 1;
20
21if (window.opera) {
22 unsafeWindow = window;
23}
24
25var $ = unsafeWindow.$;
26var jQuery = unsafeWindow.jQuery;
27var game_data = unsafeWindow.game_data;
28var TribalWars = unsafeWindow.TribalWars;
29
30var fmt = 'MARKEREN; {#tag} ({#coordatt}) {#attacker} F{#field}';
31var fmt2 = 'EIGEN {#tag} op ({#coorddef}) F{#field}';
32var labels = ['OK', 'DODGED', 'ONTWIJK;', 'BIJSTACKEN;', 'GEVRAAGD;', 'ZOOI;'];
33var tags = ['Scouts', 'LC', 'ZC', 'Bijl', 'Zwaard', 'Ram/Kata', '**Edel**'];
34var shortcuts = {
35 's':'OK',
36 'd':'DODGED',
37 'a':'ONTWIJK;',
38 'e':'BIJSTACKEN;',
39 'q':'GEVRAAGD;',
40 'r':'MARKEREN;',
41 'z':'ZOOI;',
42 'f':'__ fake',
43 'h':'__ halve',
44 'n':'__ nacht',
45};
46
47if (! document.getElementById("quickbar_outer")) {
48 return;
49}
50
51function disableTWKeys() {
52 // Disable TW hotkeys
53 unsafeWindow.HotKeys.init = function () {};
54 $(document).unbind('keydown');
55}
56
57function qDebug(text, raw) {
58 text = ''+text;
59 var dbg = $('#qdebugdiv');
60 if (! dbg.length) {
61 dbg = $("<div id='qdebugdiv'></div>").attr('class', 'content-border')
62 .css({padding: 5, 'background-color':'white', 'white-space':'pre', 'font-family':'arial','margin-bottom':1})
63 .appendTo($('#contentContainer')[0].insertRow(0).insertCell(0));
64 }
65 var d = $("<div></div>").appendTo(dbg);
66 if (! raw) d.text(text);
67 else d.html(text);
68}
69
70
71var rename_url = TribalWars.buildURL('POST', 'info_command', {ajaxaction: 'edit_other_comment', id: '__ID__'});
72
73function QuickEdit(quickedit) {
74 this.quickedit = quickedit;
75 this.old = this.quickedit.attr('data-new-value');
76 this.label_container = this.quickedit.find('.quickedit-label');
77 if (! this.old)
78 this.old = $.trim(this.label_container.text());
79 this.value = this.old;
80};
81
82QuickEdit.prototype.id = function () {
83 return this.quickedit.attr('data-id');
84};
85
86QuickEdit.prototype.isAttack = function () {
87 // Stupid TW bug
88 if (this.quickedit.find('img').length == 0)
89 return true;
90 return this.quickedit.find('img[src*=attack]').length > 0;
91};
92
93QuickEdit.prototype.save = function () {
94 var that = this;
95 var id = this.id();
96 this.quickedit.removeAttr('data-new-value');
97 if (this.old != this.value) {
98 $.ajax({
99 url: rename_url.replace(/__ID__/, id),
100 method: 'POST',
101 data:{text: that.value},
102 success: function() { that.label_container.text(that.value); },
103 });
104 this.old = this.value;
105 }
106};
107
108QuickEdit.prototype.changed = function () {
109 return this.old != this.value;
110};
111
112QuickEdit.prototype.val = function (value, save) {
113 var old = this.value;
114 if (value === undefined)
115 return old;
116
117 this.value = value;
118 this.quickedit.attr('data-new-value', this.value);
119 if (save || save === undefined)
120 this.save();
121};
122
123
124/*
125* jQuery Hotkeys Plugin
126* Copyright 2010, John Resig
127* Dual licensed under the MIT or GPL Version 2 licenses.
128*
129* Based upon the plugin by Tzury Bar Yochay:
130* http://github.com/tzuryby/hotkeys
131*
132* Original idea by:
133* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
134*/
135
136(function(jQuery){
137
138 jQuery.hotkeys = {
139 version: "0.8",
140
141 specialKeys: {
142 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
143 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
144 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del",
145 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
146 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",
147 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",
148 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
149 },
150
151 shiftNums: {
152 "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
153 "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",
154 ".": ">", "/": "?", "\\": "|"
155 }
156 };
157
158 function keyHandler( handleObj ) {
159 // Only care when a possible input has been specified
160 if ( typeof handleObj.data !== "string" ) {
161 return;
162 }
163
164 var origHandler = handleObj.handler,
165 keys = handleObj.data.toLowerCase().split(" ");
166
167 handleObj.handler = function( event ) {
168 // Don't fire in text-accepting inputs that we didn't directly bind to
169 if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||
170 event.target.type === "text") ) {
171 return;
172 }
173
174 // Keypress represents characters, not special keys
175 var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ],
176 character = String.fromCharCode( event.which ).toLowerCase(),
177 key, modif = "", possible = {};
178
179 // check combinations (alt|ctrl|shift+anything)
180 if ( event.altKey && special !== "alt" ) {
181 modif += "alt+";
182 }
183
184 if ( event.ctrlKey && special !== "ctrl" ) {
185 modif += "ctrl+";
186 }
187
188 // TODO: Need to make sure this works consistently across platforms
189 if ( event.metaKey && !event.ctrlKey && special !== "meta" ) {
190 modif += "meta+";
191 }
192
193 if ( event.shiftKey && special !== "shift" ) {
194 modif += "shift+";
195 }
196
197 if ( special ) {
198 possible[ modif + special ] = true;
199
200 } else {
201 possible[ modif + character ] = true;
202 possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;
203
204 // "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
205 if ( modif === "shift+" ) {
206 possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;
207 }
208 }
209
210 for ( var i = 0, l = keys.length; i < l; i++ ) {
211 if ( possible[ keys[i] ] ) {
212 return origHandler.apply( this, arguments );
213 }
214 }
215 };
216 }
217
218 jQuery.each([ "keydown", "keyup", "keypress" ], function() {
219 jQuery.event.special[ this ] = { add: keyHandler };
220 });
221
222})( jQuery );
223
224
225
226if (game_data["screen"] == 'overview') {
227 var div = $("#show_incoming_units");
228 if (! div.length || ! div.is(':visible')) return;
229
230 var table = div.find("table");
231 var th = table.find("th:first");
232
233 var all = 0;
234 var ram = 0;
235 var matched = new Object();
236 table.find('.quickedit').each(function(i,e) {
237 var edit = new QuickEdit($(e));
238 if (! edit.isAttack())
239 return;
240 all++;
241 var m = edit.val().match(/\([0-9]+\|[0-9]+\)/);
242 if (!m || matched.hasOwnProperty(m[0]))
243 return;
244 matched[m[0]] = 1;
245 if (edit.val().match(/[^(]*(Ram|Edel)/) != -1)
246 ram++;
247 });
248
249 if (ram > 0) {
250 th.append(" ("+ram+" ram)");
251 }
252
253 var img = $("<img src='graphic/rename.png' />").css('margin-left', 5).appendTo(th);
254 var colspan = th.parents("tr:first")[0].cells.length;
255
256
257 /*******/
258
259 function updateMarks(changed) {
260 for (var id in changed) {
261 changed[id].save()
262 }
263 $("body").trigger('speedtagger_marked', [changed]);
264 }
265
266 function markAttacks(commands, label, filter, marklast) {
267 var changed = new Object();
268 var negate = false;
269 if (filter && (filter.charAt(0) == '!' || filter.charAt(0) == '/')) {
270 negate = true;
271 filter = filter.substring(1);
272 } else if (! filter) {
273 filter = null;
274 }
275
276 if (label && label[0] == '_')
277 label = label.toLowerCase();
278 else
279 label = label.toUpperCase();
280
281 $.each(commands, function (i, command) {
282 command = $(command);
283 var edit = new QuickEdit(command);
284 var value = edit.val();
285
286 if (! edit.isAttack())
287 return;
288
289 if (filter == '$') {
290 if (!command.attr('data-marked'))
291 return;
292 } else {
293 command.removeAttr('data-marked');
294 if (filter) {
295 var match = value.toUpperCase().indexOf(filter) == -1;
296 if (match != negate)
297 return;
298 }
299 }
300
301 // Special treatment
302 if (label && label[0] == '_') {
303 var match = value.match(/^([A-Za-z_]*;?\s+)?(_+ ?[a-zA-Z]+ ?_*) /);
304 if (match) {
305 var old = match[2];
306 value = value.replace(old, '');
307 if ($.trim(old).toUpperCase() == label.toUpperCase()) {
308 changed[id] = c;
309 return;
310 }
311 }
312 }
313
314 var match = value.match(/^([A-Z]{2,};?) (.*)/);
315
316 if (match && negate && filter==='')
317 return; // Filter was anything
318
319 if (match && match[1] != 'LC' && match[1] != 'ZC') {
320 if (label == match[1]) return;
321 if (label && label[0] == '_')
322 value = match[1]+" "+label+" "+match[2];
323 else
324 value = label+" "+match[2];
325 } else {
326 value = label+" "+value;
327 }
328
329 edit.val(value, false);
330
331 command.attr('data-marked', true);
332 changed[edit.id()] = edit;
333 });
334
335 if (marklast) {
336 last_changed = markLast(commands, false);
337 for (var id in last_changed) {
338 changed[id] = last_changed[id];
339 }
340 }
341 updateMarks(changed);
342
343 }
344
345 function markCheck(commands) {
346 var p = /\s*(LAATSTE|CHECK);?$/i;
347 commands.each(function (i, command) {
348 command = $(command);
349 var edit = new QuickEdit(command)
350 var value = edit.val();
351 var match = value.match(p);
352 if (match) {
353 if (match[1] == 'LAATSTE') return;
354 edit.val(value.replace(p, ''));
355 } else {
356 edit.val(value+' CHECK;');
357 }
358 });
359 }
360
361 function markLast(commands, click) {
362 if (click == undefined)
363 click = true;
364
365 var changed = new Object();
366 var last = null;
367
368 commands.each(function (i, command) {
369 var command = $(command);
370 var edit = new QuickEdit(command);
371
372 if (! edit.isAttack())
373 return;
374
375 if (last) {
376 match = last.val().match(/(.*) LAATSTE;?$/);
377 if (match) {
378 last.val(match[1]);
379 changed[last.id()] = last;
380 }
381 }
382
383 last = edit;
384 });
385
386 if (last) {
387 var value = last.val();
388 var match = value.match(/(.*) LAATSTE;?$/);
389 if (! match) {
390 last.val(value+" LAATSTE;", false);
391 changed[last.id()] = last;
392 }
393 }
394
395 if (click)
396 updateMarks(changed);
397
398 return changed;
399 }
400
401
402
403
404 function showCustomMark() {
405 $("<input type='text' />").css('width', '7em')
406 .replaceAll($('#speedtagger-select'))
407 .keypress(function(e) {
408 if(e.which == 13) {
409 $(this).next('input[type=button]').click();
410 }
411 })
412 .attr('id', 'speedtagger-select')[0].focus();
413 }
414
415 /*******/
416
417 // Hover for individual marks
418 $("#show_incoming_units tr").find("td:first").hover(function() {
419 $(this).css('background-color', '#DFCCA6').attr('data-mark-me', true);
420 }, function (){
421 $(this).css('background-color', '').removeAttr('data-mark-me');
422 });
423
424
425
426
427 /** Keyboard shortcuts */
428 var shortcutGenerator = function(label) {
429 return function() {
430 var filter = null;
431 var marklast = false;
432 var commands = table.find('td[data-mark-me] .quickedit');
433 if (commands.length == 0) {
434 commands = table.find('.quickedit');
435 marklast = true;
436 var filterctrl = $("#speedtagger-filter");
437 if (filterctrl.length) {
438 filter = filterctrl.val().toUpperCase();
439 filterctrl.val('$');
440 }
441 }
442 markAttacks(commands, label, filter, marklast);
443 return false;
444 }
445 };
446 disableTWKeys();
447 for (var key in shortcuts) {
448 if (! shortcuts.hasOwnProperty(key))
449 continue;
450 $(document).bind('keydown', key, shortcutGenerator(shortcuts[key]));
451 }
452
453
454 function showFilter() {
455 if ($('#speedtagger-filter').length > 0) return;
456 var button = $("#speedtagger-tagAll input[type=button]");
457 var filter = $("<input type='text' id='speedtagger-filter' value='!' />")
458 .attr('title', 'Hernoem alle dat deze tekst bevat. Begin met ! om alles behalve deze te hernoemen.');
459 button.before("<br />Filter: ").before(filter);
460 }
461
462 function showMarker() {
463 var filter = $("#speedtagger-filter");
464 var tr = $("#speedtagger-tagAll");
465
466 if (filter.length && tr.length) {
467 tr.remove();
468 } else if (tr.length) {
469 showFilter();
470 $("#speedtagger-filter").focus();
471 return false;
472 }
473
474 tr = $(table[0].insertRow(1)).attr('id', 'speedtagger-tagAll');
475 var cell = $(tr[0].insertCell(0)).text("Markeren als: ").attr('colspan', colspan);
476
477 var input = $("<select></select>").attr('id', 'speedtagger-select').appendTo(cell);
478 for (var i=0; i < labels.length; i++) {
479 $("<option></option>").val(labels[i]).text(labels[i]).appendTo(input);
480 }
481
482 for (var shortcut in shortcuts) {
483 if (! shortcuts.hasOwnProperty(shortcut))
484 continue;
485 if (shortcuts[shortcut] && shortcuts[shortcut][0] == '_')
486 continue;
487 input.find("option[value='"+shortcuts[shortcut]+"']").text(shortcuts[shortcut]+' ('+shortcut+')');
488 }
489
490 /* Text mode */
491 $("<option></option>").val("").text("Andere").appendTo(input);
492
493 input.change(function() {
494 var input = $(this);
495 if (input.val())
496 return false;
497 showCustomMark();
498 });
499
500 var button = $("<input type='button'>").val("OK").appendTo(cell).click(function () {
501 var input = $("#speedtagger-select")[0];
502 var filter = null;
503 var commands = table.find('.quickedit');
504 var filterctrl = $("#speedtagger-filter");
505 if (filterctrl.length) {
506 filter = filterctrl.val().toUpperCase();
507 filterctrl.val('$');
508 }
509 markAttacks(commands, input.value, filter, true);
510 //$("#speedtagger-tagAll").remove();
511 });
512 }
513
514 /** Click */
515 th.click(function (){
516 showMarker();
517 $('speedtagger-select').focus();
518 return false;
519 });
520
521
522
523 $(document).bind('keydown', 'c', function() {
524 var commands = table.find('td[data-mark-me] .quickedit');
525 if (commands.length != 0)
526 markCheck(commands);
527 return false;
528 });
529 $(document).bind('keydown', 'x', function() {
530 if ($('#speedtagger-select').length == 0)
531 showMarker();
532 showFilter();
533 return false;
534 });
535
536 if (all) {
537 /* Create some distance */
538 var tr = table[0].insertRow(table[0].rows.length-1);
539 tr.style.height = "8px";
540
541 tr = table[0].insertRow(table[0].rows.length-1);
542 var td = $(tr.insertCell(0));
543 td.attr('colspan', colspan);
544
545 /* Laatste aanval */
546 $("<a href='#'>» Laatste aanval markeren</a>").appendTo(td)
547 .click(function () {
548 var commands = table.find('.quickedit');
549 markLast(commands);
550 return false;
551 });
552 }
553
554
555} else if (game_data["screen"] == 'info_command') {
556
557 function zeropad(n) {
558 n = Math.floor(n);
559 return n > 9 ? n : '0' + n;
560 }
561 function formatDuration(m) {
562 return zeropad(m/60)+':'+zeropad(m%60)+':'+zeropad(Math.round(m%1 * 60));
563 }
564 function parseDuration(s) {
565 var match = s.match(/(\d+):(\d{2}):(\d{2})/);
566 return parseInt(match[1])*60+parseInt(match[2])+parseInt(match[3])/60;
567 }
568
569 var Rt = /{#tag}/g,
570 Rf = /{#field}/g,
571 Rca = /{#coordatt}/g,
572 Rcd = /{#coorddef}/g,
573 Ra = /{#attacker}/g,
574 Rd = /{#defender}/g;
575
576 var w = location.host.match(/\d+/);
577 var looptijden = [9, 10, 11, 18, 22, 30, 35];
578 var max = [1500, 1500, 1500, 1500, 1500, 1500, w == 1 ? 1E3 : w == 2 || w == 19 ? 70 : w == 3 ? 100 : w == 5 || w == 10 ? 42 : w == 20 ? 200 : 77];
579 var labels = ['Scouts', 'Lichte cav.', 'Heavy cav.', 'Bijl/Speer', 'Zwaard', 'Ram/Kata', 'Edel', 'Onbekend'];
580
581 var pattern = /.*\(((\d{1,3})\|(\d{1,3}))\) .\d+$/;
582 var label = $("#command_comment");
583 var edit = new QuickEdit(label.parents('.quickedit:first'));
584 var table = label.parents('table:first');
585 var name = $.trim(label.text());
586 var r = 0;
587 var rows = table[r++].rows;
588 var aname = rows[r++].cells[2].textContent;
589 var amatch = rows[r++].cells[1].firstChild.textContent.match(pattern);
590 var dname = rows[r++].cells[2].textContent;
591 var dmatch = rows[r++].cells[1].firstChild.textContent.match(pattern);
592
593
594
595 if (rows[r].cells[0].textContent.match(/duur/i))
596 r++;
597
598 var arrival = $(table).find("td:contains('Aankomst:')").next('td').text();
599 var time = $(table).find("td:contains('Aankomst in:')").next('td').text();
600 var tag_time = new Date();
601
602 var tagmatch = label.text().match(/2bT (\d+) (\d+:\d{2}:\d{2})/);
603 var fields = Math.sqrt(Math.pow(amatch[2]-dmatch[2], 2) + Math.pow(amatch[3]-dmatch[3], 2));
604
605 var tijd = parseDuration(tagmatch ? tagmatch[2] : time);
606
607 if (tagmatch) {
608 tag_time = new Date(tag_time.getTime() - (parseDuration(tagmatch[2]) - parseDuration(time))*60*1000);
609 var tr_a = $(table).find("td:contains('Aankomst:')").parents('tr:first');
610 var tr = tr_a.clone();
611 $(tr[0].cells[0]).text("Massatag op:");
612 $(tr[0].cells[1]).text(zeropad(tag_time.getDate())+'.'+zeropad(tag_time.getMonth()+1)+'.'+tag_time.getFullYear()+' '+zeropad(tag_time.getHours())+':'+zeropad(tag_time.getMinutes()));
613 tr.insertBefore(tr_a);
614
615 //19.03.14 07:00:27:894
616
617 if (parseInt(tagmatch[1],10) > 0) {
618 $("<a></a>").css('float', 'right').text('Volgende bevel')
619 .attr('href', location.href.replace(/id=\d+/, "id="+tagmatch[1]))
620 .appendTo(rows[0].cells[0]);
621 }
622 }
623
624 table.css('width', 600);
625 //rows[6].cells[1].textContent += " (Gebruikte tijd: "+time+")";
626
627 // Loopafstand
628 var row = table[0].insertRow(6);
629 var tr = $("<tr></tr>").insertBefore($(table).find("td:contains('Aankomst:')").parents('tr:first'));
630 $("<td></td>").attr('colspan', 2).text('Loopafstand:').appendTo(tr);
631 $("<td></td>").text(Math.round(fields*100)/100+" velden").appendTo(tr);
632
633 var troops = table.nextAll('table').find('td.unit-item');
634 var tag = null;
635 if (troops.length) {
636 // Auto tag
637 var units = troops.eq(0).parents("table:first").find("tr:first").find("td,th");
638 var unitTags = {
639 spear:3,
640 sword:4,
641 axe:3,
642 archer:3,
643 spy:0,
644 light:1,
645 marcher:1,
646 heavy:2,
647 ram:5,
648 catapult:5,
649 snob:6,
650 knight:1,
651 }
652
653 tag = 0;
654 units.each(function(i, e) {
655 var unit = $(e).find("img:first").attr('src');
656
657 if (! unit)
658 return;
659
660 unit = unit.match(/unit_([a-z]+)/)[1];
661
662 if (unit in unitTags && parseInt(troops.eq(i).text(),10) > 0) {
663 if (unitTags[unit] > tag)
664 tag = unitTags[unit];
665 }
666 });
667
668 var val = name;
669 if (val == "Aanval" || val == "Bevel" || val == "" || val.match(/^EIGEN /) || val.match(/^2bT (\d+) (\d+:\d{2}:\d{2})/)) {
670 var format = fmt2.replace(Rf, Math.floor(fields))
671 .replace(Rca, amatch[1])
672 .replace(Rcd, dmatch[1])
673 .replace(Ra, aname)
674 .replace(Rd, dname)
675 .replace(Rt, tags[tag]);
676
677 edit.val(format);
678 }
679
680 // Replace format
681 fmt = fmt2;
682
683 }
684
685 // Build tag table
686 table = $("<table><tr><th>Eenheid</th><th>Looptijd</th><th>Verschil</th><th>Benoemen</th></tr></table>")
687 .addClass('vis').css('margin-top', 10)
688 .insertAfter(table);
689
690 for (var i=0; i < looptijden.length; i++) {
691 if (tag != null && tag != i)
692 continue;
693
694 if (max[i] < fields)
695 break;
696
697 var looptijd = looptijden[i]*fields;
698 if (tijd > looptijd)
699 continue;
700
701 var start = new Date();
702 start.setTime(start.getTime()-looptijd*1000*60);
703 if (start > tag_time)
704 continue;
705
706 var format = fmt.replace(Rf, Math.floor(fields))
707 .replace(Rca, amatch[1])
708 .replace(Rcd, dmatch[1])
709 .replace(Ra, aname)
710 .replace(Rd, dname)
711 .replace(Rt, tags[i]);
712
713 var row = $("<tr></tr>").appendTo(table).attr('data-type', i);
714
715 $("<td></td>").text(labels[i]).appendTo(row);
716 //$("<td></td>").css('text-align', 'right').css('padding', 5).text(time).appendTo(row);
717 $("<td></td>").css('padding', 5).text(formatDuration(looptijd)).appendTo(row);
718 $("<td></td>").css('padding', 5).text(formatDuration(looptijd-tijd)).appendTo(row);
719
720 $("<td><input type='text' /><input type='button' value='OK' /></td>").appendTo(row).find('input')
721 .eq(0).val(format).css('width', 250).end()
722 .eq(1).click(function () {
723 var value = edit.val();
724 var format = $(this).prev().val();
725 if (format != value) {
726 edit.val(format);
727 } else if (tagmatch && tagmatch[1] > 0) {
728 location.href = location.href.replace(/id=\d+/, "id="+tagmatch[1]);
729 }
730 $(this).focus();
731 return false;
732 });
733 }
734
735 var defaultButton = table.find('td:contains("Ram/Kata")').nextAll('td').find('input[type=button]');
736 if (table[0].rows.length == 2) {
737 defaultButton = table.find('input[type=button]');
738 }
739 defaultButton[0].focus();
740
741//
742// /** Keyboard shortcuts */
743// var shortcutGenerator = function(i) {
744// return function() {
745// var tr = table.find('tr[data-type='+i+']');
746// if (tr.length)
747// tr.find("input[type='button'][value='OK']").click();
748// else
749// defaultButton.click();
750// return false;
751// }
752// };
753// for (var i=0; i < labels.length; i++) {
754// $(document).bind('keydown', key, shortcutGenerator(i));
755// }
756
757 return
758}
759
760
761
762
763
764
765/*
766 * Markeren van aanvallen
767 */
768else if (kleurtjes && game_data["screen"] == "overview_villages" && game_data["mode"] == 'incomings') {
769 var addColor = function(label, color) {
770 var span = $("<span></span>").text(" ")
771 .attr("data-speedtagger", "color")
772 .css({display:'inline-block',width:8,height:8, 'background-color':color, 'border':'1px solid black', 'vertical-align':'middle', 'margin-left':3, 'margin-right':3})
773 .insertBefore(label);
774 }
775
776 var defcolor = '#FF2900';
777 //var patterns = [/^[_ ]*(safe|ok|stacked|dood|fake|blocked)/i, '#008000', /^[_ ]*(ontweken|dodged)/i, '#C0BD0B', /^[_ ]*(ontwijk|dodge[^d]|os|(bij)?stacken|gevr(aagd)?)/i, '#FFBF00'];
778 var patterns = [/^[_ ]*(safe|ok|stacked|dood|block(ed)?)/i, '#008000',
779 /^[_ ]*(ontweken|dodged)/i, '#C0BD0B',
780 /^[_ ]*(gevr(aagd)?)/i, '#FFBF00',
781 /^[_ ]*(zooi|controle)/i, '#000000',
782 /^[_ ]*(ontwijk(en)?|dodge[^d]|os|(bij)?stacken)/i, '#F1880F'];
783
784
785 var labels = $("#incomings_table tr .quickedit");
786
787 unsafeWindow.speedtagger_defcolor = defcolor;
788 unsafeWindow.speedtagger_patterns = patterns;
789 unsafeWindow.speedtagger_labels = labels;
790
791 patterns = unsafeWindow.speedtagger_patterns;
792
793 labels.each(function (i, label) {
794 var edit = new QuickEdit($(label));
795 if (! edit.isAttack()) {
796 return;
797 }
798
799 for (var j=0; j < patterns.length; j+=2) {
800 if (patterns[j].exec(edit.val())) {
801 addColor(label, patterns[j+1]);
802 label = 0;
803 break;
804 }
805 }
806 if (label) {
807 addColor(label, defcolor);
808 }
809 });
810
811 // Hover
812 $("#incomings_table tr").hover(function () {
813 $(this).find('td').css("background-color", "#F5E1B7");
814 }, function () {
815 $(this).find('td').css("background-color", "");
816 });
817
818}
819
820
821
822
823/*
824 * Markeren van rapportjes
825 */
826else if (game_data["screen"] == "report") {
827 var patterns = [/(LAATSTE?);?[_ !*]*\)\s*$/i, /(TERUG(STUREN)?;?(\s*[0-9]+)?)[_ !*]*\)\s*$/i, /(CHECK);?[_ !*]*\)\s*$/i];
828
829 var markLabel = function (i, s) {
830 for (var j=0; j < patterns.length; j++) {
831 var p = patterns[j];
832 s.innerHTML = s.innerHTML.replace(p, "<span style='background-color:#CE4E4E; color: black;'>$1</span>");
833 }
834 }
835
836 if (location.href.match(/view=\b\d+\b/))
837 markLabel(0, $(".quickedit-label:first")[0]);
838
839 $("#report_list .quickedit-label").each(markLabel);
840
841}
842
843
844})();