ecrire 0.29.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +9 -0
  3. data/lib/ecrire/app/assets/javascripts/admin/navigation/{help.js.coffee → help.coffee} +0 -0
  4. data/lib/ecrire/app/assets/javascripts/admin/navigation/{save.js.coffee → save.coffee} +0 -0
  5. data/lib/ecrire/app/assets/javascripts/admin/posts/{filter.js.coffee → filter.coffee} +0 -2
  6. data/lib/ecrire/app/assets/javascripts/admin/posts/filters/{tags.js.coffee → tags.coffee} +7 -7
  7. data/lib/ecrire/app/assets/javascripts/admin/posts/header.coffee +4 -1
  8. data/lib/ecrire/app/assets/javascripts/admin/posts/list.coffee +2 -0
  9. data/lib/ecrire/app/assets/javascripts/admin/posts/title.coffee +5 -1
  10. data/lib/ecrire/app/assets/javascripts/admin/posts/titles.coffee +10 -2
  11. data/lib/ecrire/app/assets/javascripts/admin/profiles/menu.coffee +6 -0
  12. data/lib/ecrire/app/assets/javascripts/shared/{overlay.js.coffee → overlay.coffee} +2 -1
  13. data/lib/ecrire/app/assets/javascripts/shared/{popup.js.coffee → popup.coffee} +3 -0
  14. data/lib/ecrire/app/assets/stylesheets/admin/base.scss +62 -43
  15. data/lib/ecrire/app/assets/stylesheets/admin/navigation.scss +159 -80
  16. data/lib/ecrire/app/assets/stylesheets/admin/{header.scss → posts/header.scss} +56 -87
  17. data/lib/ecrire/app/assets/stylesheets/admin/posts/search.scss +70 -0
  18. data/lib/ecrire/app/assets/stylesheets/admin/posts.scss +42 -183
  19. data/lib/ecrire/app/assets/stylesheets/admin/tags.scss +101 -131
  20. data/lib/ecrire/app/assets/stylesheets/admin/title.scss +71 -104
  21. data/lib/ecrire/app/assets/stylesheets/ecrire.scss +0 -1
  22. data/lib/ecrire/app/assets/stylesheets/shared/popup.scss +7 -8
  23. data/lib/ecrire/app/controllers/admin/posts/titles_controller.rb +2 -5
  24. data/lib/ecrire/app/controllers/admin/posts_controller.rb +18 -1
  25. data/lib/ecrire/app/controllers/admin/profiles_controller.rb +6 -0
  26. data/lib/ecrire/app/controllers/admin/tags_controller.rb +7 -0
  27. data/lib/ecrire/app/helpers/admin/tags_helper.rb +13 -0
  28. data/lib/ecrire/app/helpers/application_helper.rb +1 -13
  29. data/lib/ecrire/app/models/post.rb +1 -1
  30. data/lib/ecrire/app/models/tag.rb +1 -1
  31. data/lib/ecrire/app/models/title.rb +2 -2
  32. data/lib/ecrire/app/views/admin/_navigation.html.erb +39 -0
  33. data/lib/ecrire/app/views/admin/posts/_post.html.erb +15 -6
  34. data/lib/ecrire/app/views/admin/posts/_search.html.erb +33 -0
  35. data/lib/ecrire/app/views/admin/posts/edit.html.erb +23 -24
  36. data/lib/ecrire/app/views/admin/posts/header/_base.html.erb +43 -47
  37. data/lib/ecrire/app/views/admin/posts/index.html.erb +31 -53
  38. data/lib/ecrire/app/views/admin/posts/new.html.erb +27 -17
  39. data/lib/ecrire/app/views/admin/posts/show.html.erb +8 -4
  40. data/lib/ecrire/app/views/admin/posts/tags/_tags.html.erb +3 -0
  41. data/lib/ecrire/app/views/admin/posts/titles/_form.html.erb +25 -20
  42. data/lib/ecrire/app/views/admin/posts/titles/_title.html.erb +6 -5
  43. data/lib/ecrire/app/views/admin/posts/titles/create.js.erb +6 -0
  44. data/lib/ecrire/app/views/admin/posts/titles/index.js.erb +1 -1
  45. data/lib/ecrire/app/views/admin/posts/titles/update.js.erb +1 -1
  46. data/lib/ecrire/app/views/admin/profiles/_menu.html.erb +18 -0
  47. data/lib/ecrire/app/views/admin/profiles/show.html.erb +0 -0
  48. data/lib/ecrire/app/views/admin/profiles/show.js.erb +1 -0
  49. data/lib/ecrire/app/views/admin/tags/_tag.html.erb +6 -2
  50. data/lib/ecrire/app/views/admin/tags/index.html.erb +28 -14
  51. data/lib/ecrire/app/views/admin/tags/index.js.erb +1 -1
  52. data/lib/ecrire/app/views/layouts/admin/application.html.erb +3 -7
  53. data/lib/ecrire/routes.rb +10 -2
  54. data/lib/ecrire/theme/template/assets/stylesheets/shared/base.scss +4 -1
  55. data/lib/ecrire/theme/template/assets/stylesheets/shared/posts.scss +1 -1
  56. data/lib/ecrire/theme/template/views/layouts/application.html.erb +3 -3
  57. data/lib/ecrire/theme/template/views/posts/_post.html.erb +1 -1
  58. data/lib/ecrire/version.rb +1 -1
  59. data/test/editor/controllers/posts_controller_test.rb +1 -1
  60. data/test/editor/models/tag_test.rb +17 -0
  61. data/test/editor/models/title_test.rb +1 -1
  62. data/test/fixtures/posts.yml +4 -0
  63. data/test/fixtures/tags.yml +1 -0
  64. data/test/theme/helpers/application_helper_test.rb +1 -1
  65. metadata +21 -15
  66. data/lib/ecrire/app/views/admin/posts/tags/index.html.erb +0 -37
  67. data/lib/ecrire/app/views/admin/posts/titles/_index.html.erb +0 -10
  68. data/lib/ecrire/app/views/admin/posts/titles/_titles.html.erb +0 -6
  69. data/lib/ecrire/app/views/admin/posts/titles/index.html.erb +0 -3
  70. data/lib/ecrire/app/views/sessions/_navigation.html.erb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 972644840a974c24fcf476528edce7ffff3360a5
