<span id="trackers"> <table class="torrentTable" cellpadding="0" cellspacing="0" style="width: 100%"> <thead> <tr> <th>_(URL) <img src="theme/list-add" id="addTrackersPlus" style="width:16px;cursor:pointer;"/></th> <th>_(Status)</th> <th>_(Peers)</th> <th>_(Message)</th> </tr> </thead> <tbody id="trackersTable"></tbody> </table> </span> <script type="text/javascript"> var trackersDynTable = new Class ({ initialize: function(){ }, setup: function(table){ this.table = $(table); this.rows = new Hash(); }, removeRow: function(url){ if(this.rows.has(url)) { var tr = this.rows.get(url); tr.dispose(); this.rows.erase(url); return true; } return false; }, removeAllRows: function() { this.rows.each(function(tr, url) { this.removeRow(url); }.bind(this)); }, updateRow: function(tr, row){ var tds = tr.getElements('td'); for(var i=0; i<row.length; i++) { tds[i].set('html', row[i]); } return true; }, insertRow: function(row) { var url = row[0]; if(this.rows.has(url)) { var tr = this.rows.get(url); this.updateRow(tr, row); return; } //this.removeRow(id); var tr = new Element('tr'); this.rows.set(url, tr); for(var i=0; i<row.length; i++) { var td = new Element('td'); td.set('html', row[i]); td.injectInside(tr); } tr.injectInside(this.table); }, }); var waitingTrackers=false; var current_hash = ""; var loadTrackersData = function() { if(!$defined($('trackersTable'))) { // Tab changed return; } var new_hash = myTable.getCurrentTorrentHash(); if(new_hash == "") { tTable.removeAllRows(); loadTrackersData.delay(1500); return; } if(new_hash != current_hash) { tTable.removeAllRows(); current_hash = new_hash; } var url = 'json/propertiesTrackers/'+current_hash; if (!waitingTrackers) { waitingTrackers=true; var request = new Request.JSON({ url: url, noCache: true, method: 'get', onFailure: function() { $('error_div').set('html', 'qBittorrent client is not reachable'); waitingTrackers=false; loadTrackersData.delay(2000); }, onSuccess: function(trackers) { $('error_div').set('html', ''); if(trackers){ // Update Trackers data trackers.each(function(tracker){ var row = new Array(); row.length = 4; row[0] = tracker.url; row[1] = tracker.status; row[2] = tracker.num_peers; row[3] = tracker.msg; tTable.insertRow(row); }); } else { tTable.removeAllRows(); } waitingTrackers=false; loadTrackersData.delay(1500); } }).send(); } } tTable = new trackersDynTable(); tTable.setup($('trackersTable')); // Initial loading loadTrackersData(); // Add trackers code $('addTrackersPlus').addEvent('click', function addTrackerDlg() { if(current_hash.length == 0) return; new MochaUI.Window({ id: 'trackersPage', title: "_(Trackers addition dialog)", loadMethod: 'iframe', contentURL:'addtrackers.html?hash='+current_hash, scrollbars: true, resizable: false, maximizable: false, closable: true, paddingVertical: 0, paddingHorizontal: 0, width: 500, height: 250 }); }); </script>