From 25cb20db10b00bf033b166f78f90f7d78a4f2590 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Sat, 29 Aug 2015 20:51:07 +0000 Subject: [PATCH] Use callbacks for editing data in ResultsTable --- bridge_results_table.js | 78 ++++++++++++++++++++++++++------------ 1 files changed, 53 insertions(+), 25 deletions(-) diff --git a/bridge_results_table.js b/bridge_results_table.js index 4c83ac6..5a14698 100644 --- a/bridge_results_table.js +++ b/bridge_results_table.js @@ -1,8 +1,17 @@ -function ResultsTable(id, container) { +function ResultsTable(id, container, editPlayerCallback, editResultCallback) { this.id = id; this.players = []; this.results = []; this.store = window.sessionStorage; + + if(!editPlayerCallback) { + editPlayerCallback = this._editPlayerCallback; + } + this.editPlayerCallback = editPlayerCallback; + if(!editResultCallback) { + editResultCallback = this._editResultCallback; + } + this.editResultCallback = editResultCallback; container.appendChild(this._createTable()); } @@ -59,23 +68,26 @@ th.innerText = name; th.onclick = function(self) { return function() { var originalName = th.innerText; - var result = prompt('Podaj nowe inicjały gracza. Wyczyść pole, by go usunąć.', name); - - if(result == null) { - return; - } - - if(result) { - self.players[self.players.indexOf(originalName)] = result; - th.innerText = result; - } - else - { - var index = self.players.indexOf(originalName); - self.players = self.players.splice(index, 1); - self.results = self.results.splice(index, 1); - self.refresh(); - } + self.editPlayerCallback( + originalName, + function (result) { + if(result == null) { + return; + } + + if(result) { + self.players[self.players.indexOf(originalName)] = result; + th.innerText = result; + } + else + { + var index = self.players.indexOf(originalName); + self.players.splice(index, 1); + self.results.splice(index, 1); + self.refresh(); + } + } + ); } }(this); return th; }; @@ -84,6 +96,18 @@ this.results[i].push(result[i]); } this.refresh(); +}; +ResultsTable.prototype._editPlayerCallback = function(name, callback) { + var result = prompt('Podaj nowe inicjały gracza. Wyczyść pole, by go usunąć.', name); + if(result) { + callback(result); + } +}; +ResultsTable.prototype._editResultCallback = function(value, callback) { + var result = prompt('Podaj nową wartość:', value); + if(result) { + callback(result); + } }; ResultsTable.prototype.refresh = function() { this.save(); @@ -100,7 +124,9 @@ } for(var i = 0; i < this.results.length; i++) { var td = document.createElement('th'); - td.innerText = this.results[i].reduce(function(a, b) { return (parseInt(a, 10) || 0)+(parseInt(b, 10) || 0); }, 0); + td.innerText = this.results[i].reduce( + function(a, b) { return (parseInt(a, 10) || 0)+(parseInt(b, 10) || 0); }, 0 + ); this.tresults.appendChild(td); } @@ -115,11 +141,13 @@ var td = document.createElement('td'); td.innerText = this.results[j][i]; td.onclick = function(j, i, self) { return function() { - var result = prompt('Podaj nową wartość:', self.results[j][i]); - if(result != null) { - self.results[j][i] = result; - self.refresh(); - } + self.editResultCallback( + self.results[j][i], + function (value) { + self.results[j][i] = value; + self.refresh(); + } + ); } }(j, i, this); tr.appendChild(td); } @@ -127,4 +155,4 @@ this.tbody.appendChild(tr); } } -}; \ No newline at end of file +}; -- Gitblit v1.9.1