ecrire 0.25.2 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/lib/ecrire/app/assets/javascripts/admin/editor/content.coffee +7 -0
  4. data/lib/ecrire/app/assets/javascripts/admin/editor/ext.coffee +4 -1
  5. data/lib/ecrire/app/assets/javascripts/admin/navigation/save.js.coffee +32 -47
  6. data/lib/ecrire/app/assets/javascripts/admin/posts/filters/filter.js.coffee +21 -0
  7. data/lib/ecrire/app/assets/javascripts/admin/posts/filters/tags.js.coffee +40 -0
  8. data/lib/ecrire/app/assets/javascripts/admin/posts/tag.js.coffee +8 -4
  9. data/lib/ecrire/app/assets/javascripts/admin/posts/title.coffee +1 -1
  10. data/lib/ecrire/app/assets/javascripts/admin/posts/toggle.js.coffee +17 -0
  11. data/lib/ecrire/app/assets/javascripts/admin.js +15 -0
  12. data/lib/ecrire/app/assets/stylesheets/admin/base.css.scss +44 -7
  13. data/lib/ecrire/app/assets/stylesheets/admin/{editor/header.css.scss → header.css.scss} +9 -4
  14. data/lib/ecrire/app/assets/stylesheets/admin/help.css.scss +11 -0
  15. data/lib/ecrire/app/assets/stylesheets/admin/images.css.scss +2 -2
  16. data/lib/ecrire/app/assets/stylesheets/admin/navigation.css.scss +66 -70
  17. data/lib/ecrire/app/assets/stylesheets/admin/posts.css.scss +416 -32
  18. data/lib/ecrire/app/assets/stylesheets/admin/save.css.scss +53 -0
  19. data/lib/ecrire/app/assets/stylesheets/admin/tags.css.scss +248 -50
  20. data/lib/ecrire/app/assets/stylesheets/admin/title.css.scss +118 -37
  21. data/lib/ecrire/app/assets/stylesheets/admin.css.scss +2 -1
  22. data/lib/ecrire/app/assets/stylesheets/application.css.scss +1 -0
  23. data/lib/ecrire/app/assets/stylesheets/editor/code.css.scss +4 -0
  24. data/lib/ecrire/app/assets/stylesheets/editor/content.css.scss +42 -0
  25. data/lib/ecrire/app/assets/stylesheets/editor/figure.css.scss +56 -0
  26. data/lib/ecrire/app/assets/stylesheets/sessions.css.scss +9 -6
  27. data/lib/ecrire/app/assets/stylesheets/shared/popup.css.scss +1 -2
  28. data/lib/ecrire/app/assets/stylesheets/variables.css.scss +16 -0
  29. data/lib/ecrire/app/controllers/admin/posts/tags_controller.rb +4 -15
  30. data/lib/ecrire/app/controllers/admin/posts/titles_controller.rb +40 -0
  31. data/lib/ecrire/app/controllers/admin/posts_controller.rb +32 -31
  32. data/lib/ecrire/app/controllers/admin/tags_controller.rb +43 -0
  33. data/lib/ecrire/app/controllers/application_controller.rb +1 -1
  34. data/lib/ecrire/app/helpers/admin/posts_helper.rb +3 -3
  35. data/lib/ecrire/app/helpers/application_helper.rb +6 -2
  36. data/lib/ecrire/app/models/admin/tag.rb +1 -1
  37. data/lib/ecrire/app/models/tag.rb +29 -0
  38. data/lib/ecrire/app/models/title.rb +7 -0
  39. data/lib/ecrire/app/views/admin/posts/_documentation.html.erb +5 -6
  40. data/lib/ecrire/app/views/admin/posts/_posts.html.erb +17 -0
  41. data/lib/ecrire/app/views/admin/posts/edit.html.erb +31 -64
  42. data/lib/ecrire/app/views/admin/posts/index.html.erb +35 -0
  43. data/lib/ecrire/app/views/admin/posts/index.js.erb +1 -1
  44. data/lib/ecrire/app/views/admin/posts/new.html.erb +1 -1
  45. data/lib/ecrire/app/views/admin/posts/show.html.erb +21 -0
  46. data/lib/ecrire/app/views/admin/posts/tags/_tag.html.erb +3 -9
  47. data/lib/ecrire/app/views/admin/posts/tags/index.html.erb +31 -0
  48. data/lib/ecrire/app/views/admin/posts/tags/toggle.js.erb +1 -0
  49. data/lib/ecrire/app/views/admin/posts/titles/_form.html.erb +29 -0
  50. data/lib/ecrire/app/views/admin/posts/titles/_title.html.erb +5 -0
  51. data/lib/ecrire/app/views/admin/posts/titles/index.html.erb +32 -0
  52. data/lib/ecrire/app/views/admin/posts/toggle.js.erb +1 -0
  53. data/lib/ecrire/app/views/admin/posts/{update/content.js.erb → update.js.erb} +1 -0
  54. data/lib/ecrire/app/views/admin/tags/_form.html.erb +20 -0
  55. data/lib/ecrire/app/views/admin/tags/_tag.html.erb +3 -0
  56. data/lib/ecrire/app/views/admin/tags/_tags.html.erb +10 -0
  57. data/lib/ecrire/app/views/admin/tags/destroy.html.erb +32 -0
  58. data/lib/ecrire/app/views/admin/tags/index.html.erb +17 -0
  59. data/lib/ecrire/app/views/admin/tags/index.js.erb +1 -0
  60. data/lib/ecrire/app/views/layouts/admin/application.html.erb +5 -33
  61. data/lib/ecrire/app/views/sessions/_navigation.html.erb +4 -17
  62. data/lib/ecrire/app/views/sessions/new.html.erb +3 -1
  63. data/lib/ecrire/application.rb +1 -0
  64. data/lib/ecrire/config/environment.rb +4 -0
  65. data/lib/ecrire/onboarding/views/layouts/application.html.erb +5 -5
  66. data/lib/ecrire/routes.rb +12 -4
  67. data/lib/ecrire/theme/template/Gemfile +1 -1
  68. data/lib/ecrire/theme/template/assets/stylesheets/browser/base.css.scss +0 -0
  69. data/lib/ecrire/theme/template/assets/stylesheets/browser.css.scss +4 -0
  70. data/lib/ecrire/theme/template/assets/stylesheets/mobile/base.css.scss +0 -0
  71. data/lib/ecrire/theme/template/assets/stylesheets/mobile.css.scss +4 -0
  72. data/lib/ecrire/theme/template/assets/stylesheets/shared/base.css.scss +143 -0
  73. data/lib/ecrire/theme/template/assets/stylesheets/shared/header.css.scss +42 -0
  74. data/lib/ecrire/theme/template/assets/stylesheets/shared/posts.css.scss +151 -0
  75. data/lib/ecrire/theme/template/assets/stylesheets/shared/tags.css.scss +18 -0
  76. data/lib/ecrire/theme/template/assets/stylesheets/tablet/base.css.scss +0 -0
  77. data/lib/ecrire/theme/template/assets/stylesheets/tablet.css.scss +4 -0
  78. data/lib/ecrire/theme/template/assets/stylesheets/variables.css.scss +4 -0
  79. data/lib/ecrire/theme/template/controllers/posts_controller.rb +6 -0
  80. data/lib/ecrire/theme/template/views/layouts/application.html.erb +25 -14
  81. data/lib/ecrire/theme/template/views/posts/_latest.html.erb +17 -0
  82. data/lib/ecrire/theme/template/views/posts/_post.html.erb +5 -5
  83. data/lib/ecrire/theme/template/views/posts/_suggestions.html.erb +8 -0
  84. data/lib/ecrire/theme/template/views/posts/_tags.html.erb +15 -0
  85. data/lib/ecrire/theme/template/views/posts/index.html.erb +3 -0
  86. data/lib/ecrire/theme/template/views/posts/show.html.erb +26 -4
  87. data/lib/ecrire/theme/template/views/static/customize.html +9 -14
  88. data/lib/ecrire/theme/template/views/tags/_post.html.erb +8 -0
  89. data/lib/ecrire/theme/template/views/tags/show.html.erb +16 -0
  90. data/lib/ecrire/version.rb +1 -1
  91. data/test/editor/controllers/posts_controller_test.rb +14 -4
  92. data/test/editor/controllers/tags_controller_test.rb +3 -4
  93. data/test/theme/helpers/application_helper_test.rb +31 -0
  94. metadata +49 -39
  95. data/lib/ecrire/app/assets/javascripts/admin/navigation/delete.js.coffee +0 -10
  96. data/lib/ecrire/app/assets/javascripts/admin/navigation/draft.js.coffee +0 -40
  97. data/lib/ecrire/app/assets/javascripts/admin/navigation/sticky.js.coffee +0 -10
  98. data/lib/ecrire/app/assets/javascripts/admin/navigation/toggle.js.coffee +0 -9
  99. data/lib/ecrire/app/assets/javascripts/admin/posts/tags.js.coffee +0 -15
  100. data/lib/ecrire/app/assets/javascripts/admin/tags/list.js.coffee +0 -34
  101. data/lib/ecrire/app/assets/stylesheets/admin/editor/base.css.scss +0 -34
  102. data/lib/ecrire/app/assets/stylesheets/admin/editor/content.css.scss +0 -114
  103. data/lib/ecrire/app/assets/stylesheets/admin/editor/publish.css.scss +0 -40
  104. data/lib/ecrire/app/assets/stylesheets/admin/editor/save.css.scss +0 -70
  105. data/lib/ecrire/app/assets/stylesheets/admin/loading.css.scss +0 -48
  106. data/lib/ecrire/app/assets/stylesheets/admin/mixins/animations.css.scss +0 -30
  107. data/lib/ecrire/app/assets/stylesheets/admin/mixins/form.css.scss +0 -22
  108. data/lib/ecrire/app/assets/stylesheets/admin/variables.css.scss +0 -10
  109. data/lib/ecrire/app/assets/stylesheets/shared/main.css.scss +0 -5
  110. data/lib/ecrire/app/views/admin/posts/_list.html.erb +0 -18
  111. data/lib/ecrire/app/views/admin/posts/_post.html.erb +0 -3
  112. data/lib/ecrire/app/views/admin/posts/tags/dialog/_tag.html.erb +0 -3
  113. data/lib/ecrire/app/views/admin/posts/tags/dialog/_tags.html.erb +0 -12
  114. data/lib/ecrire/app/views/admin/posts/tags/index.js.erb +0 -1
  115. data/lib/ecrire/app/views/admin/posts/update/title.js.erb +0 -1
  116. data/lib/ecrire/app/views/admin/properties/image/create.js.erb +0 -14
  117. data/lib/ecrire/app/views/admin/properties/image/destroy.js.erb +0 -6
  118. data/lib/ecrire/app/views/admin/properties/label/create.js.erb +0 -8
  119. data/lib/ecrire/app/views/admin/properties/label/destroy.js.erb +0 -2
  120. data/lib/ecrire/app/views/admin/titles/_title.html.erb +0 -11
  121. data/lib/ecrire/app/views/admin/titles/_titles.html.erb +0 -22
  122. data/lib/ecrire/theme/template/assets/stylesheets/code.css.scss +0 -25
  123. data/lib/ecrire/theme/template/assets/stylesheets/footer.css.scss +0 -5
  124. data/lib/ecrire/theme/template/assets/stylesheets/header.css.scss +0 -18
  125. data/lib/ecrire/theme/template/assets/stylesheets/home.css.scss +0 -35
  126. data/lib/ecrire/theme/template/assets/stylesheets/theme.css.scss +0 -86
  127. /data/lib/ecrire/app/views/admin/{posts/tags → tags}/create.js.erb +0 -0
  128. /data/lib/ecrire/app/views/admin/{posts/tags → tags}/update.js.erb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 019b6b6dac1cff8e3d865f523fefeace2f335da5
