Index: sitescripts/reports/static/reports.js |
=================================================================== |
--- a/sitescripts/reports/static/reports.js |
+++ b/sitescripts/reports/static/reports.js |
@@ -29,6 +29,33 @@ |
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """); |
} |
+function setRadio(radio, value) |
+{ |
+ for (var i = 0; i < radio.length; i++) |
+ { |
+ if (radio[i].value == value) |
+ radio[i].checked = true; |
+ else |
+ radio[i].checked = false; |
+ } |
+} |
+ |
+function setRadioListener(radio, listener) |
+{ |
+ for (var i = 0; i < radio.length; i++) |
+ radio[i].addEventListener("click", listener, false); |
+} |
+ |
+function getCheckedRadio(radio) |
+{ |
+ for (var i = 0; i < radio.length; i++) |
+ { |
+ if (radio[i].checked) |
+ return radio[i]; |
+ } |
+ return undefined; |
+} |
+ |
function saveSecret(guid, secret) |
{ |
var secrets = localStorage.secrets; |
@@ -48,7 +75,7 @@ |
var statusCell = document.getElementById("statusCell"); |
if (statusCell) |
status = statusCell.textContent; |
- |
+ |
var div = document.createElement("div"); |
div.className = "updateLink" |
var link = document.createElement("a"); |
@@ -67,7 +94,7 @@ |
if (document.getElementById("emailCell")) |
notifyBox = '<span id="notifyField"><input type="checkbox" id="notify" name="notify" value="1" /> <label for="notify">Notify user</label></span>'; |
- div.innerHTML = '<form action="/updateReport" method="POST">' + |
+ div.innerHTML = '<form id="updateForm" action="/updateReport" method="POST">' + |
'<input type="hidden" name="secret" value="' + escapeHTML(secret) + '" />' + |
'<input type="hidden" name="guid" value="' + escapeHTML(guid) + '" />' + |
'<p>' + |
@@ -76,7 +103,8 @@ |
'</p>' + |
'<p>' + |
'Enter new status:' + notifyBox + '<br />' + |
- '<textarea id="statusField" name="status" oninput="updateTemplateButtons();"></textarea>' + |
+ '<textarea id="statusField" name="status" oninput="updateTemplateButtons();"></textarea>' + |
+ '<br />Usefulness: <input type="radio" name="usefulness" value="0" checked="checked" /> not established <input type="radio" name="usefulness" value="1" /> useful <input type="radio" name="usefulness" value="-1" /> useless' + |
'</p>' + |
'<div>' + |
'<button id="addTemplateButton" type="button" onclick="addTemplate();">Add as template</button>' + |
@@ -84,19 +112,33 @@ |
'<input type="submit" value="Change status"/>' + |
'</div>' + |
'</form>'; |
+ var radios = document.getElementById("updateForm").elements.usefulness; |
document.getElementById("templatesField").addEventListener("change", function() |
{ |
if (this.selectedIndex > 0) |
{ |
- document.getElementById("statusField").value = this.options[this.selectedIndex].value; |
+ var template = this.options[this.selectedIndex].value.split("\1"); |
+ var displayText = template[template.length - 1]; |
+ if (template.length > 1) |
+ setRadio(radios, template[0]); |
+ document.getElementById("statusField").value = displayText; |
var notifyField = document.getElementById("notify"); |
if (notifyField) |
notifyField.checked = true; |
updateTemplateButtons(); |
} |
}, false); |
+ |
var statusField = document.getElementById("statusField"); |
statusField.value = status; |
+ |
+ var usefulness = 0; |
+ var usefulnessCell = document.getElementById("usefulnessCell"); |
+ if (usefulnessCell) |
+ usefulness = usefulnessCell.getAttribute("value"); |
+ setRadio(radios, usefulness); |
+ setRadioListener(radios, updateTemplates); |
+ |
updateTemplates(); |
statusField.focus(); |
} |
@@ -109,9 +151,16 @@ |
templatesField.remove(1); |
for (var i = 0; i < templates.length; i++) |
{ |
- var displayText = templates[i]; |
+ var template = templates[i].split("\1"); |
+ var displayText = template[template.length - 1]; |
if (displayText.length > 150) |
displayText = displayText.substr(0, 75) + "..." + displayText.substr(displayText.length - 75, displayText.length); |
+ if (template.length > 1) |
+ { |
+ usefulnessText = template[0] > 0 ? "useful" : template[0] < 0 ? "useless" : null; |
+ if (usefulnessText != null) |
+ displayText = "[" + usefulnessText + "] " + displayText; |
+ } |
templatesField.add(new Option(displayText, templates[i], false, false), null); |
} |
updateTemplateButtons(); |
@@ -120,10 +169,19 @@ |
function updateTemplateButtons() |
{ |
var currentText = document.getElementById("statusField").value; |
+ var usefulnessValue = "0"; |
+ var usefulnessButton = getCheckedRadio(document.getElementById("updateForm").elements.usefulness); |
+ if (usefulnessButton) |
+ usefulnessValue = usefulnessButton.value; |
+ |
var options = document.getElementById("templatesField").options; |
for (var i = 1; i < options.length; i++) |
{ |
- if (options[i].value == currentText) |
+ var template = options[i].value.split("\1"); |
+ var text = template[template.length - 1]; |
+ var usefulness = template.length > 1 ? template[0] : "0"; |
+ |
+ if (text == currentText && usefulness == usefulnessValue) |
{ |
document.getElementById("templatesField").selectedIndex = i; |
document.getElementById("addTemplateButton").style.display = "none"; |
@@ -140,7 +198,13 @@ |
function addTemplate() |
{ |
- templates.push(document.getElementById("statusField").value); |
+ var usefulnessValue = "0"; |
+ var usefulnessButton = getCheckedRadio(document.getElementById("updateForm").elements.usefulness); |
+ if (usefulnessButton) |
+ usefulnessValue = usefulnessButton.value; |
+ |
+ var value = usefulnessValue + "\1" + document.getElementById("statusField").value; |
+ templates.push(value); |
templates.sort(); |
localStorage.templates = templates.join("\0"); |
updateTemplates(); |
@@ -149,9 +213,18 @@ |
function removeTemplate() |
{ |
var currentText = document.getElementById("statusField").value; |
+ var usefulnessValue = "0"; |
+ var usefulnessButton = getCheckedRadio(document.getElementById("updateForm").elements.usefulness); |
+ if (usefulnessButton) |
+ usefulnessValue = usefulnessButton.value; |
for (var i = 0; i < templates.length; i++) |
- if (templates[i] == currentText) |
+ { |
+ var template = templates[i].split("\1"); |
+ var text = template[template.length - 1]; |
+ var usefulness = template.length > 1 ? template[0] : "0"; |
+ if (text == currentText && usefulness == usefulnessValue) |
templates.splice(i--, 1); |
+ } |
localStorage.templates = templates.join("\0"); |
updateTemplates(); |
} |