4
- data.tar.gz: 50ab53263e7654829b081cc356a13dde20afcf24
3
+ metadata.gz: 23d8ccb53d87bb00aba6e240fefbd0da621e5954
4
+ data.tar.gz: 35d8d3c29186530fb4e303b410fdced9a0a6fdd9
5
5
  SHA512:
6
- metadata.gz: 342ed664666e9efa6a4787ceb059aee6608b62a0e1ed647d971d0b847db0d98ffced77f9e97915c136cf318eace3e4d3d2841e8b25fb72d29a42ba0def2945aa
7
- data.tar.gz: 7954cd679f01d36420e87b1bd2dc8ae18e0f3fa9cc9e8d480be1f77cb88d1952a277f735eb7eda400c8b0360f30642efaa2a8b0e2dd2891095829d65f51f4189
6
+ metadata.gz: de6a9644b8a2ec963f10a3161cd553f0180e8e53e7b7f69fc3f9c87e75b1e4337b4cbaf88b78510565a6c97e01d48ca3a38b39cfd69f01dc9733e173d7c59a60
7
+ data.tar.gz: ae21a45067f498ff5376bfb365606687b17669eff3efe1d38c030f365443ae01ae6c08c575eeb7871fcd039a7abcab61716ea65a9f19c528d5fa4c3106956d60
data/Rakefile CHANGED
@@ -85,6 +85,15 @@ namespace :template do
85
85
  Ecrire::Commands::Server.new(Port: 3000).run!
86
86
  end
87
87
 
