Added: 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=1667718&view=auto
==============================================================================
--- steve/trunk/pytest/www/htdocs/js/steve_rest.js (added)
+++ steve/trunk/pytest/www/htdocs/js/steve_rest.js Thu Mar 19 12:11:36 2015
@@ -0,0 +1,173 @@
+// Function for fetching JSON from the REST API
+function getJSON(theUrl, xstate, callback) {
+       var xmlHttp = null;
+       if (window.XMLHttpRequest) {
+               xmlHttp = new XMLHttpRequest();
+       } else {
+               xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+       }
+       xmlHttp.open("GET", theUrl, true);
+       xmlHttp.send(null);
+       xmlHttp.onreadystatechange = function(state) {
+               if (xmlHttp.readyState == 4 && xmlHttp.status && xmlHttp.status 
>= 200) {
+                       if (callback) {
+                               window.setTimeout(callback, 0.01, 
xmlHttp.status, (xmlHttp.responseText && xmlHttp.responseText.length > 1) ? 
JSON.parse(xmlHttp.responseText) : null, xstate);
+                       }
+               }
+       }
+}
+
+
+// Posting to the REST API, returns http code + JSON response
+function postREST(url, json, oform, callback, xstate) {
+    var form = new FormData(oform)
+    var xmlHttp = null;
+    if (window.XMLHttpRequest) {
+       xmlHttp = new XMLHttpRequest();
+    } else {
+       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    for (i in json) {
+               if (json[i]) form.append(i, json[i])
+    }
+    
+       var response = null
+       var code = 500
+       xmlHttp.onreadystatechange = function(state) {
+               if (xmlHttp.readyState == 4 && xmlHttp.status && xmlHttp.status 
>= 200) {
+                       code = xmlHttp.status
+                       response = (xmlHttp.responseText && 
xmlHttp.responseText.length > 1) ? JSON.parse(xmlHttp.responseText) : null
+                       callback(code, response, xstate)
+               }
+       }
+       xmlHttp.open("POST", url, false);
+    xmlHttp.send(form);
+}
+
+
+
+
+// Election creation callback
+function createElectionCallback(code, response) {
+       if (code != 201) {
+               alert(response.message)
+       } else {
+               location.href = "/edit_election.html?" + response.id
+       }
+}
+
+// Create a new election
+function createElection() {
+       
+       // Fetch data
+       var eid = document.getElementById('eid').value;
+       var title = document.getElementById('title').value
+       var starts = document.getElementById('starts').value
+       var ends = document.getElementById('ends').value
+       var owner = document.getElementById('owner').value
+       var monitors = document.getElementById('monitors').value
+       
+       
+       
+       // Validate data
+       if (!eid || eid.length == 0) {
+               eid = 
parseInt(Math.random()*987654321).toString(16).toLowerCase()
+       }
+       if (starts && starts.length == 0 | parseInt(starts) == 0) starts = null;
+       if (ends && ends.length == 0 | parseInt(ends) == 0) ends = null;
+       if (ends) {
+               ends = parseInt($.datepicker.parseDate( "yy-mm-dd", 
ends).getTime()/1000)
+       }
+       if (starts) {
+               starts = parseInt($.datepicker.parseDate( "yy-mm-dd", 
starts).getTime()/1000)
+       }
+       
+       // Send request
+       var code, response = postREST("/steve/admin/setup/" + eid, {
+               owner: owner,
+               title: title,
+               monitors: monitors,
+               starts: starts,
+               ends: ends
+               },
+               undefined,
+               createElectionCallback) 
+}
+
+
+// Election editing
+function renderEditElection(code, response, election) {
+       if (code == 200) {
+               document.getElementById('title').innerHTML = "Edit election: " 
+ response.base_data.title + " (#" + election  + ")"
+               document.getElementById('iid').value = 
parseInt(Math.random()*987654321).toString(16).toLowerCase();
+               
+               var obj = document.getElementById('ballot')
+               obj.innerHTML = "There are no issues in this election yet"
+               var s = 0;
+               if (response.issues && response.issues.length > 0) {
+                       obj.innerHTML = "";
+               }
+               for (i in response.issues) {
+                       var issue = response.issues[i]
+                       s++;
+                       var outer = document.createElement('li');
+                       // Set style
+                       outer.setAttribute("class", "issueListItem")
+                       
+                       var no = document.createElement('div');
+                       no.setAttribute("class", "issueNumber")
+                       no.innerHTML = (s)
+                       
+                       // Add issue
+                       var inner = document.createElement('span')
+                       inner.innerHTML = issue.id + ": " + issue.title;
+                       outer.appendChild(no)
+                       outer.appendChild(inner)
+                       outer.setAttribute("onclick", 
"location.href='edit_issue.html?" + election + "/" + issue.id + "';")
+                       obj.appendChild(outer)
+               }
+       } else {
+               alert("Could not load election data: " + response.message)
+       }
+}
+
+function loadElectionData(election) {
+       election = election ? election : document.location.search.substr(1);
+       getJSON("/steve/voter/view/" + election, election, renderEditElection)
+}
+
+function changeSTVType(type) {
+       if (type == "yna") {
+               document.getElementById('yna').style.display = "block";
+               document.getElementById('stv').style.display = "none";
+       } else {
+               document.getElementById('yna').style.display = "none";
+               document.getElementById('stv').style.display = "block";
+       }
+}
+
+function createIssueCallback(code, response, state) {
+       if (code == 201) {
+               location.href = "/edit_issue.html?" + state.election + "/" + 
state.issue;
+       } else {
+               alert(response.message)
+       }
+}
+
+function createIssue(election) {
+       election = election ? election : document.location.search.substr(1);
+       var iid = document.getElementById('iid').value;
+       var type = document.getElementById('type').value;
+       var title = document.getElementById('ititle').value;
+       var description = document.getElementById('description').value;
+       
+       if (!iid || iid.length == 0) {
+               iid = 
parseInt(Math.random()*987654321).toString(16).toLowerCase()
+       }
+       
+       postREST("/steve/admin/create/" + election + "/" + iid, {
+               type: type,
+               title: title,
+               description: description
+       }, undefined, createIssueCallback, { election: election, issue: iid})
+}
\ No newline at end of file


Reply via email to