You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@steve.apache.org by hu...@apache.org on 2015/03/22 18:49:03 UTC
svn commit: r1668424 - in /steve/trunk/pytest/www/htdocs:
css/steve_interactive.css js/steve_rest.js
Author: humbedooh
Date: Sun Mar 22 17:49:03 2015
New Revision: 1668424
URL: http://svn.apache.org/r1668424
Log:
Add feature for editing STV elections
Modified:
steve/trunk/pytest/www/htdocs/css/steve_interactive.css
steve/trunk/pytest/www/htdocs/js/steve_rest.js
Modified: steve/trunk/pytest/www/htdocs/css/steve_interactive.css
URL: http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/css/steve_interactive.css?rev=1668424&r1=1668423&r2=1668424&view=diff
==============================================================================
--- steve/trunk/pytest/www/htdocs/css/steve_interactive.css (original)
+++ steve/trunk/pytest/www/htdocs/css/steve_interactive.css Sun Mar 22 17:49:03 2015
@@ -402,6 +402,11 @@ body, html {
}
+.formbox .candidateEditList {
+ min-height: 32px;
+ width: 1000px;
+}
+
.formbox .keyvaluepair {
min-height: 32px;
min-width: 700px;
Modified: steve/trunk/pytest/www/htdocs/js/steve_rest.js
URL: http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/js/steve_rest.js?rev=1668424&r1=1668423&r2=1668424&view=diff
==============================================================================
--- steve/trunk/pytest/www/htdocs/js/steve_rest.js (original)
+++ steve/trunk/pytest/www/htdocs/js/steve_rest.js Sun Mar 22 17:49:03 2015
@@ -161,7 +161,7 @@ var edit_c = []
var edit_s = []
var edit_i = null
-function keyvaluepair(name, text, type, value, locked) {
+function keyvaluepair(name, text, type, value, locked, onedit) {
var obj = document.createElement('div')
obj.setAttribute("class", "keyvaluepair");
var txt = document.createElement('div');
@@ -179,12 +179,18 @@ function keyvaluepair(name, text, type,
input.setAttribute("disabled", "true")
input.style.background = "#999"
}
+ if (onedit) {
+ input.setAttribute("onchange", onedit)
+ }
} else if (type == "textarea") {
var input = document.createElement('textarea')
input.setAttribute("id", name)
input.value = value
input.style.minWidth = "600px"
input.style.minHeight = "250px"
+ if (onedit) {
+ input.setAttribute("onchange", onedit)
+ }
obj.appendChild(input)
}
@@ -220,6 +226,73 @@ function saveYNA() {
election)
}
+
+function saveSTV() {
+ var l = document.location.search.substr(1).split('/');
+ var election = l[0]
+ var issue = l[1]
+
+ var title = document.getElementById('ititle').value
+ var description = document.getElementById('description').value
+
+ candidates = []
+ statements = []
+ for (var i = 0; i < 256; i++) {
+ if (document.getElementById('name_' + i)) {
+ var name = document.getElementById('name_' + i).value;
+ var statement = document.getElementById('statement_' + i).value;
+ candidates.push(name)
+ statements.push(statement ? statement : "")
+ }
+ }
+
+ postREST("/steve/admin/edit/" + election + "/" + issue, {
+ title: title,
+ description: description,
+ candidates: JSON.stringify(candidates),
+ statements: JSON.stringify(statements)
+ },
+ undefined,
+ saveCallback,
+ election)
+}
+
+function removeEditCandidate(indice) {
+ edit_i.candidates.splice(indice, 1);
+ renderEditCandidates()
+}
+
+function addEditCandidate() {
+ var name = window.prompt("Enter name of candidate:")
+ if (name) {
+ edit_i.candidates.push( {
+ name: name,
+ statement: "No statement made"
+ })
+ }
+
+ renderEditCandidates()
+}
+
+function renderEditCandidates() {
+ var obj = document.getElementById('candidateList')
+ obj.innerHTML = "<h3>Candidates (" + edit_i.candidates.length + "):</h3><a href=\"javascript:void(addEditCandidate());\" class='btn-purple'>Add a candidate</a>"
+
+ var s = 0
+ for (c in edit_i.candidates) {
+ s++;
+ var candidate = edit_i.candidates[c]
+ var name = candidate.name
+ var statement = candidate.statement
+ var h = document.createElement('h4')
+ h.innerHTML = name + " -   <a href='javascript:void(removeEditCandidate(\"" + name + "\"));'>Delete</a>"
+ obj.appendChild(h)
+ obj.appendChild(keyvaluepair("name_" + c, "Name:", "text", name, false, "edit_i.candidates[" + c + "].name = this.value"))
+ obj.appendChild(keyvaluepair("statement_" + c, "Statement/seconds:", "textarea", statement ? statement : "", false, "edit_i.candidates[" + c + "].statement = this.value"))
+ obj.appendChild(document.createElement('hr'))
+ }
+}
+
function renderEditIssue(code, response, issue) {
if (code == 200) {
var obj = document.getElementById('preloaderWrapper')
@@ -253,7 +326,30 @@ function renderEditIssue(code, response,
div.appendChild(btn)
obj.appendChild(div)
} else if (edit_i.type.match(/^stv/)) {
- obj.innerHTML = "<h3>Editing an STV issue</h3>"
+
+ // base data
+ obj.innerHTML = "<h3>Editing an " + edit_i.type.toUpperCase() + " issue</h3>"
+ obj.appendChild(keyvaluepair("id", "Issue ID:", "text", edit_i.id, true))
+ obj.appendChild(keyvaluepair("ititle", "Issue title:", "text", edit_i.title))
+ obj.appendChild(keyvaluepair("description", "Description (optinal):", "textarea", edit_i.description))
+ obj.appendChild(document.createElement('hr'))
+
+ // candidates
+ var cobj = document.createElement('div')
+ cobj.setAttribute("id", "candidateList")
+ cobj.setAttribute("class", "candidateEditList")
+ obj.appendChild(cobj)
+
+ var div = document.createElement('div')
+ div.setAttribute("class", "keyvaluepair")
+ var btn = document.createElement('input')
+ btn.setAttribute("type", "button")
+ btn.setAttribute("class", "btn-green")
+ btn.setAttribute("value", "Save changes")
+ btn.setAttribute("onclick", "saveSTV();")
+ div.appendChild(btn)
+ obj.appendChild(div)
+ renderEditCandidates()
}
} else {
alert(response.message)