Real screenshots in the userspec.
|
@ -75,18 +75,26 @@ Note that:
|
||||||
|
|
||||||
The map view shows a map of the streets immediately around their current location, overlaid, on dwellings where canvas has already been done, with icons indicating the voting preference expressed, and with the dwellings where canvassing is still required marked with an icon indicating this:
|
The map view shows a map of the streets immediately around their current location, overlaid, on dwellings where canvas has already been done, with icons indicating the voting preference expressed, and with the dwellings where canvassing is still required marked with an icon indicating this:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Selecting a building on the map leads to
|
Selecting a building on the map leads to
|
||||||
|
|
||||||
1. On buildings with multiple flats, a schematic view of the flats in the building (I haven't yet really got a good idea how to do this; it may be just a list). Selecting a flat from this view leads to the *Electors View*;
|
1. On buildings with multiple flats, the *Building View*;
|
||||||
2. On buildings with only one dwelling, the *Electors View*.
|
2. On buildings with only one dwelling, the *Electors View*.
|
||||||
|
|
||||||
|
## Building View
|
||||||
|
|
||||||
|
A list of dwellings in a building.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Selecting a flat from this view leads to the *Electors View*.
|
||||||
|
|
||||||
## Electors View
|
## Electors View
|
||||||
|
|
||||||
The *Electors View* shows a schematic of the registered electors in a dwelling:
|
The *Electors View* shows a schematic of the registered electors in a dwelling:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
One figure is shown for each elector, labelled with their name. In the dummy pages I've shown gendered stick figures, because I believe that in many casesthis will help the canvasser identify the person who has answered the door; but this may be seen as excluding electors with non-binary gender, and, in any case, I believe we don't actually get gender data (other than salutation) in the electoral roll data. So this may have to be reconsidered.
|
One figure is shown for each elector, labelled with their name. In the dummy pages I've shown gendered stick figures, because I believe that in many casesthis will help the canvasser identify the person who has answered the door; but this may be seen as excluding electors with non-binary gender, and, in any case, I believe we don't actually get gender data (other than salutation) in the electoral roll data. So this may have to be reconsidered.
|
||||||
|
|
||||||
|
@ -112,9 +120,18 @@ The *Issues View* is a simple list of issues:
|
||||||
| Other |
|
| Other |
|
||||||
+------------------------------------------------+
|
+------------------------------------------------+
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
This list will not be hard-coded but will be dynamic; thus, if we find an issue we didn't predict is regularly coming up on the doorstep an *Administrator* can add it to the list.
|
This list will not be hard-coded but will be dynamic; thus, if we find an issue we didn't predict is regularly coming up on the doorstep an *Administrator* can add it to the list.
|
||||||
|
|
||||||
Selecting the back button from the *Issues View* returns to the *Electors View*. Selecting any option from the Issues view leads to a single page giving top level points the canvasser can make to the elector on the doorstep, and a link to a *Followup Request* form. There is also a 'back' button allowing the user to return to the *Issues View*
|
Selecting the back button from the *Issues View* returns to the *Electors View*. Selecting any option from the Issues view leads to the *Issue View*.
|
||||||
|
|
||||||
|
## Issue View
|
||||||
|
|
||||||
|
A single page giving top level points the canvasser can make to the elector on the doorstep, regarding the selected issue; and a link to a *Followup Request* form. There is also a 'back' button allowing the user to return to the *Issues View*.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Followup Request form
|
## Followup Request form
|
||||||
|
|
||||||
|
@ -132,6 +149,8 @@ The *Followup Request* form is a simple form which allows the canvasser to recor
|
||||||
| |
|
| |
|
||||||
+------------------------------------------------+
|
+------------------------------------------------+
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## How Street Canvassers will use the system
|
## How Street Canvassers will use the system
|
||||||
|
|
||||||
Street Canvassers will typically use the system by
|
Street Canvassers will typically use the system by
|
||||||
|
|
BIN
dummies/building.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
dummies/building.xcf
Normal file
BIN
dummies/followup.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
dummies/followup.xcf
Normal file
BIN
dummies/issue.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
dummies/issue.xcf
Normal file
BIN
dummies/issues.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
dummies/issues.xcf
Normal file
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 359 KiB After Width: | Height: | Size: 38 KiB |
|
@ -96,13 +96,10 @@
|
||||||
:closure-warnings
|
:closure-warnings
|
||||||
{:externs-validation :off :non-standard-jsdoc :off}
|
{:externs-validation :off :non-standard-jsdoc :off}
|
||||||
:externs ["react/externs/react.js"]}}}}
|
:externs ["react/externs/react.js"]}}}}
|
||||||
|
|
||||||
|
|
||||||
:aot :all
|
:aot :all
|
||||||
:uberjar-name "youyesyet.jar"
|
:uberjar-name "youyesyet.jar"
|
||||||
:source-paths ["env/prod/clj"]
|
:source-paths ["env/prod/clj"]
|
||||||
:resource-paths ["env/prod/resources"]}
|
:resource-paths ["env/prod/resources"]}
|
||||||
|
|
||||||
:dev [:project/dev :profiles/dev]
|
:dev [:project/dev :profiles/dev]
|
||||||
:test [:project/dev :project/test :profiles/test]
|
:test [:project/dev :project/test :profiles/test]
|
||||||
|
|
||||||
|
@ -133,9 +130,6 @@
|
||||||
:source-map true
|
:source-map true
|
||||||
:optimizations :none
|
:optimizations :none
|
||||||
:pretty-print true}}}}
|
:pretty-print true}}}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
:doo {:build "test"}
|
:doo {:build "test"}
|
||||||
:source-paths ["env/dev/clj"]
|
:source-paths ["env/dev/clj"]
|
||||||
:resource-paths ["env/dev/resources"]
|
:resource-paths ["env/dev/resources"]
|
||||||
|
|
|
@ -390,6 +390,10 @@ th {
|
||||||
padding-bottom: 2em;
|
padding-bottom: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#issue-text {
|
||||||
|
font-size: 200%;
|
||||||
|
}
|
||||||
|
|
||||||
#main-container {
|
#main-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
|
@ -41,18 +41,18 @@
|
||||||
{:id 4 :name "Andy Anderson" :intention :yes}]}]}
|
{:id 4 :name "Andy Anderson" :intention :yes}]}]}
|
||||||
;;; a list of the addresses in the current location at which there
|
;;; a list of the addresses in the current location at which there
|
||||||
;;; are electors registered.
|
;;; are electors registered.
|
||||||
:addresses [{:id 1 :address "13 Imaginary Terrace, IM1 3TE" :latitude 55.8253043 :longitude -4.2570944
|
:addresses [{:id 1 :address "13 Imaginary Terrace, IM1 3TE" :latitude 55.8253043 :longitude -4.2569057
|
||||||
:dwellings [{:id 1
|
:dwellings [{:id 1
|
||||||
:electors [{:id 1 :name "Alan Anderson" :gender :male :intention :no}
|
:electors [{:id 1 :name "Alan Anderson" :gender :male :intention :no}
|
||||||
{:id 2 :name "Ann Anderson" :gender :female}
|
{:id 2 :name "Ann Anderson" :gender :female}
|
||||||
{:id 3 :name "Alex Anderson" :gender :fluid :intention :yes}
|
{:id 3 :name "Alex Anderson" :gender :fluid :intention :yes}
|
||||||
{:id 4 :name "Andy Anderson" :intention :yes}]}]}
|
{:id 4 :name "Andy Anderson" :intention :yes}]}]}
|
||||||
{:id 2 :address "15 Imaginary Terrace, IM1 3TE" :latitude 55.8252354 :longitude -4.2572778
|
{:id 2 :address "15 Imaginary Terrace, IM1 3TE" :latitude 55.8252354 :longitude -4.2569077
|
||||||
:dwellings [{:id 2
|
:dwellings [{:id 2
|
||||||
:electors [{:id 1 :name "Beryl Brown" :gender :female}
|
:electors [{:id 1 :name "Beryl Brown" :gender :female}
|
||||||
{:id 2 :name "Betty Black" :gender :female}]}]}
|
{:id 2 :name "Betty Black" :gender :female}]}]}
|
||||||
|
|
||||||
{:id 3 :address "17 Imaginary Terrace, IM1 3TE" :latitude 55.825166 :longitude -4.257026
|
{:id 3 :address "17 Imaginary Terrace, IM1 3TE" :latitude 55.825166 :longitude -4.256926
|
||||||
:dwellings [{:id 3 :sub-address "Flat 1"
|
:dwellings [{:id 3 :sub-address "Flat 1"
|
||||||
:electors [{:id 1 :name "Catriona Crathie" :gender :female :intention :yes}
|
:electors [{:id 1 :name "Catriona Crathie" :gender :female :intention :yes}
|
||||||
{:id 2 :name "Colin Caruthers" :gender :male :intention :yes}
|
{:id 2 :name "Colin Caruthers" :gender :male :intention :yes}
|
||||||
|
|
|
@ -41,11 +41,11 @@
|
||||||
(let [issue @(subscribe [:issue])
|
(let [issue @(subscribe [:issue])
|
||||||
issues @(subscribe [:issues])
|
issues @(subscribe [:issues])
|
||||||
elector @(subscribe [:elector])
|
elector @(subscribe [:elector])
|
||||||
address @(subscribe [:address])]
|
dwelling @(subscribe [:dwelling])]
|
||||||
(js/console.log (str "Issue is " issue "; elector is " elector))
|
(js/console.log (str "Issue is " issue "; elector is " elector))
|
||||||
(cond
|
(cond
|
||||||
(nil? address)
|
(nil? dwelling)
|
||||||
(ui/error-panel "No address selected")
|
(ui/error-panel "No dwelling selected")
|
||||||
(nil? issues)
|
(nil? issues)
|
||||||
(ui/error-panel "No issues loaded")
|
(ui/error-panel "No issues loaded")
|
||||||
true
|
true
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
:on-change #(dispatch [:set-elector (.-value (.-target %))])}
|
:on-change #(dispatch [:set-elector (.-value (.-target %))])}
|
||||||
(map
|
(map
|
||||||
#(let []
|
#(let []
|
||||||
[:option {:value (:id %) :key (:id %)} (:name %)]) (:electors address))]]
|
[:option {:value (:id %) :key (:id %)} (:name %)]) (:electors dwelling))]]
|
||||||
[:p.widget
|
[:p.widget
|
||||||
[:label {:for "issue"} "Issue"]
|
[:label {:for "issue"} "Issue"]
|
||||||
;; #(reset! val (-> % .-target .-value))
|
;; #(reset! val (-> % .-target .-value))
|
||||||
|
|