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 + " &nbsp; - &nbsp <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)