maily 0.7.1 → 0.7.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +3 -1
- data/app/assets/stylesheets/maily/application.scss +2 -1
- data/app/controllers/maily/emails_controller.rb +1 -1
- data/app/views/maily/shared/_sidebar.html.erb +2 -2
- data/lib/generators/maily/install_generator.rb +5 -19
- data/lib/maily.rb +4 -1
- data/lib/maily/email.rb +7 -8
- data/lib/maily/generator.rb +26 -0
- data/lib/maily/mailer.rb +8 -0
- data/lib/maily/version.rb +1 -1
- data/screenshot.png +0 -0
- data/spec/dummy/app/mailers/notifier.rb +8 -0
- data/spec/dummy/app/views/notifier/multipart.html.erb +1 -0
- data/spec/dummy/app/views/notifier/multipart.text.erb +1 -0
- data/spec/dummy/app/views/notifier/with_slim_template.html.slim +1 -0
- data/spec/email_spec.rb +21 -1
- data/spec/generator_spec.rb +14 -0
- data/spec/mailer_spec.rb +19 -2
- data/spec/maily_spec.rb +11 -9
- metadata +11 -3
- data/app/assets/stylesheets/maily/normalize.css +0 -341
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50e254d6048356a08a30e2175e4bc1809c9cccc7
|
4
|
+
data.tar.gz: 799e7de87f596fe17ed4981f8025ee1156639e4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c870ea516edd08cfb71cb46519784009e0945b905ff6e85fdb559468042bffae144bf7c8227e9555cb4415164481f6b3c3d76f22124a7bc61905db3ad91236f
|
7
|
+
data.tar.gz: 17dd9afc7e7b4024bb1789771c07a0946e32d8a70b150560b1ec365c31b4cb46661bcb3a87d11ce10e595bbfd814e9dfd5f4f8de01d12c97d2a34d04bd2d7560
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
+
## [0.7.2]
|
6
|
+
|
7
|
+
- Definitive fix for newer apps using `webpacker` and without `sass-rails` (#22)
|
8
|
+
- Fix regression in generator, from v0.7.0 (#24)
|
9
|
+
- Allow to edit emails with different templates engines: Slim, Haml, ... (#25)
|
10
|
+
|
5
11
|
## [0.7.1]
|
6
12
|
|
7
13
|
- Fix assets pipeline integration for applications using `webpacker` instead of `sprockets` (#22)
|
@@ -79,6 +85,7 @@ All notable changes to this project will be documented in this file.
|
|
79
85
|
|
80
86
|
- First real usable release :tada:
|
81
87
|
|
88
|
+
[0.7.2]: https://github.com/markets/maily/compare/v0.7.1...v0.7.2
|
82
89
|
[0.7.1]: https://github.com/markets/maily/compare/v0.7.0...v0.7.1
|
83
90
|
[0.7.0]: https://github.com/markets/maily/compare/v0.6.3...v0.7.0
|
84
91
|
[0.6.3]: https://github.com/markets/maily/compare/v0.6.2...v0.6.3
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Maily
|
2
2
|
|
3
|
-
[](http://badge.fury.io/rb/maily)
|
3
|
+
[](http://badge.fury.io/rb/maily)
|
4
|
+
[](https://travis-ci.org/markets/maily)
|
5
|
+
[](https://codeclimate.com/github/markets/maily/maintainability)
|
4
6
|
|
5
7
|
Maily is a Rails Engine to manage, test and navigate through all your email templates of your app, being able to preview them directly in your browser.
|
6
8
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
<aside class="sidebar">
|
2
|
-
<% @mailers.
|
2
|
+
<% @mailers.each do |mailer| %>
|
3
3
|
<section class="nav_list">
|
4
4
|
<h3 class="nav_title"><%= "#{mailer.name.humanize} (#{mailer.total_emails})" %></h3>
|
5
5
|
<ul>
|
6
|
-
<% mailer.
|
6
|
+
<% mailer.emails_list.each do |email| %>
|
7
7
|
<li><%= link_to email.name.humanize, maily_email_path(mailer: mailer.name, email: email.name), class: sidebar_class(mailer, email) %></li>
|
8
8
|
<% end %>
|
9
9
|
</ul>
|
@@ -5,9 +5,11 @@ module Maily
|
|
5
5
|
source_root File.expand_path("../../templates", __FILE__)
|
6
6
|
|
7
7
|
def install
|
8
|
+
puts "==> Installing Maily components ..."
|
8
9
|
generate_routing
|
9
|
-
|
10
|
+
copy_initializer
|
10
11
|
build_hooks
|
12
|
+
puts "Ready! You can now access Maily at /maily"
|
11
13
|
end
|
12
14
|
|
13
15
|
private
|
@@ -16,29 +18,13 @@ module Maily
|
|
16
18
|
route "mount Maily::Engine, at: '/maily'"
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
21
|
+
def copy_initializer
|
20
22
|
template 'initializer.rb', 'config/initializers/maily.rb'
|
21
23
|
end
|
22
24
|
|
23
25
|
def build_hooks
|
24
|
-
Maily.init!
|
25
|
-
|
26
|
-
fixtures = []
|
27
|
-
hooks = []
|
28
|
-
|
29
|
-
Maily::Mailer.all.each do |mailer|
|
30
|
-
hooks << "\nMaily.hooks_for('#{mailer.name.classify}') do |mailer|"
|
31
|
-
mailer.emails.each do |email|
|
32
|
-
if email.require_hook?
|
33
|
-
fixtures << email.required_arguments
|
34
|
-
hooks << " mailer.register_hook(:#{email.name}, #{email.required_arguments.join(', ')})"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
hooks << "end"
|
38
|
-
end
|
39
|
-
|
40
26
|
create_file "lib/maily_hooks.rb" do
|
41
|
-
|
27
|
+
Maily::Generator.run
|
42
28
|
end
|
43
29
|
end
|
44
30
|
end
|
data/lib/maily.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
require 'maily/engine'
|
2
1
|
require 'maily/version'
|
2
|
+
require 'maily/engine'
|
3
3
|
require 'maily/mailer'
|
4
4
|
require 'maily/email'
|
5
|
+
require 'maily/generator'
|
5
6
|
|
6
7
|
module Maily
|
7
8
|
class << self
|
@@ -33,6 +34,8 @@ module Maily
|
|
33
34
|
|
34
35
|
def hooks_for(mailer_name)
|
35
36
|
mailer = Maily::Mailer.find(mailer_name.underscore)
|
37
|
+
return unless mailer
|
38
|
+
|
36
39
|
yield(mailer) if block_given?
|
37
40
|
end
|
38
41
|
|
data/lib/maily/email.rb
CHANGED
@@ -76,18 +76,17 @@ module Maily
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def base_path(part)
|
79
|
-
"#{Rails.root}/app/views/#{template_path}/#{template_name}.#{part}.
|
79
|
+
Dir["#{Rails.root}/app/views/#{template_path}/#{template_name}.#{part}.*"].first
|
80
80
|
end
|
81
81
|
|
82
82
|
def path(part = nil)
|
83
|
-
if part
|
84
|
-
|
83
|
+
return base_path(part) if part
|
84
|
+
|
85
|
+
html_part = base_path('html')
|
86
|
+
if html_part && File.exist?(html_part)
|
87
|
+
html_part
|
85
88
|
else
|
86
|
-
|
87
|
-
base_path('html')
|
88
|
-
else
|
89
|
-
base_path('text')
|
90
|
-
end
|
89
|
+
base_path('text')
|
91
90
|
end
|
92
91
|
end
|
93
92
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Maily
|
2
|
+
module Generator
|
3
|
+
def self.run
|
4
|
+
Maily.init!
|
5
|
+
|
6
|
+
fixtures = []
|
7
|
+
hooks = []
|
8
|
+
|
9
|
+
Maily::Mailer.list.each do |mailer|
|
10
|
+
hooks << "\nMaily.hooks_for('#{mailer.name.classify}') do |mailer|"
|
11
|
+
mailer.emails_list.each do |email|
|
12
|
+
if email.require_hook?
|
13
|
+
fixtures << email.required_arguments
|
14
|
+
hooks << " mailer.register_hook(:#{email.name}, #{email.required_arguments.join(', ')})"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
hooks << "end"
|
18
|
+
end
|
19
|
+
|
20
|
+
fixtures = fixtures.flatten.uniq.map { |f| "#{f.to_s} = ''" }.join("\n")
|
21
|
+
hooks = hooks.join("\n")
|
22
|
+
|
23
|
+
fixtures + "\n" + hooks + "\n"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/maily/mailer.rb
CHANGED
@@ -19,6 +19,10 @@ module Maily
|
|
19
19
|
collection
|
20
20
|
end
|
21
21
|
|
22
|
+
def self.list
|
23
|
+
all.values.sort_by(&:name)
|
24
|
+
end
|
25
|
+
|
22
26
|
def self.find(mailer_name)
|
23
27
|
all[mailer_name]
|
24
28
|
end
|
@@ -27,6 +31,10 @@ module Maily
|
|
27
31
|
emails[email_name.to_s]
|
28
32
|
end
|
29
33
|
|
34
|
+
def emails_list
|
35
|
+
emails.values.sort_by(&:name)
|
36
|
+
end
|
37
|
+
|
30
38
|
def total_emails
|
31
39
|
emails.size
|
32
40
|
end
|
data/lib/maily/version.rb
CHANGED
data/screenshot.png
CHANGED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Multipart HTML</h1>
|
@@ -0,0 +1 @@
|
|
1
|
+
Multipart plain text
|
@@ -0,0 +1 @@
|
|
1
|
+
p Hi from a Slim template
|
data/spec/email_spec.rb
CHANGED
@@ -31,6 +31,7 @@ describe Maily::Email do
|
|
31
31
|
|
32
32
|
it 'should handle not lazy arguments successfully' do
|
33
33
|
allow(email).to receive(:email).and_return('foo@foo.com')
|
34
|
+
|
34
35
|
expect(email.arguments).to be_present
|
35
36
|
expect(email.arguments.size).to eq(email.required_arguments.size)
|
36
37
|
end
|
@@ -42,20 +43,23 @@ describe Maily::Email do
|
|
42
43
|
|
43
44
|
it "should handle template_path via hook" do
|
44
45
|
email = mailer.find_email('recommendation')
|
46
|
+
|
45
47
|
expect(email.template_path).to eq('notifications')
|
46
48
|
end
|
47
49
|
|
48
50
|
it "should handle template_name via hook" do
|
49
51
|
email = mailer.find_email('custom_template_name')
|
52
|
+
|
50
53
|
expect(email.template_name).to eq('invitation')
|
51
54
|
end
|
52
55
|
|
53
56
|
it "should handle description via hook" do
|
54
57
|
email = mailer.find_email('recommendation')
|
58
|
+
|
55
59
|
expect(email.description).to eq('description')
|
56
60
|
end
|
57
61
|
|
58
|
-
describe 'validate_arguments' do
|
62
|
+
describe '#validate_arguments' do
|
59
63
|
it 'emails with no arguments required' do
|
60
64
|
email = mailer.find_email('welcome')
|
61
65
|
expect(email.validate_arguments).to eq [true, nil]
|
@@ -72,4 +76,20 @@ describe Maily::Email do
|
|
72
76
|
expect(email.validate_arguments[1]).to eq("recommendation email requires at least 1 arguments, passed 0")
|
73
77
|
end
|
74
78
|
end
|
79
|
+
|
80
|
+
describe '#path' do
|
81
|
+
it 'with a multipart email defaults to html' do
|
82
|
+
email = mailer.find_email('multipart')
|
83
|
+
|
84
|
+
expect(email.path).to include('multipart.html.erb')
|
85
|
+
expect(email.path('text')).to include('multipart.text.erb')
|
86
|
+
expect(email.path('foo')).to eq nil
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'with other template engines (e.g. Slim)' do
|
90
|
+
email = mailer.find_email('with_slim_template')
|
91
|
+
|
92
|
+
expect(email.path).to include('with_slim_template.html.slim')
|
93
|
+
end
|
94
|
+
end
|
75
95
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Maily::Generator do
|
4
|
+
it '.run generates valid fixtures and hooks for current application' do
|
5
|
+
expect(Maily::Generator.run).to eq <<-HOOKS.strip_heredoc
|
6
|
+
email = ''
|
7
|
+
|
8
|
+
Maily.hooks_for('Notifier') do |mailer|
|
9
|
+
mailer.register_hook(:invitation, email)
|
10
|
+
mailer.register_hook(:recommendation, email)
|
11
|
+
end
|
12
|
+
HOOKS
|
13
|
+
end
|
14
|
+
end
|
data/spec/mailer_spec.rb
CHANGED
@@ -2,12 +2,13 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Maily::Mailer do
|
4
4
|
it "should load mailers" do
|
5
|
-
expect(Maily::Mailer.all.
|
5
|
+
expect(Maily::Mailer.all.keys).to eq(['notifier'])
|
6
6
|
end
|
7
7
|
|
8
8
|
it "should build emails" do
|
9
9
|
mailer = Maily::Mailer.find('notifier')
|
10
|
-
|
10
|
+
|
11
|
+
expect(mailer.emails.size).to eq(6)
|
11
12
|
end
|
12
13
|
|
13
14
|
it "should find mailers by name" do
|
@@ -16,11 +17,27 @@ describe Maily::Mailer do
|
|
16
17
|
|
17
18
|
it "should find emails by name" do
|
18
19
|
mailer = Maily::Mailer.find('notifier')
|
20
|
+
|
19
21
|
expect(mailer.find_email('welcome').name).to eq('welcome')
|
20
22
|
end
|
21
23
|
|
22
24
|
it "allows to hide email" do
|
23
25
|
mailer = Maily::Mailer.find('notifier')
|
26
|
+
|
24
27
|
expect(mailer.find_email('hidden')).to be nil
|
25
28
|
end
|
29
|
+
|
30
|
+
it ".list returns an array with all mailers" do
|
31
|
+
list = Maily::Mailer.list
|
32
|
+
|
33
|
+
expect(list).to be_an_instance_of(Array)
|
34
|
+
expect(list.sample).to be_an_instance_of(Maily::Mailer)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "#emails_list returns an array with all emails" do
|
38
|
+
mailer = Maily::Mailer.find('notifier')
|
39
|
+
|
40
|
+
expect(mailer.emails_list).to be_an_instance_of(Array)
|
41
|
+
expect(mailer.emails_list.sample).to be_an_instance_of(Maily::Email)
|
42
|
+
end
|
26
43
|
end
|
data/spec/maily_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Maily do
|
4
|
-
it "should initialize with some defaults if no block is provided" do
|
4
|
+
it "#setup should initialize with some defaults if no block is provided" do
|
5
5
|
Maily.setup
|
6
6
|
|
7
7
|
expect(Maily.enabled).to be true
|
@@ -12,16 +12,18 @@ describe Maily do
|
|
12
12
|
expect(Maily.http_authorization).to be nil
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
describe '#allowed_action?' do
|
16
|
+
it "should not allow edition if edition is disabled" do
|
17
|
+
Maily.allow_edition = false
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
expect(Maily.allowed_action?(:edit)).to be false
|
20
|
+
expect(Maily.allowed_action?(:update)).to be false
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
-
|
23
|
+
it "should not allow delivery if delivery is disabled" do
|
24
|
+
Maily.allow_delivery = false
|
24
25
|
|
25
|
-
|
26
|
+
expect(Maily.allowed_action?(:deliver)).to be false
|
27
|
+
end
|
26
28
|
end
|
27
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maily
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- markets
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -103,7 +103,6 @@ files:
|
|
103
103
|
- app/assets/javascripts/maily/application.js
|
104
104
|
- app/assets/stylesheets/maily/_variables.scss
|
105
105
|
- app/assets/stylesheets/maily/application.scss
|
106
|
-
- app/assets/stylesheets/maily/normalize.css
|
107
106
|
- app/controllers/maily/application_controller.rb
|
108
107
|
- app/controllers/maily/emails_controller.rb
|
109
108
|
- app/helpers/maily/application_helper.rb
|
@@ -126,6 +125,7 @@ files:
|
|
126
125
|
- lib/maily.rb
|
127
126
|
- lib/maily/email.rb
|
128
127
|
- lib/maily/engine.rb
|
128
|
+
- lib/maily/generator.rb
|
129
129
|
- lib/maily/mailer.rb
|
130
130
|
- lib/maily/version.rb
|
131
131
|
- maily.gemspec
|
@@ -145,7 +145,10 @@ files:
|
|
145
145
|
- spec/dummy/app/views/layouts/application.html.erb
|
146
146
|
- spec/dummy/app/views/notifications/recommendation.html.erb
|
147
147
|
- spec/dummy/app/views/notifier/invitation.html.erb
|
148
|
+
- spec/dummy/app/views/notifier/multipart.html.erb
|
149
|
+
- spec/dummy/app/views/notifier/multipart.text.erb
|
148
150
|
- spec/dummy/app/views/notifier/welcome.html.erb
|
151
|
+
- spec/dummy/app/views/notifier/with_slim_template.html.slim
|
149
152
|
- spec/dummy/bin/bundle
|
150
153
|
- spec/dummy/bin/rails
|
151
154
|
- spec/dummy/bin/rake
|
@@ -173,6 +176,7 @@ files:
|
|
173
176
|
- spec/dummy/public/500.html
|
174
177
|
- spec/dummy/public/favicon.ico
|
175
178
|
- spec/email_spec.rb
|
179
|
+
- spec/generator_spec.rb
|
176
180
|
- spec/mailer_spec.rb
|
177
181
|
- spec/maily_spec.rb
|
178
182
|
- spec/spec_helper.rb
|
@@ -216,7 +220,10 @@ test_files:
|
|
216
220
|
- spec/dummy/app/views/layouts/application.html.erb
|
217
221
|
- spec/dummy/app/views/notifications/recommendation.html.erb
|
218
222
|
- spec/dummy/app/views/notifier/invitation.html.erb
|
223
|
+
- spec/dummy/app/views/notifier/multipart.html.erb
|
224
|
+
- spec/dummy/app/views/notifier/multipart.text.erb
|
219
225
|
- spec/dummy/app/views/notifier/welcome.html.erb
|
226
|
+
- spec/dummy/app/views/notifier/with_slim_template.html.slim
|
220
227
|
- spec/dummy/bin/bundle
|
221
228
|
- spec/dummy/bin/rails
|
222
229
|
- spec/dummy/bin/rake
|
@@ -244,6 +251,7 @@ test_files:
|
|
244
251
|
- spec/dummy/public/500.html
|
245
252
|
- spec/dummy/public/favicon.ico
|
246
253
|
- spec/email_spec.rb
|
254
|
+
- spec/generator_spec.rb
|
247
255
|
- spec/mailer_spec.rb
|
248
256
|
- spec/maily_spec.rb
|
249
257
|
- spec/spec_helper.rb
|
@@ -1,341 +0,0 @@
|
|
1
|
-
/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */
|
2
|
-
|
3
|
-
/* Document
|
4
|
-
========================================================================== */
|
5
|
-
|
6
|
-
/**
|
7
|
-
* 1. Correct the line height in all browsers.
|
8
|
-
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
9
|
-
*/
|
10
|
-
|
11
|
-
html {
|
12
|
-
line-height: 1.15; /* 1 */
|
13
|
-
-webkit-text-size-adjust: 100%; /* 2 */
|
14
|
-
}
|
15
|
-
|
16
|
-
/* Sections
|
17
|
-
========================================================================== */
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Remove the margin in all browsers.
|
21
|
-
*/
|
22
|
-
|
23
|
-
body {
|
24
|
-
margin: 0;
|
25
|
-
}
|
26
|
-
|
27
|
-
/**
|
28
|
-
* Correct the font size and margin on `h1` elements within `section` and
|
29
|
-
* `article` contexts in Chrome, Firefox, and Safari.
|
30
|
-
*/
|
31
|
-
|
32
|
-
h1 {
|
33
|
-
font-size: 2em;
|
34
|
-
margin: 0.67em 0;
|
35
|
-
}
|
36
|
-
|
37
|
-
/* Grouping content
|
38
|
-
========================================================================== */
|
39
|
-
|
40
|
-
/**
|
41
|
-
* 1. Add the correct box sizing in Firefox.
|
42
|
-
* 2. Show the overflow in Edge and IE.
|
43
|
-
*/
|
44
|
-
|
45
|
-
hr {
|
46
|
-
box-sizing: content-box; /* 1 */
|
47
|
-
height: 0; /* 1 */
|
48
|
-
overflow: visible; /* 2 */
|
49
|
-
}
|
50
|
-
|
51
|
-
/**
|
52
|
-
* 1. Correct the inheritance and scaling of font size in all browsers.
|
53
|
-
* 2. Correct the odd `em` font sizing in all browsers.
|
54
|
-
*/
|
55
|
-
|
56
|
-
pre {
|
57
|
-
font-family: monospace, monospace; /* 1 */
|
58
|
-
font-size: 1em; /* 2 */
|
59
|
-
}
|
60
|
-
|
61
|
-
/* Text-level semantics
|
62
|
-
========================================================================== */
|
63
|
-
|
64
|
-
/**
|
65
|
-
* Remove the gray background on active links in IE 10.
|
66
|
-
*/
|
67
|
-
|
68
|
-
a {
|
69
|
-
background-color: transparent;
|
70
|
-
}
|
71
|
-
|
72
|
-
/**
|
73
|
-
* 1. Remove the bottom border in Chrome 57-
|
74
|
-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
75
|
-
*/
|
76
|
-
|
77
|
-
abbr[title] {
|
78
|
-
border-bottom: none; /* 1 */
|
79
|
-
text-decoration: underline; /* 2 */
|
80
|
-
text-decoration: underline dotted; /* 2 */
|
81
|
-
}
|
82
|
-
|
83
|
-
/**
|
84
|
-
* Add the correct font weight in Chrome, Edge, and Safari.
|
85
|
-
*/
|
86
|
-
|
87
|
-
b,
|
88
|
-
strong {
|
89
|
-
font-weight: bolder;
|
90
|
-
}
|
91
|
-
|
92
|
-
/**
|
93
|
-
* 1. Correct the inheritance and scaling of font size in all browsers.
|
94
|
-
* 2. Correct the odd `em` font sizing in all browsers.
|
95
|
-
*/
|
96
|
-
|
97
|
-
code,
|
98
|
-
kbd,
|
99
|
-
samp {
|
100
|
-
font-family: monospace, monospace; /* 1 */
|
101
|
-
font-size: 1em; /* 2 */
|
102
|
-
}
|
103
|
-
|
104
|
-
/**
|
105
|
-
* Add the correct font size in all browsers.
|
106
|
-
*/
|
107
|
-
|
108
|
-
small {
|
109
|
-
font-size: 80%;
|
110
|
-
}
|
111
|
-
|
112
|
-
/**
|
113
|
-
* Prevent `sub` and `sup` elements from affecting the line height in
|
114
|
-
* all browsers.
|
115
|
-
*/
|
116
|
-
|
117
|
-
sub,
|
118
|
-
sup {
|
119
|
-
font-size: 75%;
|
120
|
-
line-height: 0;
|
121
|
-
position: relative;
|
122
|
-
vertical-align: baseline;
|
123
|
-
}
|
124
|
-
|
125
|
-
sub {
|
126
|
-
bottom: -0.25em;
|
127
|
-
}
|
128
|
-
|
129
|
-
sup {
|
130
|
-
top: -0.5em;
|
131
|
-
}
|
132
|
-
|
133
|
-
/* Embedded content
|
134
|
-
========================================================================== */
|
135
|
-
|
136
|
-
/**
|
137
|
-
* Remove the border on images inside links in IE 10.
|
138
|
-
*/
|
139
|
-
|
140
|
-
img {
|
141
|
-
border-style: none;
|
142
|
-
}
|
143
|
-
|
144
|
-
/* Forms
|
145
|
-
========================================================================== */
|
146
|
-
|
147
|
-
/**
|
148
|
-
* 1. Change the font styles in all browsers.
|
149
|
-
* 2. Remove the margin in Firefox and Safari.
|
150
|
-
*/
|
151
|
-
|
152
|
-
button,
|
153
|
-
input,
|
154
|
-
optgroup,
|
155
|
-
select,
|
156
|
-
textarea {
|
157
|
-
font-family: inherit; /* 1 */
|
158
|
-
font-size: 100%; /* 1 */
|
159
|
-
line-height: 1.15; /* 1 */
|
160
|
-
margin: 0; /* 2 */
|
161
|
-
}
|
162
|
-
|
163
|
-
/**
|
164
|
-
* Show the overflow in IE.
|
165
|
-
* 1. Show the overflow in Edge.
|
166
|
-
*/
|
167
|
-
|
168
|
-
button,
|
169
|
-
input { /* 1 */
|
170
|
-
overflow: visible;
|
171
|
-
}
|
172
|
-
|
173
|
-
/**
|
174
|
-
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
175
|
-
* 1. Remove the inheritance of text transform in Firefox.
|
176
|
-
*/
|
177
|
-
|
178
|
-
button,
|
179
|
-
select { /* 1 */
|
180
|
-
text-transform: none;
|
181
|
-
}
|
182
|
-
|
183
|
-
/**
|
184
|
-
* Correct the inability to style clickable types in iOS and Safari.
|
185
|
-
*/
|
186
|
-
|
187
|
-
button,
|
188
|
-
[type="button"],
|
189
|
-
[type="reset"],
|
190
|
-
[type="submit"] {
|
191
|
-
-webkit-appearance: button;
|
192
|
-
}
|
193
|
-
|
194
|
-
/**
|
195
|
-
* Remove the inner border and padding in Firefox.
|
196
|
-
*/
|
197
|
-
|
198
|
-
button::-moz-focus-inner,
|
199
|
-
[type="button"]::-moz-focus-inner,
|
200
|
-
[type="reset"]::-moz-focus-inner,
|
201
|
-
[type="submit"]::-moz-focus-inner {
|
202
|
-
border-style: none;
|
203
|
-
padding: 0;
|
204
|
-
}
|
205
|
-
|
206
|
-
/**
|
207
|
-
* Restore the focus styles unset by the previous rule.
|
208
|
-
*/
|
209
|
-
|
210
|
-
button:-moz-focusring,
|
211
|
-
[type="button"]:-moz-focusring,
|
212
|
-
[type="reset"]:-moz-focusring,
|
213
|
-
[type="submit"]:-moz-focusring {
|
214
|
-
outline: 1px dotted ButtonText;
|
215
|
-
}
|
216
|
-
|
217
|
-
/**
|
218
|
-
* Correct the padding in Firefox.
|
219
|
-
*/
|
220
|
-
|
221
|
-
fieldset {
|
222
|
-
padding: 0.35em 0.75em 0.625em;
|
223
|
-
}
|
224
|
-
|
225
|
-
/**
|
226
|
-
* 1. Correct the text wrapping in Edge and IE.
|
227
|
-
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
228
|
-
* 3. Remove the padding so developers are not caught out when they zero out
|
229
|
-
* `fieldset` elements in all browsers.
|
230
|
-
*/
|
231
|
-
|
232
|
-
legend {
|
233
|
-
box-sizing: border-box; /* 1 */
|
234
|
-
color: inherit; /* 2 */
|
235
|
-
display: table; /* 1 */
|
236
|
-
max-width: 100%; /* 1 */
|
237
|
-
padding: 0; /* 3 */
|
238
|
-
white-space: normal; /* 1 */
|
239
|
-
}
|
240
|
-
|
241
|
-
/**
|
242
|
-
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
243
|
-
*/
|
244
|
-
|
245
|
-
progress {
|
246
|
-
vertical-align: baseline;
|
247
|
-
}
|
248
|
-
|
249
|
-
/**
|
250
|
-
* Remove the default vertical scrollbar in IE 10+.
|
251
|
-
*/
|
252
|
-
|
253
|
-
textarea {
|
254
|
-
overflow: auto;
|
255
|
-
}
|
256
|
-
|
257
|
-
/**
|
258
|
-
* 1. Add the correct box sizing in IE 10.
|
259
|
-
* 2. Remove the padding in IE 10.
|
260
|
-
*/
|
261
|
-
|
262
|
-
[type="checkbox"],
|
263
|
-
[type="radio"] {
|
264
|
-
box-sizing: border-box; /* 1 */
|
265
|
-
padding: 0; /* 2 */
|
266
|
-
}
|
267
|
-
|
268
|
-
/**
|
269
|
-
* Correct the cursor style of increment and decrement buttons in Chrome.
|
270
|
-
*/
|
271
|
-
|
272
|
-
[type="number"]::-webkit-inner-spin-button,
|
273
|
-
[type="number"]::-webkit-outer-spin-button {
|
274
|
-
height: auto;
|
275
|
-
}
|
276
|
-
|
277
|
-
/**
|
278
|
-
* 1. Correct the odd appearance in Chrome and Safari.
|
279
|
-
* 2. Correct the outline style in Safari.
|
280
|
-
*/
|
281
|
-
|
282
|
-
[type="search"] {
|
283
|
-
-webkit-appearance: textfield; /* 1 */
|
284
|
-
outline-offset: -2px; /* 2 */
|
285
|
-
}
|
286
|
-
|
287
|
-
/**
|
288
|
-
* Remove the inner padding in Chrome and Safari on macOS.
|
289
|
-
*/
|
290
|
-
|
291
|
-
[type="search"]::-webkit-search-decoration {
|
292
|
-
-webkit-appearance: none;
|
293
|
-
}
|
294
|
-
|
295
|
-
/**
|
296
|
-
* 1. Correct the inability to style clickable types in iOS and Safari.
|
297
|
-
* 2. Change font properties to `inherit` in Safari.
|
298
|
-
*/
|
299
|
-
|
300
|
-
::-webkit-file-upload-button {
|
301
|
-
-webkit-appearance: button; /* 1 */
|
302
|
-
font: inherit; /* 2 */
|
303
|
-
}
|
304
|
-
|
305
|
-
/* Interactive
|
306
|
-
========================================================================== */
|
307
|
-
|
308
|
-
/*
|
309
|
-
* Add the correct display in Edge, IE 10+, and Firefox.
|
310
|
-
*/
|
311
|
-
|
312
|
-
details {
|
313
|
-
display: block;
|
314
|
-
}
|
315
|
-
|
316
|
-
/*
|
317
|
-
* Add the correct display in all browsers.
|
318
|
-
*/
|
319
|
-
|
320
|
-
summary {
|
321
|
-
display: list-item;
|
322
|
-
}
|
323
|
-
|
324
|
-
/* Misc
|
325
|
-
========================================================================== */
|
326
|
-
|
327
|
-
/**
|
328
|
-
* Add the correct display in IE 10+.
|
329
|
-
*/
|
330
|
-
|
331
|
-
template {
|
332
|
-
display: none;
|
333
|
-
}
|
334
|
-
|
335
|
-
/**
|
336
|
-
* Add the correct display in IE 10.
|
337
|
-
*/
|
338
|
-
|
339
|
-
[hidden] {
|
340
|
-
display: none;
|
341
|
-
}
|