4
- data.tar.gz: 078fa1f7faee17ad7594d94c3fc08b05a817ed68
3
+ metadata.gz: adb9f6b14c62670d4d5dc7911d0e81c0c839063f
4
+ data.tar.gz: 39d21c0168805fe0662043277610280565bcadf8
5
5
  SHA512:
6
- metadata.gz: fbdf7787492f759b01a83565ff42ed7d5741c4a6d3abd7a47a802ca5a3ac2e776313d78a4138b01c046a097aeabe48faa055cced2bd625f1f9b379004d3da399
7
- data.tar.gz: 1995ed75afcf08f55c6f29f36b28375719d4178946859811374b4fc5e2c43e7bff7706010e6d5bd1dacd829573c543a731d54487898142b3bd25881ad8c656d4
6
+ metadata.gz: dbe1af93b20ea6a4c9e02e7fa51da7ce7cfc5e8512b0c9f3913dfab78f464ba7908a9af8304ca93cc00ba3887a7f524d668e219f10f3da3799937441743c5cfc
7
+ data.tar.gz: 5bb9f996b868febf70f88b92aac268876bee73edec4c8823747e65b4e86d95415338986feaf3586070afacd747b3c80e3552135b8d679d616dd3a5bb2c62d24b
data/Gemfile CHANGED
@@ -9,6 +9,7 @@ gem 'bcrypt', '~> 3.1'
9
9
  gem 'nokogiri', '~> 1.6'