88
+ desc 'Run console for template development'
89
+ task :console do
90
+ require 'ecrire/commands/console'
91
+ Dir.chdir 'lib/ecrire/theme/template'
92
+ Rails.env = ENV['RAILS_ENV'] = 'development'
93
+ Ecrire::Commands::Console.new.run!
94
+ end
95
+
96
+ desc 'Routes available in your current template configuration'
88
97
  task :routes do
89
98
  Dir.chdir 'lib/ecrire/theme/template'
90
99
  Rails.env = ENV['RAILS_ENV'] = 'development'
@@ -3,7 +3,6 @@ ObserveJS.bind 'Posts.Filter', class
3
3
  for el in @element().elements
4
4
  switch el.type
5
5
  when 'text', 'hidden' then @on 'input', el, @search
6
- when 'radio' then @on 'change', el, @search
7
6
 
8
7
  document.querySelector('input.search').focus()
9
8
 
@@ -12,7 +11,6 @@ ObserveJS.bind 'Posts.Filter', class
12
11
  for el in @element().elements
13
12
  switch el.type
14
13
  when 'text', 'hidden' then xhr.data.set(el.name, el.value) if el.value.length > 0
15
- when 'radio' then xhr.data.set(el.name, el.value) if el.checked == true && el.value.length > 0
16
14
  xhr.send()
17
15
 
18
16
  document.querySelector('input.search').focus()
@@ -17,25 +17,25 @@ ObserveJS.bind 'Posts.Filter.Tags', class
17
17
 
18
18
  input = @element().querySelector('input[type=hidden]')
19
19
  span = @retrieve('span.tag')
20
- span.textContent = el.textContent
20
+ span.textContent = el.dataset.name
21
21
  input.value = el.getAttribute('oid')
22
22
 
23
23
  @retrieve('svg.placeholder').remove()
24
- @element().appendChild(span)
25
24
  @element().appendChild(@retrieve('svg.clear'))
25
+ @element().appendChild(span)
26
26
  @element().classList.add 'tagged'
27
27
 
28
28
  document.querySelector("[as='Overlay']").instance.remove()
29
29
 
30
30
  @changed(input)
31
31
 
32
- action: =>
33
- input = @element().querySelector('input[type=hidden]')
34
- if @element().classList.contains('tagged')
32
+ action: (e) =>
33
+ if @retrieve('svg.clear').contains(e.target)
35
34
  @retrieve('svg.clear').remove()
36
- @retrieve('span.tag').remove()
35
+ @retrieve('span').remove()
37
36
  @element().appendChild(@retrieve('svg.placeholder'))
38
- @element().classList.remove('tagged')
37
+ @element().classList.remove 'tagged'
38
+ input = @element().querySelector('input[type=hidden]')
39
39
  input.value = null
40
40
  @changed(input)
41
41
  else
@@ -19,7 +19,10 @@ ObserveJS.bind 'Post.Header', class
19
19
  @resize()
20
20
 
21
21
  resize: =>
22
- height = @maxHeight - window.scrollY
22
+ if document.querySelector('main').classList.contains('overlayed')
23
+ return
24
+
25
+ height = @maxHeight - document.body.scrollTop
23
26
  if height < 0
24
27
  height = 0
25
28
 
@@ -1,6 +1,8 @@
1
1
  ObserveJS.bind 'Posts.List', class
2
2
  loaded: =>
3
3
  @on 'posts:index', document, @refresh
4
+ @on 'posts:drafts', document, @refresh
5
+ @on 'posts:published', document, @refresh
4
6
 
5
7
  refresh: (e) =>
6
8
  @element().innerHTML = e.HTML.innerHTML
@@ -2,10 +2,14 @@ ObserveJS.bind 'Post.Title', class
2
2
  loaded: =>
3
3
  @on 'titles:index', @show
4
4
  @on 'titles:update', document, @refresh
5
+ @on 'titles:create', document, @refresh
5
6
 
6
7
  show: (e) =>
