Author: humbedooh
Date: Fri Mar 20 13:37:50 2015
New Revision: 1668010

URL: http://svn.apache.org/r1668010
Log:
Start work on bulk YNA voting, tweak some css

Added:
    steve/trunk/pytest/www/htdocs/bulk_yna.html
    steve/trunk/pytest/www/htdocs/images/vote_a.png   (with props)
    steve/trunk/pytest/www/htdocs/images/vote_n.png   (with props)
    steve/trunk/pytest/www/htdocs/images/vote_y.png   (with props)
Modified:
    steve/trunk/pytest/www/htdocs/css/steve_interactive.css
    steve/trunk/pytest/www/htdocs/election.html
    steve/trunk/pytest/www/htdocs/js/steve_rest.js

Added: steve/trunk/pytest/www/htdocs/bulk_yna.html
URL: 
http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/bulk_yna.html?rev=1668010&view=auto
==============================================================================
--- steve/trunk/pytest/www/htdocs/bulk_yna.html (added)
+++ steve/trunk/pytest/www/htdocs/bulk_yna.html Fri Mar 20 13:37:50 2015
@@ -0,0 +1,28 @@
+ <!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf8">
+<link rel="stylesheet" href="css/steve_interactive.css">
+<link rel="stylesheet" href="css/jquery-ui.css">
+<script src="js/steve_rest.js" type="text/javascript"></script>
+<script src="js/jquery.js" type="text/javascript"></script>
+<script src="js/jquery-ui.js" type="text/javascript"></script>
+<title>Apache STeVe: Bulk voting</title>
+
+</head>
+<body onload="window.setTimeout(loadElection, 1000, null, null, 
renderElectionBulk);">
+    <div id="popups"></div>
+    <p style="text-align: center;">
+        <img src="/images/steve_logo.png"/>
+    </p>
+<div class="formbox">
+
+<div id="preloaderWrapper">
+    <img src="/images/steve_spinner.gif"/>
+    <div id="preloader">
+        Loading issues, please wait...
+    </div>
+</div>
+</div>
+</body>
+</html>
\ No newline at end of file

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=1668010&r1=1668009&r2=1668010&view=diff
==============================================================================
--- steve/trunk/pytest/www/htdocs/css/steve_interactive.css (original)
+++ steve/trunk/pytest/www/htdocs/css/steve_interactive.css Fri Mar 20 13:37:50 
2015
@@ -65,10 +65,11 @@ p {
   padding: 4px 8px;
   text-decoration: none;
   text-align: center;
-  min-width: 50px;
+  min-width: 30px;
   position: relative;
   transition: color .1s ease;
   cursor: pointer;
+  margin-left: 10px;
 }
 .btn-red:hover {
   background: #d5421b !important;
@@ -86,16 +87,41 @@ p {
   padding: 4px 8px;
   text-decoration: none;
   text-align: center;
-  min-width: 50px;
+  min-width: 30px;
   position: relative;
   transition: color .2s ease;
   cursor: pointer;
+  margin-left: 10px;
 }
 
 .btn-green:hover {
   background: #52Aa2b !important;
   transition: 0.3s ease;
 }
+
+.btn-yellow {
+  font-weight: bold;
+  background: #daba3b !important;
+  border: #328a2b solid 1px;
+  border-radius: 3px;
+  color: #fff !important;
+  display: inline-block;
+  font-size: 14px;
+  padding: 4px 8px;
+  text-decoration: none;
+  text-align: center;
+  min-width: 30px;
+  position: relative;
+  transition: color .2s ease;
+  cursor: pointer;
+  margin-left: 10px;
+}
+
+.btn-yellow:hover {
+  background: #eaca3b !important;
+  transition: 0.3s ease;
+}
+
 .btn:hover {
   background: #357ebd;
 }
@@ -331,7 +357,7 @@ body, html {
   border-radius: 5px;
   border: 2px solid #333;
   box-shadow: 3px 4px 4px 0px rgba(153,153,153,1);
-  width: 800px;
+  min-width: 800px;
 }
 
 .formbox h2 {
@@ -377,6 +403,11 @@ fieldset legend {
 .issueList {
   text-align: left !important;
   list-style: none;
+  margin: 0 auto;
+}
+
+.issueList input {
+  min-width: 30px;
 }
 
 .issueListItem {
@@ -388,6 +419,19 @@ fieldset legend {
     font-family: monospace;
     font-size: 16px;
     background: linear-gradient(to bottom, #f8f8f8 0%,#dddddd 100%);
+    -khtml-user-drag: element;
+    animation: fadein 1s
+}
+
+
+.issueListItemWide {
+    border: 1px dotted #666;
+    padding: 4px;
+    width: 980px;
+    min-height: 25px;
+    font-family: monospace;
+    font-size: 16px;
+    background: linear-gradient(to bottom, #f8f8f8 0%,#dddddd 100%);
     -khtml-user-drag: element;
     animation: fadein 1s
 }

Modified: steve/trunk/pytest/www/htdocs/election.html
URL: 
http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/election.html?rev=1668010&r1=1668009&r2=1668010&view=diff
==============================================================================
--- steve/trunk/pytest/www/htdocs/election.html (original)
+++ steve/trunk/pytest/www/htdocs/election.html Fri Mar 20 13:37:50 2015
@@ -10,7 +10,7 @@
 <title>Apache STeVe: Election viewer</title>
 
 </head>
-<body onload="window.setTimeout(loadElection, 1000);">
+<body onload="window.setTimeout(loadElection, 1000, null, null, 
renderElectionFrontpage);">
     <div id="popups"></div>
     <p style="text-align: center;">
         <img src="/images/steve_logo.png"/>

Added: steve/trunk/pytest/www/htdocs/images/vote_a.png
URL: 
http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/images/vote_a.png?rev=1668010&view=auto
==============================================================================
Binary file - no diff available.

Propchange: steve/trunk/pytest/www/htdocs/images/vote_a.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: steve/trunk/pytest/www/htdocs/images/vote_n.png
URL: 
http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/images/vote_n.png?rev=1668010&view=auto
==============================================================================
Binary file - no diff available.

Propchange: steve/trunk/pytest/www/htdocs/images/vote_n.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: steve/trunk/pytest/www/htdocs/images/vote_y.png
URL: 
http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/images/vote_y.png?rev=1668010&view=auto
==============================================================================
Binary file - no diff available.

Propchange: steve/trunk/pytest/www/htdocs/images/vote_y.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

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=1668010&r1=1668009&r2=1668010&view=diff
==============================================================================
--- steve/trunk/pytest/www/htdocs/js/steve_rest.js (original)
+++ steve/trunk/pytest/www/htdocs/js/steve_rest.js Fri Mar 20 13:37:50 2015
@@ -175,7 +175,7 @@ function createIssue(election) {
 
 var step = 0;
 var election_data = null
-function loadElection(election, uid) {
+function loadElection(election, uid, callback) {
        
        var messages = ["Herding cats...", "Shaving yaks...", "Shooing some 
cows away...", "Fetching election data...", "Loading issues..."]
        if (!election || !uid) {
@@ -184,7 +184,7 @@ function loadElection(election, uid) {
                uid = l[1] ? l[1] : "";
        }
        if (step == 0) {
-               getJSON("/steve/voter/view/" + election + "?uid=" + uid, 
[election,uid], displayElection)
+               getJSON("/steve/voter/view/" + election + "?uid=" + uid, 
[election,uid, callback], displayElection)
        }
        
        var obj = document.getElementById('preloader');
@@ -196,18 +196,18 @@ function loadElection(election, uid) {
        }
        if (step % 2 == 1) {
                obj.style.transform = "translate(0,0)"
-       } else {
+       } else if (obj) {
                obj.style.transform = "translate(0,-500%)"
        }
        if (!election_data|| (step % 2 == 0) ) {
-               window.setTimeout(loadElection, 750);
+               window.setTimeout(loadElection, 750, election, uid, callback);
        }
 }
 
 function displayElection(code, response, el) {
        election_data = response
        if (code == 200) {
-               window.setTimeout(renderElectionFrontpage, 2000, response, el);
+               window.setTimeout(el[2], 2000, response, el);
        } else {
                document.getElementById('preloaderWrapper').innerHTML = 
"<h1>Sorry, an error occured while fetching election data:</h1><h2>" + 
response.message + "</h2>"
        }
@@ -225,8 +225,12 @@ function renderElectionFrontpage(respons
        issueList.setAttribute("class", "issueList")
        
        var s = 0;
+       var ynas = 0;
        for (i in response.issues) {
                var issue = response.issues[i]
+               if (issue.type == "yna") {
+                       ynas++;
+               }
                s++;
                var outer = document.createElement('li');
                // Set style
@@ -246,4 +250,118 @@ function renderElectionFrontpage(respons
                issueList.appendChild(outer)
        }
        par.appendChild(issueList)
+       
+       if (ynas > 1) {
+               var btn = document.createElement("input")
+               btn.setAttribute("type", "button")
+               btn.setAttribute("class", "btn-green")
+               btn.setAttribute("style", "margin: 30px;")
+               btn.setAttribute("value", "Bulk vote on YNA issues")
+               btn.setAttribute("onclick", "location.href='/bulk_yna.html?" + 
el[0] + "/" + el[1] + "';")
+               par.appendChild(btn)
+       }
+       
+}
+
+
+
+
+function renderElectionBulk(response, el) {
+       var par = document.getElementById('preloaderWrapper')
+       par.innerHTML = "";
+       par.setAttribute("id", "contents")
+       
+       var title = document.createElement('h1');
+       title.innerHTML = "Bulk YNA voting for: " + response.base_data.title;
+       par.appendChild(title);
+       
+       var issueList = document.createElement('ol');
+       issueList.setAttribute("class", "issueList")
+       
+       var s = 0;
+       var ynas = 0;
+       for (i in response.issues) {
+               var issue = response.issues[i]
+               if (issue.type == "yna") {
+                               
+                       s++;
+                       var outer = document.createElement('li');
+                       // Set style
+                       outer.setAttribute("class", "issueListItemWide")
+                       
+                       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.style.height = "32px"
+                       outer.style.marginBottom = "15px"
+                       
+                       // details
+                       var statement = document.createElement('div')
+            statement.setAttribute("class", "statement_marker")
+                       statement.style.float = "left"
+            statement.setAttribute("title", "Click to read issue details")
+            statement.innerHTML = "<a href='#details_"+issue.id+"'>Details</a>"
+                       outer.appendChild(statement)
+                       
+                       var yes = document.createElement('input')
+                       yes.setAttribute("type", "button")
+                       yes.setAttribute("value", "Yes")
+                       yes.setAttribute("class", "btn-green")
+                       yes.setAttribute("style", "float: right;");
+                       yes.setAttribute("onclick", "castVote('" + el[0] + "', 
'" + issue.id + "', '" + el[1] + "', 'y');")
+                       
+                       var no = document.createElement('input')
+                       no.setAttribute("type", "button")
+                       no.setAttribute("value", "No")
+                       no.setAttribute("class", "btn-red")
+                       no.setAttribute("style", " float: right;");
+                       no.setAttribute("onclick", "castVote('" + el[0] + "', 
'" + issue.id + "', '" + el[1] + "', 'n');")
+                       
+                       var abstain = document.createElement('input')
+                       abstain.setAttribute("type", "button")
+                       abstain.setAttribute("value", "Abstain")
+                       abstain.setAttribute("class", "btn-yellow")
+                       abstain.setAttribute("style", "float: right;");
+                       abstain.setAttribute("onclick", "castVote('" + el[0] + 
"', '" + issue.id + "', '" + el[1] + "', 'a');")
+                       
+                       var mark = document.createElement('img');
+                       mark.setAttribute("width", "26")
+                       mark.setAttribute("height", "32")
+                       mark.setAttribute("style", "float: right; margin-left: 
10px;")
+                       mark.setAttribute("id", "mark_" + issue.id)
+                       
+                       inner.appendChild(mark)
+                       inner.appendChild(no)
+                       inner.appendChild(abstain)
+                       inner.appendChild(yes)
+                       outer.style.animation = "fadein " + (0.5 +  (s/6)) + "s"
+                       issueList.appendChild(outer)
+               }
+       }
+       par.appendChild(issueList)
+
+}
+
+function castVote(election, issue, uid, vote) {
+       var mark = document.getElementById('mark_' + issue);
+       if (mark) {
+               mark.setAttribute("src", "/images/vote_" + vote[0] + ".png")
+       }
+       postREST("/steve/voter/vote/" + election + "/" + issue, {
+               uid: uid,
+               vote: vote
+       },
+       undefined,
+       castVoteCallback,
+       issue)
+}
+
+function castVoteCallback(code, response, issue) {
+       
 }
\ No newline at end of file


Reply via email to