10
10
  gem 's3', '~> 0.3'
11
11
  gem 'pg', '~> 0.17'
12
+ gem 'pg_search'
12
13
  gem 'kaminari', '~> 0.15'
13
14
 
14
15
  gem 'sprockets-rails', '~> 2.1'
@@ -44,6 +44,13 @@ ObserveJS.bind 'Editor.Content', class @Editor
44
44
  if mutations.target?
45
45
  @updated(mutations)
46
46
 
47
+ if @element().children.length == 0
48
+ line = @lines('')[0]
49
+ @element().appendChild(line)
50
+ cursor = new Editor.Cursor(0)
51
+ cursor.update(@walker(line), 0)
52
+
53
+
47
54
  event = new CustomEvent('Editor:updated', {bubbles: true})
48
55
  @element().dispatchEvent(event)
49
56
 
@@ -24,7 +24,10 @@ HTMLPreElement::toString = ->
24
24
  @textContent
25
25
 
26
26
  HTMLElement::toString = ->
27
- @textContent
27
+ if @nodeName == 'FIGURE'
28
+ @querySelector('figcaption').textContent
29
+ else
30
+ @textContent
28
31
 
29
32
  HTMLHeadingElement::toString = HTMLParagraphElement::toString = ->
30
33
  @textContent