8
+ e.HTML.dataset.y = document.body.scrollTop
7
9
  document.body.appendChild(e.HTML)
10
+ e.HTML.querySelector('form input[type=text]').focus()
8
11
 
9
12
  refresh: (e) =>
10
- @element().textContent = e.HTML.children[0].textContent
13
+ if e.HTML?
14
+ @element().textContent = e.HTML.dataset.name
11
15
 
@@ -1,8 +1,16 @@
1
1
  ObserveJS.bind 'Post.Titles', class
2
2
  loaded: =>
3
+ @on 'submit', @clear
3
4
  @on 'titles:update', document, @refresh
4
5
  @on 'titles:create', document, @refresh
5
6
 
6
- refresh: (e) =>
7
- @element().innerHTML = e.HTML.innerHTML
8
7
 
8
+ clear: =>
9
+ @element().querySelector('div.errors')?.remove()
10
+
11
+ refresh: (e) =>
12
+ if e.HTML?
13
+ e = new CustomEvent('dialog:close', {bubbles: true})
14
+ @element().dispatchEvent(e)
15
+ else if e.ErrorHTML?
16
+ @element().insertBefore(e.ErrorHTML, @element().querySelector('h2'))
@@ -0,0 +1,6 @@
1
+ ObserveJS.bind 'Profiles.Menu', class
2
+ loaded: =>
3
+ @on 'profiles:show', @show
4
+
5
+ show: (e) =>
6
+ @element().appendChild(e.HTML)
@@ -2,8 +2,9 @@ ObserveJS.bind 'Overlay', class
2
2
  loaded: =>
3
3
  @on 'click', @clicked
4
4
  @on 'keyup', document, @escaped
5
+ @on 'dialog:close', @remove
5
6
 
6
- @y = window.scrollY
7
+ @y = @element().dataset.y || document.body.scrollTop
7
8
  main = document.body.querySelector('main')
8
9
  main.classList.add('overlayed')
9
10
  main.style.top = "-#{@y}px"
@@ -1,7 +1,10 @@
1
1
  ObserveJS.bind 'Popup', class
2
2
  loaded: =>
3
+ if btn = @element().querySelector('.close')
4
+ @on 'click', btn, @remove
3
5
  @on 'click', document, @clicked
4
6
  @on 'keyup', document, @escaped
7
+ @on 'dialog:close', @remove
5
8
 
6
9
  clicked: (e) =>
7
10
  el = e.target
@@ -14,6 +14,8 @@ html {
14
14
  }
15
15
 
