From 1f18be5771c914d795054a13c24785207ca89001 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Thu, 16 Mar 2017 06:02:11 +0000 Subject: [PATCH 01/35] Added 'profiles.clj' to gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7ff653c..99b78ef 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ pom.xml.asc .nrepl-port /node_modules/ .DS_Store -*-init.clj \ No newline at end of file +*-init.clj +profiles\.clj From 9540ae05751d21a31532fdffec9509f4eaa785a3 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Thu, 16 Mar 2017 09:00:39 +0000 Subject: [PATCH 02/35] Added collaboration stuff to README --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5900935..82cece5 100644 --- a/README.md +++ b/README.md @@ -38,12 +38,6 @@ You'll also need to create your own local copy of *profiles.clj*, which should c Where *username* is the username required to access the database, and *thisisnotsecure* is the password which authenticates that username. -## Further Reading - -If you're thinking of joining in development on this I'd strongly recommend you get hold of a copy of [Dmitry Sotnikov](https://github.com/yogthos)'s [Web Development with Clojure, Second Edition](https://pragprog.com/book/dswdcloj2/web-development-with-clojure-second-edition). - -You should also read the [User-Oriented Specification](doc/specification/userspec.md) and any other documentation which appears under the *doc/specification* hierarchy. - ## Running To start a web server for the application, run: @@ -58,6 +52,51 @@ as above; in the other, run lein figwheel +## Working on this project + +You should get the [ZenHub](https://github.com/integrations/zenhub) plug-in for your favourite browser; I use ZenHub for project management, and you (and I) will find collaborating much easier if you do. To join in + +1. Clone the project from [my repository](https://github.com/simon-brooke/youyesyet); +2. Visit the [kanban board](https://github.com/simon-brooke/youyesyet#boards?repos=70809242) and choose an issue you'd like to work on; +3. Assign that issue to yourself and move it into the 'in progress' column; +4. Use gitflow: start a new feature; +5. Work on the issue; +6. When you are satisfied with your work, commit it to your repository in your feature branch; +7. Submit a pull request and move the issue to the 'QA/Review' column on the kanban board; +8. If your work works, I'll integrate it into the develop branch, which you can then pull; +9. Rinse and repeat! + +Obviously I'd appreciate it if you'd [mail me](mailto:simon@journeyman.cc) to introduce yourself, but there's no need to do so. + +Finally, if you take a ticket and are not able to finish it, please + +1. mail me to say so; +2. move the issue back to the 'backlog' column on the kanban board. + +And *many thanks*! + +## More about tooling + +Note that all tools recommended in this document are free for non-commercial use; not all are open source. + +### Editors/IDEs + +I (Simon) use, like and recommend [LightTable](http://lighttable.com/) as my editor; I used to use Emacs, and there is excellent Clojure tooling for Emacs, but these days Emacs ways of working seem just too far from everything else to be comfortable to me. [NightCode](https://sekao.net/nightcode/) is a lighter-weight Clojure IDE which you may like. There's also [Cursive](https://cursive-ide.com/) but it isn't free and I haven't tried it. + +### Git + +I'm currently using [GitKraken](https://www.gitkraken.com/), on Linux, Windows, and Mac. Like so many things it works best on Linux, but it's good on both other platforms. However, I confess that although I like the ability to easily view the whole structure of the git repository, I tend to drop back to the command line if I'm doing anything tricky with Git. + +### Database + +The database is [Postgres](https://www.postgresql.org/). I have no plans even to support anything else; I don't feel we have time to mess about. However, if someone wants to fork the code and implement a different database, that's up to them. I'm afraid I do all database stuff from the command line; [there are graphical tools for Postgres](https://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools) but personally I've never found graphical tools for databases much use. + +## Further Reading + +If you're thinking of joining in development on this I'd strongly recommend you get hold of a copy of [Dmitry Sotnikov](https://github.com/yogthos)'s [Web Development with Clojure, Second Edition](https://pragprog.com/book/dswdcloj2/web-development-with-clojure-second-edition). + +You should also read the [User-Oriented Specification](doc/specification/userspec.md) and any other documentation which appears under the *doc/specification* hierarchy. + ## License Copyright © 2016 Simon Brooke for the Radical Independence Campaign. From b581f8c06e1c22399fedf6ea2e91b2b0787462f2 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Sun, 19 Mar 2017 15:14:54 +0000 Subject: [PATCH 03/35] Minor edits --- doc/specification/userspec.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/specification/userspec.md b/doc/specification/userspec.md index 9c31b39..3f494b1 100644 --- a/doc/specification/userspec.md +++ b/doc/specification/userspec.md @@ -24,7 +24,7 @@ It's my hope that we'd have enough Issue Experts sitting in the comfort of their ### Analysts -*Canvassers* are able to see voter canvas for the streets immediately around where they are working. They must be able to do so, because otherwise they cannot effectively canvas. But we must assume that sooner or later a hostile person will join the system as a canvasser, so canvassers should not have access to wider canvas data. Therefore we need a category of trusted user who can view wider maps of where canvas data has been collected, in order to be able to direct teams of canvassers to areas where it has not been collected. For want of a better word I'll call these *Analysts*. +*Canvassers* are able to see voter canvas data for the streets immediately around where they are working. They must be able to do so, because otherwise they cannot effectively canvas. But we must assume that sooner or later a hostile person will join the system as a canvasser, so canvassers should not have access to wider canvas data. Therefore we need a category of trusted user who can view wider maps of where canvas data has been collected, in order to be able to direct teams of canvassers to areas where it has not been collected. For want of a better word I'll call these *Analysts*. ### Administrators @@ -88,12 +88,14 @@ The *Electors View* shows a schematic of the registered electors in a dwelling: ![Electors View](https://raw.githubusercontent.com/simon-brooke/youyesyet/master/dummies/occupants_800.png) -One figure is shown for each elector, labelled with their name. Below the figure are: +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. + +Below the figure are: 1. One clear 'voting intention' button for each option (e.g., 'Yes', 'No'), greyed unless selected; 2. One issues button. -Selecting an option icon records that the elector represented by the figure has expressed an opinion that they will vote for that option. Selecting the issues icon brings up and issues view. +Selecting an option icon records that the elector represented by the figure has expressed an intention that they will vote for that option. Selecting the issues icon brings up and issues view. ## Issues View From ce9520fc2c174fd03c2297a1e49bd5d5adb12cf0 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Sun, 19 Mar 2017 16:32:14 +0000 Subject: [PATCH 04/35] Added luminus logo to credits --- resources/public/img/luminus-logo.png | Bin 0 -> 9579 bytes src/cljs/youyesyet/views/about.cljs | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 resources/public/img/luminus-logo.png diff --git a/resources/public/img/luminus-logo.png b/resources/public/img/luminus-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..df6c2837ac39a9c3aaa23ed1b63ebdabf54a932b GIT binary patch literal 9579 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 literal 0 HcmV?d00001 diff --git a/src/cljs/youyesyet/views/about.cljs b/src/cljs/youyesyet/views/about.cljs index cbfcc7a..a344df7 100644 --- a/src/cljs/youyesyet/views/about.cljs +++ b/src/cljs/youyesyet/views/about.cljs @@ -39,6 +39,10 @@ [:img {:src "img/ric-logo.png" :width "24" :height "24"}] " A project of the " [:a {:href "https://radical.scot/"} "Radical Independence Campaign"]] + [:p {:class "centre"} + [:img {:src "img/luminus-logo.png" :alt "Luminus" :height "24" :width "24"}] + " Built with " + [:a {:href "http://www.luminusweb.net/"} "Luminus Web"]] [:p {:class "centre"} [:img {:src "img/clojure-icon.gif" :alt "Clojure" :height "24" :width "24"}] " Powered by " From 7439e5ae1563ad960a381678017c9dea75084b45 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Sun, 19 Mar 2017 17:54:37 +0000 Subject: [PATCH 05/35] #30: Starting to work. We can serve both conventional pages, and the app. --- resources/templates/app.html | 53 ++++++++++++++++ resources/templates/base-authenticated.html | 42 +++++++++++++ resources/templates/base-unauthenticated.html | 40 ++++++++++++ resources/templates/home.html | 63 ++++--------------- src/clj/youyesyet/routes/home.clj | 7 ++- src/cljc/youyesyet/ui_utils.cljc | 1 + 6 files changed, 152 insertions(+), 54 deletions(-) create mode 100644 resources/templates/app.html create mode 100644 resources/templates/base-authenticated.html create mode 100644 resources/templates/base-unauthenticated.html create mode 100644 src/cljc/youyesyet/ui_utils.cljc diff --git a/resources/templates/app.html b/resources/templates/app.html new file mode 100644 index 0000000..5c334b5 --- /dev/null +++ b/resources/templates/app.html @@ -0,0 +1,53 @@ + + + + + + + + + You Yes Yet? + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + {% script "/js/app.js" %} + + + + + + diff --git a/resources/templates/base-authenticated.html b/resources/templates/base-authenticated.html new file mode 100644 index 0000000..7b2d418 --- /dev/null +++ b/resources/templates/base-authenticated.html @@ -0,0 +1,42 @@ + + + + + + + + + {{title}} + + +
+ + +

+ {{title}} +

+
+ +
+ +
+ {{content}} +
+
+ + + + + + diff --git a/resources/templates/base-unauthenticated.html b/resources/templates/base-unauthenticated.html new file mode 100644 index 0000000..d1382fc --- /dev/null +++ b/resources/templates/base-unauthenticated.html @@ -0,0 +1,40 @@ + + + + + + + + + {{title}} + + +
+ + +

+ {{title}} +

+
+ +
+ +
+ {% block content %} + {% endblock %} +
+
+ + diff --git a/resources/templates/home.html b/resources/templates/home.html index 5c334b5..f89b6ae 100644 --- a/resources/templates/home.html +++ b/resources/templates/home.html @@ -1,53 +1,12 @@ - - - - - - - - - You Yes Yet? - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+{% extends "base-unauthenticated.html" %} +{% block big-links %} + - -
- - - - - - - - - - {% script "/js/app.js" %} - - - - - - + +{% endblock %} +{% block content %} +froboz +{% endblock %} diff --git a/src/clj/youyesyet/routes/home.clj b/src/clj/youyesyet/routes/home.clj index 7fbf9f7..e2bffa7 100644 --- a/src/clj/youyesyet/routes/home.clj +++ b/src/clj/youyesyet/routes/home.clj @@ -5,11 +5,14 @@ [ring.util.http-response :as response] [clojure.java.io :as io])) +(defn app-page [] + (layout/render "app.html")) + (defn home-page [] - (layout/render "home.html")) + (layout/render "home.html" {:title "You Yes Yet?"})) (defroutes home-routes (GET "/" [] (home-page)) + (GET "/app" [] (app-page)) (GET "/docs" [] (-> (response/ok (-> "docs/docs.md" io/resource slurp)) (response/header "Content-Type" "text/plain; charset=utf-8")))) - diff --git a/src/cljc/youyesyet/ui_utils.cljc b/src/cljc/youyesyet/ui_utils.cljc new file mode 100644 index 0000000..3139020 --- /dev/null +++ b/src/cljc/youyesyet/ui_utils.cljc @@ -0,0 +1 @@ +;; Ultimately it's the goal to use the same UI utils for both main site and single page app. From e5d399b86d91c420c605abf67cf101683f0d09a6 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Sun, 19 Mar 2017 23:28:27 +0000 Subject: [PATCH 06/35] Significant progress, but a long way from finished. --- resources/public/css/screen.css | 68 ------- resources/public/css/yyy-app.css | 173 ++++++++++++++++++ .../css/{yyy-static.css => yyy-common.css} | 157 +--------------- resources/public/css/yyy-site.css | 170 +++++++++++++++++ resources/templates/app.html | 3 +- resources/templates/base-unauthenticated.html | 19 +- resources/templates/call-me-accepted.html | 41 +++++ resources/templates/call-me.html | 37 ++++ resources/templates/home.html | 7 +- resources/templates/notyet.html | 12 ++ resources/templates/supporter.html | 12 ++ src/clj/youyesyet/layout.clj | 3 +- src/clj/youyesyet/routes/home.clj | 18 +- src/cljs/youyesyet/views/about.cljs | 10 +- 14 files changed, 496 insertions(+), 234 deletions(-) delete mode 100644 resources/public/css/screen.css create mode 100644 resources/public/css/yyy-app.css rename resources/public/css/{yyy-static.css => yyy-common.css} (73%) create mode 100644 resources/public/css/yyy-site.css create mode 100644 resources/templates/call-me-accepted.html create mode 100644 resources/templates/call-me.html create mode 100644 resources/templates/notyet.html create mode 100644 resources/templates/supporter.html diff --git a/resources/public/css/screen.css b/resources/public/css/screen.css deleted file mode 100644 index 534309c..0000000 --- a/resources/public/css/screen.css +++ /dev/null @@ -1,68 +0,0 @@ -html, -body { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - height: 100%; -} -.navbar { - margin-bottom: 10px; -} -.navbar-brand { - float: none; -} -.navbar-nav .nav-item { - float: none; -} -.navbar-divider, -.navbar-nav .nav-item+.nav-item, -.navbar-nav .nav-link + .nav-link { - margin-left: 0; -} -@media (min-width: 34em) { - .navbar-brand { - float: left; - } - .navbar-nav .nav-item { - float: left; - } - .navbar-divider, - .navbar-nav .nav-item+.nav-item, - .navbar-nav .nav-link + .nav-link { - margin-left: 1rem; - } -} - -@-moz-keyframes three-quarters-loader { - 0% { - -moz-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -moz-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@-webkit-keyframes three-quarters-loader { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@keyframes three-quarters-loader { - 0% { - -moz-transform: rotate(0deg); - -ms-transform: rotate(0deg); - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -moz-transform: rotate(360deg); - -ms-transform: rotate(360deg); - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - diff --git a/resources/public/css/yyy-app.css b/resources/public/css/yyy-app.css new file mode 100644 index 0000000..8a46cd2 --- /dev/null +++ b/resources/public/css/yyy-app.css @@ -0,0 +1,173 @@ +/** + * Additional CSS for the main site. Navigation works differently between + * app and the main site; in the app it's driven by React, while in + * the main site it's CSS. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + + +/* desktops and laptops, primarily. Adapted to mouse; targets may be small */ +@media all and (min-device-width: 1025px) { + /* top-of-page navigation, not editable, provided by Smeagol */ + #nav{ + margin: 0; + padding: 0; + top: 0; + width: 100%; + _position: absolute; + _top: expression(document.documentElement.scrollTop); + z-index: 149; + background:rgba(7,27,51,0.8); + } + + /* only needed for fly-out menu effect on tablet and phone stylesheets */ + #nav-icon { + display: none; + } + + #nav-menu { + margin: 0; + padding: 0; + } + + #nav menu li { + padding: 0; + margin: 0; + display: inline; + } + + #nav menu li a { + color: white; + text-decoration: none; + font-weight: bold; + padding: 0.1em 0.75em; + margin: 0; + } + + #nav menu li.active a { background: gray;} + li.nav-item a:hover { background: rgb( 240, 240, 240) } + li.nav-item a:active { background: gray; color: white; } + + #nav menu li#user { + padding: 0 1em; + float: right; + } +} + +/* tablets, primarily. Adapted to touch; targets are larger */ +@media all and (min-device-width: 769px) and (max-device-width: 1024px) { + #nav{ + margin: 0; + padding: 0; + position: fixed; + z-index: 149; + color: silver; + background:rgba(40,40,40,0.9); + } + + #nav a { + color: white; + text-decoration: none; + font-weight: bold; + } + + #nav:hover #nav-menu { + display: block; + list-style-type: none; + width: 100%; + } + + #nav-icon { + padding: 0; + } + + #nav-menu { + display: none; + } + + #nav menu li { + padding: 0.5em 2em 0.5em 0.5em; + margin: 0.5 em; + font-size: 150%; + } + + #nav menu li a { + } + + #nav ul li.active a { background: silver;} + li.nav-item a:hover { background: rgb( 240, 240, 240) } + li.nav-item a:active { background: gray; color: white; } + + #nav menu #user { + text-decoration: none; + font-weight: bold; + margin: 0; + } +} + +/* phones, and, indeed, smaller phones. Adapted to touch; display radically + * decluttered */ +@media all and (max-device-width: 768px) { + #nav{ + margin: 0; + padding: 0; + position: fixed; + z-index: 149; + color: silver; + background:rgba(40,40,40,0.9); + } + + #nav:hover #nav-menu { + display: block; + list-style-type: none; + width: 100%; + } + + #nav a { + color: white; + text-decoration: none; + font-weight: bold; + } + + #nav-icon { + padding: 0; + } + + #nav-menu { + list-style-type: none; + display: none; + } + + #nav menu li { + padding: 0.5em 2em 0.5em 0.5em; + margin: 0.5 em; + font-size: 150%; + } + + #nav menu li a { + } + + #nav ul li.active a { background: silver;} + li.nav-item a:hover { background: rgb( 240, 240, 240) } + li.nav-item a:active { background: gray; color: white; } + + #nav menu #user { + text-decoration: none; + font-weight: bold; + margin: 0; + } +} diff --git a/resources/public/css/yyy-static.css b/resources/public/css/yyy-common.css similarity index 73% rename from resources/public/css/yyy-static.css rename to resources/public/css/yyy-common.css index 515088f..383b77e 100644 --- a/resources/public/css/yyy-static.css +++ b/resources/public/css/yyy-common.css @@ -201,11 +201,13 @@ th { } -/* left bar for all pages in the Wiki - editable, provided by users. Within main-container */ -#side-bar { - width: 17%; - height: 100%; - float: left; +#big-links { + width: 100%; + min-height: 3.5em; +} + +#content { + clear: both; } /* cookies information box, fixed, in right margin, just above footer */ @@ -337,62 +339,11 @@ th { /* desktops and laptops, primarily. Adapted to mouse; targets may be small */ @media all and (min-device-width: 1025px) { - /* content of the current page in the Wiki - editable, provided by users. Within main-container */ #content { - border: thin solid silver; width: 80%; float: right; padding-bottom: 5em; } - - #phone-side-bar, #phone-credits { - display: none; - } - - /* top-of-page navigation, not editable, provided by Smeagol */ - #nav{ - margin: 0; - padding: 0; - top: 0; - width: 100%; - _position: absolute; - _top: expression(document.documentElement.scrollTop); - z-index: 149; - background:rgba(7,27,51,0.8); - } - - /* only needed for fly-out menu effect on tablet and phone stylesheets */ - #nav-icon { - display: none; - } - - #nav-menu { - margin: 0; - padding: 0; - } - - #nav menu li { - padding: 0; - margin: 0; - display: inline; - } - - #nav menu li a { - color: white; - text-decoration: none; - font-weight: bold; - padding: 0.1em 0.75em; - margin: 0; - } - - #nav menu li.active a { background: gray;} - li.nav-item a:hover { background: rgb( 240, 240, 240) } - li.nav-item a:active { background: gray; color: white; } - - #nav menu li#user { - padding: 0 1em; - float: right; - } } /* tablets, primarily. Adapted to touch; targets are larger */ @@ -410,54 +361,6 @@ th { float: right; padding-bottom: 5em; } - - #nav{ - margin: 0; - padding: 0; - position: fixed; - z-index: 149; - color: silver; - background:rgba(40,40,40,0.9); - } - - #nav a { - color: white; - text-decoration: none; - font-weight: bold; - } - - #nav:hover #nav-menu { - display: block; - list-style-type: none; - width: 100%; - } - - #nav-icon { - padding: 0; - } - - #nav-menu, #phone-side-bar { - display: none; - } - - #nav menu li { - padding: 0.5em 2em 0.5em 0.5em; - margin: 0.5 em; - font-size: 150%; - } - - #nav menu li a { - } - - #nav ul li.active a { background: silver;} - li.nav-item a:hover { background: rgb( 240, 240, 240) } - li.nav-item a:active { background: gray; color: white; } - - #nav menu #user { - text-decoration: none; - font-weight: bold; - margin: 0; - } } /* phones, and, indeed, smaller phones. Adapted to touch; display radically @@ -499,50 +402,4 @@ th { #cookies { display: none; } - - #nav{ - margin: 0; - padding: 0; - position: fixed; - z-index: 149; - color: silver; - background:rgba(40,40,40,0.9); - } - - #nav a { - color: white; - text-decoration: none; - font-weight: bold; - } - - #nav-icon { - padding: 0; - } - - #nav-menu { - list-style-type: none; - } - - #nav menu li { - padding: 0.5em 2em 0.5em 0.5em; - margin: 0.5 em; - font-size: 150%; - } - - #nav menu li a { - } - - #nav ul li.active a { background: silver;} - li.nav-item a:hover { background: rgb( 240, 240, 240) } - li.nav-item a:active { background: gray; color: white; } - - #nav menu #user { - text-decoration: none; - font-weight: bold; - margin: 0; - } - - #side-bar { - display: none; - } } diff --git a/resources/public/css/yyy-site.css b/resources/public/css/yyy-site.css new file mode 100644 index 0000000..0f25301 --- /dev/null +++ b/resources/public/css/yyy-site.css @@ -0,0 +1,170 @@ +/** + * Additional CSS for the app. Navigation works differently between + * app and the main site; in the app it's driven by React, while in + * the main site it's CSS. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * # The Stylesheet + * + * ## html elements generally in alphabetic order + */ + + +/* desktops and laptops, primarily. Adapted to mouse; targets may be small */ +@media all and (min-device-width: 1025px) { + /* top-of-page navigation, not editable, provided by Smeagol */ + #nav{ + margin: 0; + padding: 0; + top: 0; + width: 100%; + _position: absolute; + _top: expression(document.documentElement.scrollTop); + z-index: 149; + background:rgba(7,27,51,0.8); + } + + /* only needed for fly-out menu effect on tablet and phone stylesheets */ + #nav-icon { + display: none; + } + + #nav-menu { + margin: 0; + padding: 0; + } + + #nav menu li { + padding: 0; + margin: 0; + display: inline; + } + + #nav menu li a { + color: white; + text-decoration: none; + font-weight: bold; + padding: 0.1em 0.75em; + margin: 0; + } + + #nav menu li.active a { background: gray;} + li.nav-item a:hover { background: rgb( 240, 240, 240) } + li.nav-item a:active { background: gray; color: white; } + + #nav menu li#user { + padding: 0 1em; + float: right; + } +} + +/* tablets, primarily. Adapted to touch; targets are larger */ +@media all and (min-device-width: 769px) and (max-device-width: 1024px) { + #nav{ + margin: 0; + padding: 0; + position: fixed; + z-index: 149; + color: silver; + background:rgba(40,40,40,0.9); + } + + #nav a { + color: white; + text-decoration: none; + font-weight: bold; + } + + #nav:hover #nav-menu { + display: block; + list-style-type: none; + width: 100%; + } + + #nav-icon { + padding: 0; + } + + #nav-menu, #phone-side-bar { + display: none; + } + + #nav menu li { + padding: 0.5em 2em 0.5em 0.5em; + margin: 0.5 em; + font-size: 150%; + } + + #nav menu li a { + } + + #nav ul li.active a { background: silver;} + li.nav-item a:hover { background: rgb( 240, 240, 240) } + li.nav-item a:active { background: gray; color: white; } + + #nav menu #user { + text-decoration: none; + font-weight: bold; + margin: 0; + } +} + +/* phones, and, indeed, smaller phones. Adapted to touch; display radically + * decluttered */ +@media all and (max-device-width: 768px) { + #nav{ + margin: 0; + padding: 0; + position: fixed; + z-index: 149; + color: silver; + background:rgba(40,40,40,0.9); + } + + #nav a { + color: white; + text-decoration: none; + font-weight: bold; + } + + #nav-icon { + padding: 0; + } + + #nav-menu { + list-style-type: none; + } + + #nav menu li { + padding: 0.5em 2em 0.5em 0.5em; + margin: 0.5 em; + font-size: 150%; + } + + #nav menu li a { + } + + #nav ul li.active a { background: silver;} + li.nav-item a:hover { background: rgb( 240, 240, 240) } + li.nav-item a:active { background: gray; color: white; } + + #nav menu #user { + text-decoration: none; + font-weight: bold; + margin: 0; + } +} diff --git a/resources/templates/app.html b/resources/templates/app.html index 5c334b5..f313066 100644 --- a/resources/templates/app.html +++ b/resources/templates/app.html @@ -3,7 +3,8 @@ - + + You Yes Yet? diff --git a/resources/templates/base-unauthenticated.html b/resources/templates/base-unauthenticated.html index d1382fc..c243d01 100644 --- a/resources/templates/base-unauthenticated.html +++ b/resources/templates/base-unauthenticated.html @@ -3,8 +3,8 @@ - - + + {{title}} @@ -36,5 +36,20 @@ {% endblock %}
+