@@ -1,23 +1,11 @@
1
1
  ObserveJS.bind 'Editor.Save', class
2
2
  loaded: =>
3
- @button = @element().querySelector('button')
4
- @time = @element().querySelector('div.update > p')
5
-
6
- @on 'keydown', document, @shouldSave
3
+ @on 'keydown', window, @save
7
4
  @on 'Editor:loaded', document, @cache
8
5
  @on 'Editor:updated', document, @update
9
6
  @on 'posts:update', document, @saved
10
- @on 'click', @button, @save
11
7
  @on 'beforeunload', window, @confirm
12
8
 
13
- @button.textContent = @button.getAttribute('persisted')
14
- @refresh()
15
- @cache()
16
- @interval = setInterval(@refresh, 1000)
17
-
18
- refresh: () =>
19
- @time.textContent = moment(@time.getAttribute('time')).fromNow()
20
-
21
9
  confirm: (e) =>
22
10
  if @cache() != PostBody.instance.toString()
23
11
  e.returnValue = "You have unsaved changed."
@@ -28,55 +16,52 @@ ObserveJS.bind 'Editor.Save', class
28
16
  @cache = (refresh) ->
29
17
  if refresh
30
18
  cache = PostBody.instance.toString()
31
- @button.setAttribute('disabled', 'disabled')
32
- @button.textContent = @button.getAttribute('persisted')
33
19
  cache
34
20
  @cache()
35
21
 
36
- dirty: =>
37
- @cache()? && @cache() != PostBody.instance.toString()
38
-
39
- shouldSave: (e) =>
22
+ save: (e) =>
23
+ @cache()
40
24
  if e.metaKey isnt true || e.which isnt 83
41
25
  return
42
26
 
43
27
  e.preventDefault()
44
28
  e.stopPropagation()
45
29
 
46
- if @dirty()
47
- @save(e)
48
- else
49
- @nudge()
50
-
51
- nudge: =>
52
- button = document.querySelector("[as='Editor.Save'] button")
53
- clean = ->
54
- button.classList.remove('nudge')
55
-
56
- button.addEventListener 'animationend', clean
57
- button.addEventListener 'webkitAnimationEnd', clean
58
- button.classList.add('nudge')
30
+ dialog = @element().content.querySelector('#SavePost').cloneNode(true)
31
+ document.body.appendChild(dialog)
59
32
 
60
- save: (e) =>
61
- e.preventDefault()
62
- e.stopPropagation()
33
+ saved: (e) =>
34
+ @cache(true)
63
35
 