16
16
  body {
17
+ @include background(linear-gradient(darken($bright-blue, 5%), $bright-blue));
18
+
17
19
  margin: 0;
18
20
  padding: 0;
19
21
  font-family: $fonts;
@@ -23,7 +25,16 @@ body {
23
25
  }
24
26
 
25
27
  a {
28
+
29
+ @include transition(color 0.2s ease-in);
30
+
26
31
  color: $link-color;
32
+ text-decoration: none;
33
+
34
+ &:hover {
35
+ color: darken($link-color, 25%);
36
+ }
37
+
27
38
  }
28
39
 
29
40
  ol.list {
@@ -34,13 +45,17 @@ h1, h2, h3, h4, h5 {
34
45
  font-weight: 100;
35
46
  }
36
47
 
48
+ h1 {
49
+ font-size: 2.5em;
50
+ }
51
+
37
52
  ul, ol {
38
53
  margin: 0;
39
54
  padding: 0;
40
55
  list-style-type: none;
41
56
 
42
57
  li {
43
- margin: 1em 0;
58
+ padding: 1em 0;
44
59
  }
45
60
  }
46
61
 
@@ -60,30 +75,66 @@ input {
60
75
  outline: none;
61
76
  }
62
77
 
63
- button, input[type=submit] {
64
- border: 1px solid transparent;
65
- background: none;
78
+ button, input[type=submit], .button {
79
+ @include transition(border-color 0.2s, background-color 0.2s, box-shadow 0.2s, color 0.2s);
80
+
81
+ padding: 4px 8px;
82
+ margin: 0 0.5em;
83
+
84
+ border: 1px solid rgba(black, 0.25);
85
+ border-radius: 2px;
86
+
87
+ color: lighten($navy-blue, 100%);
88
+ background-color: rgba(white, 0.05);
89
+
66
90
  font-family: inherit;
67
- font-size: inherit;
91
+ font-size: 0.8em;
68
92
  font-weight: inherit;
93
+
94
+ text-decoration: none;
95
+
69
96
  cursor: pointer;
70
- color: inherit;
71
97
  outline: none;
72
- }
73
98
 
74
- button, input {
75
- border-radius: 2px;
99
+ box-shadow: inset 0 1px 0 0 transparent;
100
+
101
+ &.selected {
102
+ background-color: rgba(black, 0.3);
103
+ border-color: rgba(black, 0.3);
104
+ box-shadow: none;
105
+ }
106
+
107
+ &:hover:not(.selected) {
108
+ background-color: rgba(white, 0.05);
109
+ color: white;
110
+ border-color: rgba(black, 0.3);
111
+ box-shadow: inset 0 1px 0 0 rgba(white, 0.35);
112
+ }
113
+
114
+ &:active:not(.selected) {
115
+ box-shadow: inset 0 1px 2px 0 rgba(black, 0.3);
116
+ background-color: rgba(black, 0.3);
117
+ }
76
118
  }
77
119
 
78
120
  main {
79
121
  @include flex(1 100%);
80
122
  @include display(flex);
81
- @include flex-direction(column);
123
+
82
124
  position: relative;
83
- width: 100%;
84
125
  z-index: 1;
126
+
127
+ top: 0;
128
+ left:0;
129
+ right:0;
130
+ bottom:0;
85
131
  }
86
132
 
133
+ main > section {
134
+ @include flex(0 1 60vw);
135
+ background: white;
136
+ margin: 0 auto 0 0;
137
+ }
87
138
 
88
139
  .hidden {
89
140
  display: none;
@@ -100,35 +151,3 @@ main {
100
151
  color: #FEFEFE;
101
152
  }
102
153
 
103
- .button {
104
- @include transition(border-color 0.1s, background-color 0.1s, box-shadow 0.2s, color 0.1s);
105
- border: 1px solid rgba(black, 0.25);
106
- border-radius: 2px;
107
- text-decoration: none;
108
- padding: 4px 8px;
109
- margin: 0 0.5em;
110
- font-size: 0.8em;
111
- text-transform: uppercase;
112
- font-weight: bold;
113
- background-color: rgba(white, 0.05);
114
- color: lighten($navy-blue, 100%);
115
- box-shadow: inset 0 1px 0 0 transparent, 0 0 2px 0 transparent;
116
-
117
- &.selected {
118
- background-color: rgba(black, 0.3);
119
- border-color: rgba(black, 0.3);
120
- box-shadow: none;
121
- }
122
-
123
- &:hover:not(.selected) {
124
- background-color: rgba(white, 0.05);
125
- color: white;
126
- border-color: rgba(black, 0.3);
127
- box-shadow: inset 0 1px 0 0 rgba(white, 0.35), 0 0 2px 0 rgba(black, 0.2);
128
- }
129
-
130
- &:active:not(.selected) {
131
- box-shadow: inset 0 1px 2px 0 rgba(black, 0.3), 0 0 2px 0 transparent;
132
- background-color: rgba(black, 0.3);
133
- }
134
- }
@@ -1,106 +1,185 @@
1
- nav#Menu.admin section {
1
+ #AdminNavigation {
2
2
  @include display(flex);
3
- height: 100%;
3
+ @include flex-direction(column);
4
+ @include flex(1 0 180px);
5
+ max-width: 200px;
6
+ margin-left: auto;
7
+ color: $light-blue;
8
+ border-left: 1px solid rgba(0,0,0,0.1);
4
9
  }
5
10
 
6
- nav#Menu.admin {
11
+ #AdminNavigation > a.home {
7
12
  @include display(flex);
8
- @include align-content(flex-start);
9
13
  @include align-items(center);
10
- @include justify-content(space-between);
11
- @include flex-wrap(wrap);
14
+ @include justify-content(center);
12
15
 
13
- height: 3em;
14
- font-family: $fonts;
15
- font-size: 16px;
16
- font-weight: bold;
17
- padding: 0 2em;
18
- z-index: 1000;
19
- position: fixed;
20
- left: 0;
21
- right: 0;
22
- top: 0;
16
+ padding: 8px 12px;
17
+ margin-top: auto;
18
+
19
+ &:hover > svg {
20
+ fill: lighten($light-blue, 45%);
21
+ }
22
+
23
+ & > svg {
24
+ @include transition(fill 0.2s ease-in);
25
+ width: 14px;
26
+ height: 14px;
27
+ margin-right: 12px;
23
28
 
24
- background-color: lighten($gray-blue, 25%);
25
- color: darken($gray-blue, 30%);
26
- border-bottom: 1px solid darken($gray-blue, 75%);
27
-
28
- .button {
29
- @include display(flex);
30
- @include flex(0 0 auto);
31
- @include align-items(center);
32
- @include justify-content(center);
33
-
34
- border-radius: 0;
35
- border: none;
36
- background: none;
37
-
38
- height: 100%;
39
-
40
- text-decoration: none;
41
- padding: 4px 2em;
42
- margin: 0;
43
- font-size: 0.8em;
44
- text-transform: uppercase;
45
- font-weight: lighter;
46
- color: inherit;
47
- text-shadow: none;
48
-
49
- &.selected {
50
- color: lighten($navy-blue, 100%);
51
- }
52
-
53
- &:hover:not(.selected) {
54
- text-decoration: underline;
55
- box-shadow: none;
56
- }
57
-
58
- &:active:not(.selected) {
59
- color: lighten($navy-blue, 100%);
60
- text-decoration: underline;
61
- box-shadow: none;
62
- }
29
+ fill: $light-blue;
63
30
  }
64
31
  }
65
32
 
66
- nav#Menu.admin form.logout {
33
+ #AdminNavigation > div.current.user {
34
+ position: relative;
35
+ margin-bottom: 1vh;
36
+ }
37
+
38
+ #AdminNavigation > div.current.user > a.home {
39
+ text-align: center;
40
+ display: block;
41
+ font-size: 0.8em;
42
+ }
43
+
44
+ #AdminNavigation > div.current.user > a.profile.menu {
67
45
  @include display(flex);
68
- @include flex(0 0 auto);
69
46
  @include align-items(center);
70
- @include justify-content(center);
47
+ @include align-content(center);
48
+ @include justify-content(space-between);
71
49
 
72
- margin: 0;
73
- height: 100%;
50
+ border-radius: 2px;
51
+ margin: 2vh 5% 0 5%;
52
+ background-color: rgba(darken($bright-blue, 25%), 0.2);
53
+ padding: 4px 8px;
74
54
 
75
- input {
76
- @include transition(box-shadow 0.1s ease, background-color 0.1s ease);
55
+ &:hover svg {
56
+ fill: lighten($bright-blue, 25%);
57
+ }
58
+ }
77
59
 
78
- background-color: lighten($red, 15%);
79
- color: darken($red, 25%);
60
+ #AdminNavigation > div.current.user > a.profile.menu > span {
61
+ text-align: center;
62
+ }
63
+
64
+ #AdminNavigation > div.current.user > a.profile.menu > svg {
65
+ @include transition(fill 0.1s ease-in);
80
66
 