64
- form = document.querySelector("[as='Editor.Save']")
65
- xhr = new ObserveJS.XHR(form)
36
+ ObserveJS.bind 'Editor.Save.Dialog', class
37
+ loaded: =>
38
+ @on 'posts:update', document, @saved
39
+ xhr = new ObserveJS.XHR(@element())
66
40
  xhr.data.set('post[content]', PostBody.instance.toString())
67
41
  xhr.data.set('context', 'content')
42
+ xhr.request.upload.addEventListener 'progress', @upload
43
+ xhr.request.addEventListener 'progress', @download
68
44
  xhr.send()
69
45
 
46
+ remove: =>
47
+ if @element().classList.contains 'fade'
48
+ @element().remove()
49
+ return
50
+
51
+ @element().classList.add 'fade'
52
+ @on 'webkitTransitionEnd', @remove
53
+ @on 'transitionEnd', @remove
54
+
70
55
  saved: (e) =>
71
- if e.UpdatedAtTime
72
- @time.setAttribute('time', e.UpdatedAtTime)
73
- @refresh()
74
- @cache(true)
56
+ msg = @element().querySelector('.message')
57
+ msg.innerHTML = e.MessageHTML
58
+ window.setTimeout @remove, 400
75
59
 
76
- update: (e) =>
77
- if @dirty()
78
- @button.removeAttribute('disabled')
79
- @button.textContent = @button.getAttribute('dirty')
60
+ download: (e) =>
61
+ if e.lengthComputable
62
+ @element().querySelector('.progress').style.width = "#{50 + e.total / e.loaded * 50}%"
80
63
  else
81
- @button.setAttribute('disabled', 'disabled')
82
- @button.textContent = @button.getAttribute('persisted')
64
+ @element().querySelector('.progress').style.width = "100%"
65
+
66
+ upload: (e) =>
67
+ @element().querySelector('.progress').style.width = "#{e.total / e.loaded * 50}%"
@@ -0,0 +1,21 @@
1
+ ObserveJS.bind 'Posts.Filter', class
2
+ loaded: =>
3
+ @on 'input', @search
4
+ @on 'posts:index', @update
5
+
6
+ @element().querySelector('input.search').focus()
7
+
8
+ search: =>
9
+ xhr = new ObserveJS.XHR(@element())
10
+ xhr.data.set 'q', @element().querySelector('input').value
11
+ tags = @element().querySelector("[as='Posts.Filter.Tags']")
12
+ if tags.hasAttribute('tid')
13
+ xhr.data.set 'tid', tags.getAttribute('tid')
14
+
15
+ xhr.send()
16
+
17
+ update: (e) =>
18
+ for list in e.HTML
19
+ el = @element().parentElement.querySelector(".#{Array.prototype.join.call(list.classList, '.')}")
20
+ if el?
21
+ el.parentElement.replaceChild(list.cloneNode(true), el)
@@ -0,0 +1,40 @@
1
+ ObserveJS.bind 'Posts.Filter.Tags', class
2
+ loaded: =>
3
+ @on 'tags:index', @show
4
+ @on 'click', @action
5
+ @element().appendChild(@retrieve('svg.placeholder'))
6
+
7
+ show: (e) =>
8
+ document.body.appendChild(e.HTML)
9
+ @on 'click', e.HTML, @select
10
+
11
+ select: (e) =>
12
+ el = e.target
13
+ while el && !(el instanceof HTMLLIElement)
14
+ el = el.parentElement
15
+
16
+ return unless el?
17
+
18
+ span = @retrieve('span.tag')
19
+ span.textContent = el.textContent
20
+ @retrieve('svg.placeholder').remove()
21
+ @element().appendChild(span)
22
+ @element().appendChild(@retrieve('svg.clear'))
23
+ @element().setAttribute('tid', el.getAttribute('oid'))
24
+ @element().classList.add 'tagged'
25
+ document.querySelector("[as='Overlay']").instance.remove()
26
+ document.querySelector("[as='Posts.Filter']").instance.search()
27
+ document.querySelector("[as='Posts.Filter'] input.search").focus()
28
+
29
+ action: =>
30
+ if @element().classList.contains('tagged')
31
+ @retrieve('svg.clear').remove()
32
+ @retrieve('span.tag').remove()
33
+ @element().appendChild(@retrieve('svg.placeholder'))
34
+ @element().classList.remove('tagged')
35
+ @element().removeAttribute('tid')
36
+ else
37
+ xhr = new ObserveJS.XHR(@element())
38
+ xhr.send()
39
+ document.querySelector("[as='Posts.Filter']").instance.search()
40
+ document.querySelector("[as='Posts.Filter'] input.search").focus()
@@ -1,7 +1,11 @@
1
1
  ObserveJS.bind 'Post.Tag', class
2
2
  loaded: =>
3
- @on 'click', @submit
3
+ @on 'change', @update
4
+ @on 'tags:toggle', @refresh
4
5
 
5
- submit: (e) =>
6
- @on 'tags:update', @remove
7
- ObserveJS.XHR.send(@element())
6
+ update: (e) =>
7
+ xhr = new ObserveJS.XHR(@element())
8
+ xhr.send()
9
+
10
+ refresh: (e) =>
11
+ @element().querySelector('input').checked = e.TagIncluded
@@ -14,7 +14,7 @@ ObserveJS.bind 'Post.Title', class
14
14
  @input.focus()
15
15
 
16
16
  dismiss: =>
17
- @element().parentElement.remove()
17
+ @element().parentElement.instance.remove()
18
18
 
19
19
  update: (e) =>
20
20
  if e.Errors
@@ -0,0 +1,17 @@
1
+ ObserveJS.bind 'Post.Publish', class
2
+ loaded: =>
3
+ @on 'click', @toggle
4
+ @on 'posts:toggle', @refresh
5
+
6
+ toggle: (e) =>
7
+ @element().setAttribute('published', !@isPublished())
8
+ ObserveJS.XHR.send(@element())
9
+
10
+ isPublished: =>
11
+ @element().getAttribute('published') == 'true'
12
+
13
+ refresh: (e) =>
14
+ @element().setAttribute('published', e.State)
15
+
16
+ if document.body.querySelector('main').classList.contains('titles')
17
+ window.location.reload()
@@ -3,3 +3,18 @@
3
3
  //= require_tree ./admin
4
4
  //= require_tree ./vendor
5
5
  //= require_tree ./shared