81
- cursor: pointer;
82
- outline: none;
67
+ width: 18px;
68
+ height: 18px;
69
+ fill: rgba(darken($bright-blue, 25%), 0.7);
70
+ }
83
71
 
84
- padding: 6px 10px;
85
- margin: 0;
72
+ #AdminNavigation h2 {
73
+ @include display(flex);
74
+ @include align-items(center);
86
75
 
87
- border: none;
88
- border-radius: 2px;
76
+ font-size: 1.2em;
77
+ padding: 8px;
78
+ margin: 0 1vw;
79
+ font-weight: bold;
80
+ }
89
81
 
90
- font-size: 0.9em;
91
- font-family: inherit;
82
+ #AdminNavigation h2.selected, #AdminNavigation h2 + div > a.selected {
83
+ color: white;
92
84
  font-weight: bold;
85
+ }
93
86
 
94
- box-shadow: 0 1px 1px 0 transparent;
87
+ #AdminNavigation h2 > a {
88
+ @include flex(1);
89
+ color: inherit;
90
+ }
91
+
92
+ #AdminNavigation h2 + div {
93
+ @include display(flex);
94
+ @include flex-direction(column);
95
+
96
+ margin: 0 1vw 1vh 1vw;
97
+ }
95
98
 
96
- &:hover {
97
- box-shadow: 0 0.5px 0.5px 0 darken($red, 15%);
98
- }
99
+ #AdminNavigation h2 + div > a {
100
+ padding: 8px 20px;
101
+ color: $light-blue;
102
+ font-size: 0.8em;
103
+ }
99
104
 