6
+
7
+ // Not loading this with ObserveJS cuz the layout
8
+ // would require to declare a class for it to load.
9
+ var script = document.getElementsByTagName('script');
10
+
11
+ script = script[script.length - 1];
12
+
13
+ if (script) {
14
+ Prism.filename = script.src;
15
+
16
+ if (document.addEventListener && !script.hasAttribute('data-manual')) {
17
+ document.addEventListener('DOMContentLoaded', Prism.highlightAll);
18
+ document.addEventListener('page:load', Prism.highlightAll);
19
+ }
20
+ }
@@ -1,5 +1,3 @@
1
- @import 'variables';
2
-
3
1
  * {
4
2
  box-sizing: border-box;
5
3
  -moz-box-sizing: border-box;
@@ -8,6 +6,7 @@
8
6
  html, body {
9
7
  @include display(flex);
10
8
  @include flex(1);
9
+ -webkit-font-smoothing: antialiased;
11
10
  }
12
11
 
13
12
  html {
@@ -45,6 +44,10 @@ ul, ol {
45
44
  }
46
45
  }
47
46
 
47
+ input {
48
+ border: none;
49
+ }
50
+
48
51
  fieldset {
49
52
  border: none;
50
53
  padding: 0;
@@ -53,15 +56,10 @@ fieldset {
53
56
 
54
57
  input {
55
58
  padding: 4px 8px;
56
- font-family: Helvetica;
57
59
  font-weight: lighter;
58
60
  outline: none;
59
61
  }
60
62
 
61
- textarea {
62
- font-family: Helvetica;
63
- }
64
-
65
63
  button, input[type=submit] {
66
64
  border: 1px solid transparent;
67
65
  background: none;
@@ -73,10 +71,16 @@ button, input[type=submit] {
73
71
  outline: none;
74
72
  }
75
73
 
74
+ button, input {
75
+ border-radius: 2px;
76
+ }
77
+
76
78
  main {
77
79
  @include flex(1 100%);
78
80
  @include display(flex);
81
+ @include flex-direction(column);
79
82
  position: relative;
83
+ width: 100%;
80
84
  z-index: 1;
81
85
  }
82
86
 
@@ -95,3 +99,36 @@ main {
95
99
  box-shadow: inset 0px 0px 3px 1px rgba(76, 120, 155, 1);
96
100
  color: #FEFEFE;
97
101
  }
102
+
103
+ .button {
104
+ @include transition(text-shadow 0.3s ease-in, border-color 0.3s, background-color 0.3s, box-shadow 0.3s, color 0.3s);
105
+ border: 1px solid lighten($navy-blue, 5%);
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: bolder;
113
+ box-shadow: inset 0 1px 0 transparent;
114
+ text-shadow: 0 1px 0 transparent;
115
+
116
+ &.selected {
117
+ background-color: lighten($navy-blue, 25%);
118
+ border-color: lighten($navy-blue, 25%);
119
+ color: lighten($navy-blue, 100%);
120
+ }
121
+
122
+ &:hover:not(.selected) {
123
+ background-color: lighten($navy-blue, 25%);
124
+ box-shadow: inset 0 1px 0 lighten($navy-blue, 30%), 0 1px 1px lighten($navy-blue, 15%);
125
+ color: lighten($navy-blue, 60%);
126
+ text-shadow: 0 1px lighten($navy-blue, 25%);
127
+ }
128
+
129
+ &:active:not(.selected) {
130
+ box-shadow: none;
131
+ color: lighten($navy-blue, 100%);
132
+ text-shadow: 0 1px lighten($navy-blue, 25%);
133
+ }
134
+ }
@@ -1,9 +1,14 @@
1
- body.edit.posts > main > header {
1
+ main.edit.posts > header {
2
2
  @include display(flex);
3
3
  @include flex(0 auto);
4
+ @include align-items(center);
5
+ @include justify-content(center);
6
+ background-color: $bright-blue;
7
+ color: lighten($bright-blue, 50%);
8
+ min-height: 200px;
4
9
  }
5
10
 
6
- body.edit.posts > main > header > div.title {
11
+ main.edit.posts > header > div.title {
7
12
  @include display(flex);
8
13
  @include flex-direction(column);
9
14
  @include transition(opacity 0.2s linear);
@@ -132,7 +137,7 @@ body.edit.posts > main > header > div.title {
132
137
  width: 100%;
133
138
  height: 100%;
134
139
 
135
- background: $red-color;
140
+ background: $red;
136
141
  color: $dark-red-color;
137
142
 
138
143
  &:not(.hidden) {
@@ -166,7 +171,7 @@ body.edit.posts > main > header > div.title {
166
171
  }
167
172
  }
168
173
 
169
- body.posts > main [as='Navigation.Toggle'] {
174
+ main.posts [as='Navigation.Toggle'] {
170
175
  @include flex(0 auto);
171
176
  @include transition(transform 0.2s, color 0.2s);
172
177
  width: 2em;
@@ -0,0 +1,11 @@
1
+ #Help {
2
+ @include transition(fill 0.3s);
3
+ position: fixed;
4
+ bottom: 2em;
5
+ right: 2em;
6
+ width: 32px;
7
+ fill: $light-blue;
8
+ &:hover {
9
+ fill: darken($light-blue, 50%);
10
+ }
11
+ }
@@ -1,4 +1,4 @@
1
- body.images > main {
1
+ main.images {
2
2
  @include flex-direction(column);
3
3
 
4
4
  section.configure, section.complete {
@@ -53,7 +53,7 @@ body.images > main {
53
53
  }
54
54
  }
55
55
 
56
- body.images > main {
56
+ main.images {
57
57
  section.complete {
58
58
  @include flex-direction(column);
59
59
 
@@ -6,91 +6,87 @@ nav#Menu.admin {
6
6
  @include flex-wrap(wrap);
7
7
 
8
8
  height: 4em;
9
- z-index: 50;
10
- font-size: 14px;
11
- font-family: Helvetica, sans-serif;
12
- font-weight: lighter;
9
+ font-family: $fonts;
10
+ font-size: 16px;
11
+ font-weight: bold;
12
+ padding: 0 0.5em;
13
13
 
14
- background-color: rgba(212, 228, 237, 1);
15
- color: #1A5371;
16
- border-bottom: 1px solid rgb(168, 178, 190);
17
- box-shadow: 0 2px 3px 0 rgba(43, 69, 82, 0.25);
14
+ background-color: darken($gray-blue, 25%);
15
+ color: lighten($gray-blue, 15%);
16
+ border-bottom: 1px solid darken($gray-blue, 75%);
17
+ box-shadow: inset 0 -1px 0 0 darken($gray-blue, 15%);
18
+ text-shadow: 0 -1px darken($light-blue, 75%);
18
19
 
19
- & > section {
20
- @include display(flex);
21
- height: 100%;
22
- }
23
-
24
- & > section > div {
25
- @include display(flex);
26
- @include flex(0 auto);
27
- @include align-items(center);
28
- height: 100%;
29
- padding: 0 1em;
30
- border-right: 1px solid rgba(43, 82, 71, 0.4);
31
- }
32
-
33
- a {
34
- color: inherit;
20
+ .button {
21
+ @include transition(text-shadow 0.3s ease-in, border-color 0.3s, background-color 0.3s, box-shadow 0.3s, color 0.3s);
22
+ border: 1px solid lighten($gray-blue, 15%);
23
+ border-radius: 2px;
35
24
  text-decoration: none;
36
- font-size: inherit;
37
- font-weight: inherit;
38
- font-family: inherit;
39
- }
25
+ padding: 4px 8px;
26
+ margin: 0 0.5em;
27
+ font-size: 0.8em;
28
+ text-transform: uppercase;
29
+ font-weight: bolder;
30
+ box-shadow: inset 0 1px 0 transparent;
31
+ text-shadow: 0 1px 0 transparent;
32
+ color: inherit;
40
33
 
41
- div.posts {
42
- h4 {
43
- margin: 0 1em;
44
- a:hover {
45
- text-decoration: underline;
46
- }
34
+ &.selected {
35
+ background-color: lighten($navy-blue, 25%);
36
+ border-color: lighten($navy-blue, 25%);
37
+ color: lighten($navy-blue, 100%);
47
38
  }
48
39
 
49
- a {
50
- @include display(flex);
51
- @include flex-wrap(flex);
52
- @include flex-direction(column);
53
- @include align-items(center);
54
- padding: 8px;
55
-
56
- &:hover span.count {
57
- text-decoration: underline;
58
- }
59
-
60
- &.new.button {
61
- margin: 0 1em;
62
- &:hover {
63
- text-decoration: underline;
64
- }
65
- }
66
-
67
- span {
68
- @include flex(1);
69
- margin: 4px 0;
40
+ &:hover:not(.selected) {
41
+ background-color: lighten($navy-blue, 25%);
42
+ box-shadow: inset 0 1px 0 lighten($navy-blue, 25%), 0 1px 1px darken($navy-blue, 15%);
43
+ color: lighten($navy-blue, 60%);
44
+ text-shadow: 0 1px lighten($navy-blue, 25%);
45
+ border-color: lighten($navy-blue, 25%);
46
+ }
70
47
 
71
- &.type {
72
- text-transform: uppercase;
73
- font-weight: bold;
74
- font-size: 0.7em;
75
- }
48
+ &:active:not(.selected) {
49
+ box-shadow: none;
50
+ color: lighten($navy-blue, 100%);
51
+ text-shadow: 0 1px lighten($navy-blue, 25%);
52
+ }
76
53
 
77
- }
54
+ &.home {
55
+ margin: 0 2em;
78
56
  }
79
57
  }
80
58
  }
81
59
 
82
- nav#Menu.admin .logout {
83
- border: none;
84
- background: none;
85
- margin: 0 8px;
86
- padding: 0;
60
+ nav#Menu.admin form.logout {
61
+ @include transition(color 0.3s,background-color 0.3s, border 0.3s, box-shadow 0.3s);
62
+ border: 1px solid lighten($red, 5%);
63
+ border-radius: 2px;
64
+ color: lighten($red, 5%);
65
+ margin: 0;
66
+ padding: 4px 8px;
87
67
  cursor: pointer;
88
68
  outline: none;
89
69
 
90
- svg.logout {
70
+ &:hover {
71
+ background-color: lighten($red, 5%);
72
+ color: lighten($red, 30%);
73
+ box-shadow: inset 0 1px 0 0 lighten($red, 10%), 0 1px 1px darken($red, 20%);
74
+ }
75
+
76
+ &:active {
77
+ box-shadow: none;
78
+ }
79
+
80
+ input {
81
+ padding: 0;
91
82
  margin: 0;
92
- width: 1em;
93
- height: 1em;
94
- fill: rgb(128, 41, 41);
83
+ background: none;
84
+ border: none;
85
+ font-size:inherit;
86
+ color: inherit;
87
+ font-weight: 800;
88
+ font-family: inherit;
89
+ outline: none;
95
90
  }
91
+
96
92
  }