100
- &:active {
101
- box-shadow: 0 1px 1px 0 transparent;
102
- background-color: darken($red, 5%);
103
- }
105
+ #AdminNavigation a {
106
+ color: $light-blue;
107
+ &:hover {
108
+ color: lighten($light-blue, 45%);
104
109
  }
110
+ }
105
111
 
112
+ #AdminNavigation form.logout {
113
+ margin-top: auto;
114
+ border-top: 1px solid $light-blue;
115
+ text-align: center;
106
116
  }
117
+
118
+ #AdminNavigation form.logout input[type=submit] {
119
+ width: 100%;
120
+ }
121
+
122
+ #AdminNavigation [as='Popup'] {
123
+ position: absolute;
124
+ margin: 2vh 5% 0 5%;
125
+ top: 0;
126
+ left: 0;
127
+ right: 0;
128
+ width: auto;
129
+
130
+ background-color: $light-blue;
131
+ }
132
+
133
+ #AdminNavigation [as='Popup'] > div.current.user {
134
+ @include display(flex);
135
+ @include align-items(center);
136
+ @include align-content(center);
137
+ @include justify-content(space-between);
138
+
139
+ padding: 4px 8px;
140
+ }
141
+
142
+ #AdminNavigation [as='Popup'] > div.current.user > a {
143
+ @include display(flex);
144
+ @include flex(0 auto);
145
+ padding: 0;
146
+ cursor: pointer;
147
+ }
148
+
149
+ #AdminNavigation [as='Popup'] > div.current.user > a > svg {
150
+ width: 18px;
151
+ height: 18px;
152
+ margin-top: 2px;
153
+ fill: rgba(darken($bright-blue, 25%), 0.7);
154
+ }
155
+
156
+ #AdminNavigation [as='Popup'] > form.logout {
157
+ @include display(flex);
158
+ margin: 8px 0;
159
+ color: $red;
160
+ }
161
+
162
+ #AdminNavigation [as='Popup'] > form.logout > button {
163
+ @include display(flex);
164
+ @include align-items(center);
165
+ @include align-content(center);
166
+
167
+ width: 100%;
168
+ padding: 4px 8px;
169
+ margin: 8px;
170
+ font-weight: bold;
171
+ background: $red;
172
+ color: darken($red, 25%);
173
+
174
+ &:hover {
175
+ color: lighten($red, 50%);
176
+ }
177
+ }
178
+
179
+ #AdminNavigation [as='Popup'] > form.logout > button > svg {
180
+ width: 12px;
181
+ height: 12px;
182
+ fill: darken($red, 15%);
183
+ margin: 1px 8px 0 0;
184
+ }
185
+