base.sass 0.2.0 → 1.0.1
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/data/browsers.json +1 -0
- data/lib/base.sass.rb +13 -6
- data/lib/base.sass/caniuse.rb +22 -0
- data/lib/base.sass/env.rb +27 -0
- data/lib/base.sass/parse-json.rb +41 -0
- data/lib/base.sass/ruby-to-sass.rb +33 -0
- data/lib/base.sass/sass-to-ruby.rb +25 -0
- data/lib/base.sass/selector.rb +60 -0
- data/lib/base.sass/strftime.rb +21 -0
- data/lib/base.sass/support.rb +136 -0
- data/lib/base.sass/url.rb +120 -0
- data/stylesheets/base.sass/_*.scss +13 -0
- data/stylesheets/base.sass/functions/_list.scss +27 -0
- data/stylesheets/base.sass/functions/_map.scss +1 -1
- data/stylesheets/base.sass/functions/_support.scss +11 -18
- data/stylesheets/base.sass/mixins/_clearfix.scss +19 -0
- data/stylesheets/base.sass/mixins/_ellipsis-overflow.scss +7 -0
- data/stylesheets/base.sass/mixins/_float.scss +8 -0
- data/stylesheets/base.sass/mixins/_font-face.scss +20 -0
- data/stylesheets/base.sass/mixins/_inline-block.scss +8 -0
- data/stylesheets/base.sass/mixins/_placeholder-wrapper.scss +14 -0
- metadata +34 -38
- data/stylesheets/_base.functions.scss +0 -15
- data/stylesheets/_base.resets.scss +0 -4
- data/stylesheets/base.sass/_settings.scss +0 -29
- data/stylesheets/base.sass/functions/_clearfix.scss +0 -25
- data/stylesheets/base.sass/functions/_compass-hacker.scss +0 -18
- data/stylesheets/base.sass/functions/_ellipsis-overflow.scss +0 -15
- data/stylesheets/base.sass/functions/_fixed-position.scss +0 -31
- data/stylesheets/base.sass/functions/_float.scss +0 -7
- data/stylesheets/base.sass/functions/_font-face.scss +0 -70
- data/stylesheets/base.sass/functions/_img-retina.scss +0 -27
- data/stylesheets/base.sass/resets/_basic.scss +0 -67
- data/stylesheets/base.sass/resets/_button-and-input.scss +0 -41
- data/stylesheets/base.sass/resets/_html5-tag.scss +0 -7
- data/stylesheets/base.sass/resets/_small-label.scss +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7d0748e57310baaa88bc57919939822bf241fe7
|
4
|
+
data.tar.gz: b1d5d29fd722de9bc21568131fc0759dff2c78ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9850d92515e0db589d7c639574c55706972d27cfde34c69feeb710dfd8f1c185b043f64f3f7bda1ee24150886236010d527dcc087540041b3e7b048873dce04
|
7
|
+
data.tar.gz: 3c80361d85683dbe1f490971b93cf44bdc7a261018b5adddc0a792cd52567a24f149d2396331f8f4cdbde9df553b545f4323535ec075b34cd2940168bb9959bc
|
data/data/browsers.json
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"chrome":{"prefix":"-webkit-","versions":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"future":[35,36,37]},"safari":{"prefix":"-webkit-","versions":[3.1,3.2,4,5,5.1,6,6.1,7]},"opera":{"prefix":"-webkit-","versions":[9.5,9.6,10,10.1,10.5,10.6,11,11.1,11.5,11.6,12,12.1,15,16,17,18,19,20],"future":[21,22],"presto":12.1},"ios":{"prefix":"-webkit-","versions":[3.2,4,4.1,4.2,4.3,5,5.1,6,6.1,7]},"android":{"prefix":"-webkit-","versions":[2.1,2.2,2.3,3,4,4.1,4.2,4.3,4.4]},"firefox":{"prefix":"-moz-","versions":[2,3,3.5,3.6,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"future":[30,31,32]},"ie":{"prefix":"-ms-","versions":[5.5,6,7,8,9,10,11]}}
|
data/lib/base.sass.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
|
1
|
+
load_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'stylesheets'))
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
ENV['SASS_PATH'] = [ENV['SASS_PATH'], load_path].compact.join(File::PATH_SEPARATOR)
|
4
|
+
ENV['SASS_ENV'] ||= 'development'
|
5
|
+
|
6
|
+
require 'base.sass/caniuse'
|
7
|
+
require 'base.sass/ruby-to-sass'
|
8
|
+
require 'base.sass/sass-to-ruby'
|
9
|
+
require 'base.sass/env'
|
10
|
+
require 'base.sass/parse-json'
|
11
|
+
require 'base.sass/strftime'
|
12
|
+
require 'base.sass/support'
|
13
|
+
require 'base.sass/selector'
|
14
|
+
require 'base.sass/url'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
class CanIUse
|
4
|
+
include Singleton
|
5
|
+
include Sass::Script::Functions
|
6
|
+
|
7
|
+
DATA_DIR = File.join(File.dirname(__FILE__), '..', '..', 'data')
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@caniuse_browsers = load_json(File.join(DATA_DIR, 'browsers.json'))
|
11
|
+
# @caniuse_supports = load_json(File.join(DATA_DIR, 'supports.json'))
|
12
|
+
end
|
13
|
+
|
14
|
+
def browsers
|
15
|
+
@caniuse_browsers
|
16
|
+
end
|
17
|
+
|
18
|
+
# def supports
|
19
|
+
# @caniuse_supports
|
20
|
+
# end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Sass::Script::Functions
|
2
|
+
|
3
|
+
# Returns the value for environment variable name as a string.
|
4
|
+
# Returns null if the named variable does not exist.
|
5
|
+
#
|
6
|
+
# Examples:
|
7
|
+
# env(SASS_ENV) => development
|
8
|
+
# env(sass_env) => development
|
9
|
+
# env(sass-env) => development
|
10
|
+
def env(name)
|
11
|
+
assert_type name, :String
|
12
|
+
ruby_to_sass(ENV[name.value.gsub('-', '_').upcase])
|
13
|
+
end
|
14
|
+
|
15
|
+
# Get the configurations of current app.
|
16
|
+
# Returns null if the named configuration does not exist.
|
17
|
+
#
|
18
|
+
# Examples:
|
19
|
+
# $app-config: (timestamp: '1.0.0');
|
20
|
+
# app-config(timestamp) => 1.0.0
|
21
|
+
def app_config(name)
|
22
|
+
assert_type name, :String
|
23
|
+
config = environment.global_env.var('app-config')
|
24
|
+
config.is_a?(Sass::Script::Value::Map) && config.value[name] || null
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Sass::Script::Functions
|
4
|
+
|
5
|
+
$cached_files = {}
|
6
|
+
|
7
|
+
# Parses a local json file, returns a map, and the result will be cached.
|
8
|
+
# If the `path` is not a absolute path, relative to current process directory.
|
9
|
+
#
|
10
|
+
# Examples:
|
11
|
+
# parse-json('~/Desktop/example.json')
|
12
|
+
# parse-json('package.json')
|
13
|
+
def parse_json(path)
|
14
|
+
assert_type path, :String
|
15
|
+
path = File.expand_path(path.value)
|
16
|
+
|
17
|
+
if $cached_files.key? path
|
18
|
+
Sass.logger.debug "Reading file from cache: #{path}"
|
19
|
+
$cached_files[path]
|
20
|
+
else
|
21
|
+
$cached_files[path] = ruby_to_sass(load_json(path))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def load_json(path)
|
29
|
+
JSON.load(
|
30
|
+
read_file(File.expand_path(path)).to_s.gsub(/(\\r|\\n)/, '')
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def read_file(path)
|
35
|
+
raise Sass::SyntaxError, "File not found or cannot be read: #{path}" unless File.readable? path
|
36
|
+
|
37
|
+
Sass.logger.debug "Reading file: #{path}"
|
38
|
+
File.open(path, 'rb') { |f| f.read }
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Sass::Script::Functions
|
2
|
+
|
3
|
+
protected
|
4
|
+
|
5
|
+
def ruby_to_sass(obj)
|
6
|
+
return bool(obj) if obj.is_a?(TrueClass) || obj.is_a?(FalseClass)
|
7
|
+
return null if obj.nil?
|
8
|
+
return number(obj) if obj.is_a? Numeric
|
9
|
+
return to_sass_list(obj) if obj.is_a? Array
|
10
|
+
return to_sass_map(obj) if obj.is_a? Hash
|
11
|
+
identifier(obj.to_s)
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_sass_map(ruby_hash)
|
15
|
+
sass_map = map({})
|
16
|
+
|
17
|
+
ruby_hash.each do |k, v|
|
18
|
+
sass_map = map_merge(
|
19
|
+
sass_map,
|
20
|
+
map(Hash[identifier(k.to_s), ruby_to_sass(v)])
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
sass_map
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_sass_list(ruby_array)
|
28
|
+
list(ruby_array.map { |item|
|
29
|
+
ruby_to_sass(item)
|
30
|
+
}, :comma)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Sass::Script::Functions
|
2
|
+
|
3
|
+
protected
|
4
|
+
|
5
|
+
def sass_to_ruby(obj)
|
6
|
+
return to_ruby_hash(obj) if obj.is_a? Sass::Script::Value::Map
|
7
|
+
return to_ruby_array(obj) if obj.is_a? Sass::Script::Value::List
|
8
|
+
return obj.inspect if obj.is_a? Sass::Script::Value::Color
|
9
|
+
obj.value
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_ruby_hash(sass_map)
|
13
|
+
sass_map.value.inject({}) do |memo, (k, v)|
|
14
|
+
memo[k.to_s] = sass_to_ruby(v)
|
15
|
+
memo
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_ruby_array(sass_list)
|
20
|
+
sass_list.value.map do |item|
|
21
|
+
sass_to_ruby(item)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Thanks for Compass
|
2
|
+
# Document reference: http://beta.compass-style.org/reference/compass/helpers/selectors/
|
3
|
+
module Sass::Script::Functions
|
4
|
+
COMMA_SEPARATOR = /\s*,\s*/
|
5
|
+
|
6
|
+
def nest(*args)
|
7
|
+
nested = args.map { |a| a.value }.inject do |memo, arg|
|
8
|
+
ancestors = memo.split(COMMA_SEPARATOR)
|
9
|
+
descendants = arg.split(COMMA_SEPARATOR)
|
10
|
+
|
11
|
+
ancestors.map { |a|
|
12
|
+
descendants.map { |d|
|
13
|
+
"#{a} #{d}"
|
14
|
+
}.join(', ')
|
15
|
+
}.join(', ')
|
16
|
+
end
|
17
|
+
|
18
|
+
identifier(nested)
|
19
|
+
end
|
20
|
+
|
21
|
+
def append_selector(selector, to_append)
|
22
|
+
ancestors = selector.value.split(COMMA_SEPARATOR)
|
23
|
+
descendants = to_append.value.split(COMMA_SEPARATOR)
|
24
|
+
|
25
|
+
nested = ancestors.map { |a|
|
26
|
+
descendants.map { |d|
|
27
|
+
"#{a}#{d}"
|
28
|
+
}.join(', ')
|
29
|
+
}.join(', ')
|
30
|
+
|
31
|
+
identifier(nested)
|
32
|
+
end
|
33
|
+
|
34
|
+
def enumerate(prefix, from, through, separator = identifier('-'))
|
35
|
+
selectors = (from.value..through.value).map { |i|
|
36
|
+
"#{prefix.value}#{separator.value}#{i}"
|
37
|
+
}.join(', ')
|
38
|
+
|
39
|
+
identifier(selectors)
|
40
|
+
end
|
41
|
+
|
42
|
+
def headers(from = nil, to = nil)
|
43
|
+
if from && !to
|
44
|
+
if from.is_a?(Sass::Script::Value::String) && from.value == 'all'
|
45
|
+
from = number(1)
|
46
|
+
to = number(6)
|
47
|
+
else
|
48
|
+
to = from
|
49
|
+
from = number(1)
|
50
|
+
end
|
51
|
+
else
|
52
|
+
from ||= number(1)
|
53
|
+
to ||= number(6)
|
54
|
+
end
|
55
|
+
|
56
|
+
list((from.value..to.value).map { |n| identifier("h#{n}") }, :comma)
|
57
|
+
end
|
58
|
+
alias headings headers
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Sass::Script::Functions
|
2
|
+
|
3
|
+
# Formats time according to the directives in the given format string.
|
4
|
+
# Read more: http://www.ruby-doc.org/core-2.1.1/Time.html#method-i-strftime
|
5
|
+
#
|
6
|
+
# Examples:
|
7
|
+
# strftime() => 1399392214
|
8
|
+
# strftime('%FT%T%:z') => 2014-05-07T00:03:34+08:00
|
9
|
+
# strftime('at %I:%M%p') => at 12:03AM
|
10
|
+
def strftime(format = nil)
|
11
|
+
time = Time.now.localtime
|
12
|
+
|
13
|
+
if format
|
14
|
+
assert_type format, :String
|
15
|
+
identifier(time.strftime(format.value))
|
16
|
+
else
|
17
|
+
identifier(time.to_i.to_s)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
module Sass::Script::Functions
|
2
|
+
|
3
|
+
# Which browsers you wanted support?
|
4
|
+
#
|
5
|
+
# `last 1 version`
|
6
|
+
# is last versions for each browser.
|
7
|
+
# `last 2 Chrome versions`
|
8
|
+
# is last versions of the specified browser.
|
9
|
+
# `IE > 8`
|
10
|
+
# is IE versions newer than 8.
|
11
|
+
# `IE >= 8`
|
12
|
+
# is IE version 8 or newer.
|
13
|
+
# `iOS 7`
|
14
|
+
# to set browser version directly.
|
15
|
+
def parse_rules(*rules)
|
16
|
+
rules = rules.map { |rule| sass_to_ruby(rule) }.flatten.uniq
|
17
|
+
|
18
|
+
@browsers ||= CanIUse.instance.browsers
|
19
|
+
selected_browsers =
|
20
|
+
rules.map { |rule| rules_parser(rule.downcase) }.compact
|
21
|
+
.inject { |memo, versions|
|
22
|
+
memo.merge(versions) { |k, orig, added| orig + added }
|
23
|
+
}
|
24
|
+
|
25
|
+
ruby_to_sass(selected_browsers.each { |k, v| v.uniq!; v.sort! })
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns `(android, chrome, firefox, ie, ios, opera, safari)`.
|
29
|
+
def browsers
|
30
|
+
ruby_to_sass(CanIUse.instance.browsers.keys.sort)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns the versions by the given browser.
|
34
|
+
def browser_versions(browser, include_future = bool(true))
|
35
|
+
assert_type browser, :String
|
36
|
+
|
37
|
+
@browsers ||= CanIUse.instance.browsers
|
38
|
+
browser = browser.value.downcase
|
39
|
+
assert_valid_browser(browser)
|
40
|
+
|
41
|
+
versions = @browsers[browser]['versions']
|
42
|
+
versions += @browsers[browser]['future'].to_a if include_future.to_bool
|
43
|
+
|
44
|
+
ruby_to_sass(versions)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Grep feature names according to caniuse by regex.
|
48
|
+
#
|
49
|
+
# Examples:
|
50
|
+
# grep-features('^css3?') => /^css3?/
|
51
|
+
# grep-features('box sizing') => /box|sizing/
|
52
|
+
# grep-features('box-sizing') => /box|sizing/
|
53
|
+
# def grep_features(regex)
|
54
|
+
# assert_type regex, :String
|
55
|
+
|
56
|
+
# regex = regex.value.strip.sub(/^-+|-+$/, '')
|
57
|
+
# regex = regex.gsub(/\s+|-+/, '|') if regex =~ /^[\w\s-]+$/
|
58
|
+
# regex = Regexp.new(regex, Regexp::IGNORECASE)
|
59
|
+
|
60
|
+
# ruby_to_sass(CanIUse.instance.supports.keys.select { |k| k =~ regex }.sort)
|
61
|
+
# end
|
62
|
+
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def assert_valid_browser(browser, version = nil)
|
67
|
+
unless @browsers.key? browser
|
68
|
+
raise Sass::SyntaxError, "Unknown browser name: #{browser}\nYou can find all valid names according to `browsers()`"
|
69
|
+
end
|
70
|
+
|
71
|
+
unless version.nil? || sass_to_ruby(browser_versions(identifier(browser))).include?(version)
|
72
|
+
raise Sass::SyntaxError, "Unknown version for #{browser}: #{version}\nYou can find all valid versions according to `browser-versions(#{browser})`"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def rules_parser(rule)
|
77
|
+
case rule
|
78
|
+
|
79
|
+
# match `last 1 version`
|
80
|
+
when /^last (\d+) versions?$/
|
81
|
+
last_versions_parser($1)
|
82
|
+
|
83
|
+
# match `last 3 chrome versions`
|
84
|
+
when /^last (\d+) (\w+) versions?$/
|
85
|
+
last_browser_versions_parser($1, $2)
|
86
|
+
|
87
|
+
# match `ie > 9`
|
88
|
+
when /^(\w+) (>=?) ([\d\.]+)$/
|
89
|
+
newer_then_parser($1, $2, $3)
|
90
|
+
|
91
|
+
# match `ios 7`
|
92
|
+
when /^(\w+) ([\d\.]+)$/
|
93
|
+
direct_parser($1, $2)
|
94
|
+
|
95
|
+
else
|
96
|
+
raise Sass::SyntaxError, "Unknown rule: `#{rule}`"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def last_versions_parser(num)
|
101
|
+
@browsers.inject({}) do |memo, (k, v)|
|
102
|
+
memo[k] = v['versions'].last(num.to_i)
|
103
|
+
memo
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def last_browser_versions_parser(num, browser)
|
108
|
+
assert_valid_browser(browser)
|
109
|
+
Hash[browser, @browsers[browser]['versions'].last(num.to_i)]
|
110
|
+
end
|
111
|
+
|
112
|
+
def newer_then_parser(browser, sign, version)
|
113
|
+
assert_valid_browser(browser)
|
114
|
+
|
115
|
+
versions = @browsers[browser]['versions']
|
116
|
+
versions = case sign
|
117
|
+
when '>='
|
118
|
+
versions.select { |n| n >= version.to_f }
|
119
|
+
when '>'
|
120
|
+
versions.select { |n| n > version.to_f }
|
121
|
+
end
|
122
|
+
|
123
|
+
versions.empty? ? nil : Hash[browser, versions]
|
124
|
+
end
|
125
|
+
|
126
|
+
def direct_parser(browser, version)
|
127
|
+
version = to_if(version)
|
128
|
+
assert_valid_browser(browser, version)
|
129
|
+
Hash[browser, [version]]
|
130
|
+
end
|
131
|
+
|
132
|
+
def to_if(s)
|
133
|
+
s.include?('.') ? s.to_f : s.to_i
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Sass::Script::Functions
|
2
|
+
|
3
|
+
FONT_TYPES = {
|
4
|
+
eot: 'embedded-opentype',
|
5
|
+
woff: 'woff',
|
6
|
+
ttf: 'truetype',
|
7
|
+
svg: 'svg'
|
8
|
+
}
|
9
|
+
|
10
|
+
MIME_TYPES = {
|
11
|
+
png: 'image/png',
|
12
|
+
jpg: 'image/jpeg',
|
13
|
+
jpeg: 'image/jpeg',
|
14
|
+
gif: 'image/gif',
|
15
|
+
eot: 'application/vnd.ms-fontobject',
|
16
|
+
woff: 'application/font-woff',
|
17
|
+
ttf: 'font/truetype',
|
18
|
+
svg: 'image/svg+xml'
|
19
|
+
}
|
20
|
+
|
21
|
+
PATH_REGEX = /^(.*)(\.\w+)(\??[^#]*)(#?.*)$/
|
22
|
+
|
23
|
+
# Reinforce the official `url()` in CSS to support multi url and data url.
|
24
|
+
# Activates only when all paths are wrapped with quotes.
|
25
|
+
#
|
26
|
+
# Examples:
|
27
|
+
# url(http://a.com/b.png) => url(http://a.com/b.png) # Did nothing
|
28
|
+
# url('http://a.com/b.png') => url(http://a.com/b.png?1399394203)
|
29
|
+
# url('a.png', 'b.png') => url(a.png?1399394203), url(b.png?1399394203)
|
30
|
+
# url('a.eot#iefix', 'b.woff') => url(a.eot?1399394203#iefix) format('embedded-opentype'), url(b.woff?1399394203) format('woff')
|
31
|
+
#
|
32
|
+
# url('a.png', $timestamp: false) => url(a.png)
|
33
|
+
# url('a.png', $timestamp: '1.0.0') => url(a.png?1.0.0)
|
34
|
+
#
|
35
|
+
# $app-config: (timestamp: '1.0.0');
|
36
|
+
# url('a.png') => url(a.png?1.0.0)
|
37
|
+
#
|
38
|
+
# $app-config: (timestamp: 'p1');
|
39
|
+
# url('a.png', $timestamp: 'p0') => url(a.png?p0)
|
40
|
+
#
|
41
|
+
# url('a.png', $base64: true) => url(data:image/png;base64,iVBORw...)
|
42
|
+
def url(*paths)
|
43
|
+
kwargs = paths.last.is_a?(Hash) ? paths.pop : {}
|
44
|
+
raise Sass::SyntaxError, 'url() needs one path at least' if paths.empty?
|
45
|
+
|
46
|
+
encode = kwargs['base64'] == bool(true)
|
47
|
+
ts = timestamp(kwargs['timestamp'])
|
48
|
+
|
49
|
+
paths = paths.map { |path| sass_to_ruby(path) }.flatten
|
50
|
+
.map { |path| to_url(path, encode, ts) }
|
51
|
+
|
52
|
+
list(paths, :comma)
|
53
|
+
end
|
54
|
+
declare :url, [], var_args: true, var_kwargs: true
|
55
|
+
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def timestamp(ts)
|
60
|
+
# no kwargs
|
61
|
+
if ts.nil?
|
62
|
+
cfg = app_config(identifier('timestamp'))
|
63
|
+
ts = cfg == null ? bool(true) : cfg
|
64
|
+
end
|
65
|
+
|
66
|
+
return nil unless ts.to_bool
|
67
|
+
return strftime.value if ts.is_a? Sass::Script::Value::Bool
|
68
|
+
ts.value.to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
def sign(query)
|
72
|
+
case query.size
|
73
|
+
when 0
|
74
|
+
'?'
|
75
|
+
when 1
|
76
|
+
''
|
77
|
+
else
|
78
|
+
'&'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def to_url(path, encode, ts)
|
83
|
+
output = "url(#{path})"
|
84
|
+
|
85
|
+
if path.is_a?(String) && path =~ PATH_REGEX
|
86
|
+
|
87
|
+
path, ext, query, anchor = $1 + $2, $2[1..-1].downcase.to_sym, $3, $4
|
88
|
+
|
89
|
+
if MIME_TYPES.key? ext
|
90
|
+
output = if encode
|
91
|
+
output_data(path, ext)
|
92
|
+
else
|
93
|
+
output_path(path, ext, query, anchor, ts)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
if output.is_a? Array
|
100
|
+
list(output, :space)
|
101
|
+
else
|
102
|
+
identifier(output)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def output_data(path, ext)
|
107
|
+
data = [read_file(File.expand_path(path))].pack('m').gsub(/\s/, '')
|
108
|
+
"url(data:#{MIME_TYPES[ext]};base64,#{data})"
|
109
|
+
end
|
110
|
+
|
111
|
+
def output_path(path, ext, query, anchor, ts)
|
112
|
+
query += sign(query) + ts unless ts.nil?
|
113
|
+
|
114
|
+
output = "url(#{path}#{query}#{anchor})"
|
115
|
+
return output unless FONT_TYPES.key? ext
|
116
|
+
|
117
|
+
[identifier(output), identifier("format('#{FONT_TYPES[ext]}')")]
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
$app-config: () !default;
|
2
|
+
$browser-supports: parse-rules('last 1 version') !default;
|
3
|
+
|
4
|
+
@import 'mixins/clearfix';
|
5
|
+
@import 'mixins/ellipsis-overflow';
|
6
|
+
@import 'mixins/float';
|
7
|
+
@import 'mixins/font-face';
|
8
|
+
@import 'mixins/inline-block';
|
9
|
+
@import 'mixins/placeholder-wrapper';
|
10
|
+
|
11
|
+
@import 'functions/list';
|
12
|
+
@import 'functions/map';
|
13
|
+
@import 'functions/support';
|
@@ -0,0 +1,27 @@
|
|
1
|
+
@function comma-list($list: ()) {
|
2
|
+
@return join((), $list, comma);
|
3
|
+
}
|
4
|
+
|
5
|
+
|
6
|
+
@function slice($list, $min: 1, $max: length($list)) {
|
7
|
+
$output: comma-list();
|
8
|
+
$length: length($list);
|
9
|
+
|
10
|
+
@if $max < 0 {
|
11
|
+
$max: $length + $max + 1;
|
12
|
+
}
|
13
|
+
|
14
|
+
@if $max > $length {
|
15
|
+
$max: $length;
|
16
|
+
}
|
17
|
+
|
18
|
+
@if $min >= 1 and $min <= $length and
|
19
|
+
$max >= 1 and $max <= $length and
|
20
|
+
$min <= $max {
|
21
|
+
@for $i from $min through $max {
|
22
|
+
$output: append($output, nth($list, $i));
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
@return $output;
|
27
|
+
}
|
@@ -7,7 +7,7 @@
|
|
7
7
|
// => ( a: (x: 'x', y: 'y') )
|
8
8
|
@function map-deep-merge($map, $sub-map) {
|
9
9
|
@if type-of($map) != map or type-of($sub-map) != map {
|
10
|
-
@warn 'Params for `map-deep-merge` require map data
|
10
|
+
@warn 'Params for `map-deep-merge` require map data';
|
11
11
|
@return null;
|
12
12
|
}
|
13
13
|
|
@@ -1,21 +1,14 @@
|
|
1
|
-
//
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
// Check whether the $browser is supported according to the supported browsers,
|
8
|
-
// only declared minimum support (overwrite Compass).
|
9
|
-
@function support-legacy-browser($browser, $min-version, $max-version: null, $threshold: null) {
|
10
|
-
@if not index($supported-browsers, $browser) {
|
11
|
-
@return false;
|
1
|
+
// Examples:
|
2
|
+
// support-browser(ios)
|
3
|
+
// support-browser(ie 8)
|
4
|
+
@function support-browser($args) {
|
5
|
+
@if length($args) == 1 {
|
6
|
+
@return map-has-key($browser-supports, to-lower-case($args));
|
12
7
|
}
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
@else {
|
9
|
+
@return not not index(
|
10
|
+
map-get($browser-supports, to-lower-case(nth($args, 1))),
|
11
|
+
nth($args, 2)
|
12
|
+
);
|
18
13
|
}
|
19
|
-
|
20
|
-
@return compare-browser-versions($browser, '#{$max-version or $min-version}', $min-required-version) >= 0;
|
21
14
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
@mixin clearfix {
|
2
|
+
$colon: unquote(if(support-browser(ie 8), ':', '::')) !global;
|
3
|
+
|
4
|
+
@include placeholder-wrapper('clearfix') {
|
5
|
+
&#{$colon}before,
|
6
|
+
&#{$colon}after {
|
7
|
+
content: '\20';
|
8
|
+
display: table;
|
9
|
+
}
|
10
|
+
|
11
|
+
&#{$colon}after {
|
12
|
+
clear: both;
|
13
|
+
}
|
14
|
+
|
15
|
+
@if support-browser(ie 7) {
|
16
|
+
*zoom: 1;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
@mixin font-face($font-family, $paths...) {
|
2
|
+
$ie9-url: null;
|
3
|
+
|
4
|
+
@if support-browser(ie 9) {
|
5
|
+
@each $path in $paths {
|
6
|
+
@if str-index($path, '.eot') {
|
7
|
+
$i: str-index($path, '#');
|
8
|
+
$end: if($i, $i - 1, str-length($path));
|
9
|
+
$ie9-url: nth(nth(url(str-slice($path, 1, $end)), 1), 1);
|
10
|
+
}
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
@font-face {
|
15
|
+
font-family: $font-family;
|
16
|
+
@content;
|
17
|
+
src: $ie9-url;
|
18
|
+
src: url($paths);
|
19
|
+
}
|
20
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
$-registered-placeholders: ();
|
2
|
+
|
3
|
+
@mixin placeholder-wrapper($name) {
|
4
|
+
$times: map-get($-registered-placeholders, $name) or 0;
|
5
|
+
|
6
|
+
@if $times == 0 {
|
7
|
+
@at-root %-#{$name} {
|
8
|
+
@content;
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
@extend %-#{$name};
|
13
|
+
$-registered-placeholders: map-merge($-registered-placeholders, ($name: $times + 1)) !global;
|
14
|
+
}
|
metadata
CHANGED
@@ -1,66 +1,62 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: base.sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- junjun.zhang
|
7
|
+
- junjun.zhang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sass
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.3
|
20
|
-
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 3.3.5
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: compass
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
19
|
+
version: '3.3'
|
20
|
+
- - "<"
|
32
21
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
22
|
+
version: '3.5'
|
34
23
|
type: :runtime
|
35
24
|
prerelease: false
|
36
25
|
version_requirements: !ruby/object:Gem::Requirement
|
37
26
|
requirements:
|
38
|
-
- - "
|
27
|
+
- - ">="
|
39
28
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
|
42
|
-
|
29
|
+
version: '3.3'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.5'
|
33
|
+
description: A lot of powerful Sass functions.
|
34
|
+
email: i@mrzhang.me
|
43
35
|
executables: []
|
44
36
|
extensions: []
|
45
37
|
extra_rdoc_files: []
|
46
38
|
files:
|
39
|
+
- data/browsers.json
|
47
40
|
- lib/base.sass.rb
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
- stylesheets/base.sass/
|
41
|
+
- lib/base.sass/caniuse.rb
|
42
|
+
- lib/base.sass/env.rb
|
43
|
+
- lib/base.sass/parse-json.rb
|
44
|
+
- lib/base.sass/ruby-to-sass.rb
|
45
|
+
- lib/base.sass/sass-to-ruby.rb
|
46
|
+
- lib/base.sass/selector.rb
|
47
|
+
- lib/base.sass/strftime.rb
|
48
|
+
- lib/base.sass/support.rb
|
49
|
+
- lib/base.sass/url.rb
|
50
|
+
- stylesheets/base.sass/_*.scss
|
51
|
+
- stylesheets/base.sass/functions/_list.scss
|
58
52
|
- stylesheets/base.sass/functions/_map.scss
|
59
53
|
- stylesheets/base.sass/functions/_support.scss
|
60
|
-
- stylesheets/base.sass/
|
61
|
-
- stylesheets/base.sass/
|
62
|
-
- stylesheets/base.sass/
|
63
|
-
- stylesheets/base.sass/
|
54
|
+
- stylesheets/base.sass/mixins/_clearfix.scss
|
55
|
+
- stylesheets/base.sass/mixins/_ellipsis-overflow.scss
|
56
|
+
- stylesheets/base.sass/mixins/_float.scss
|
57
|
+
- stylesheets/base.sass/mixins/_font-face.scss
|
58
|
+
- stylesheets/base.sass/mixins/_inline-block.scss
|
59
|
+
- stylesheets/base.sass/mixins/_placeholder-wrapper.scss
|
64
60
|
homepage: https://github.com/jsw0528/base.sass
|
65
61
|
licenses:
|
66
62
|
- MIT
|
@@ -73,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
69
|
requirements:
|
74
70
|
- - ">="
|
75
71
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
72
|
+
version: '1.9'
|
77
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
74
|
requirements:
|
79
75
|
- - ">="
|
@@ -84,5 +80,5 @@ rubyforge_project:
|
|
84
80
|
rubygems_version: 2.2.0
|
85
81
|
signing_key:
|
86
82
|
specification_version: 4
|
87
|
-
summary: The beginning of your stylesheets
|
83
|
+
summary: The beginning of your stylesheets.
|
88
84
|
test_files: []
|
@@ -1,15 +0,0 @@
|
|
1
|
-
@import 'base.sass/settings';
|
2
|
-
|
3
|
-
@import 'compass/css3';
|
4
|
-
@import 'compass/css3/selection';
|
5
|
-
@import 'compass/reset/utilities'; // Only use reset-font, reset-list-style, reset-table and reset-html5
|
6
|
-
@import 'base.sass/functions/compass-hacker';
|
7
|
-
|
8
|
-
@import 'base.sass/functions/clearfix';
|
9
|
-
@import 'base.sass/functions/ellipsis-overflow';
|
10
|
-
@import 'base.sass/functions/fixed-position';
|
11
|
-
@import 'base.sass/functions/float';
|
12
|
-
@import 'base.sass/functions/font-face';
|
13
|
-
@import 'base.sass/functions/img-retina';
|
14
|
-
@import 'base.sass/functions/map';
|
15
|
-
@import 'base.sass/functions/support';
|
@@ -1,29 +0,0 @@
|
|
1
|
-
$font-family-base: Helvetica Neue, Helvetica, STHeiTi, sans-serif !default;
|
2
|
-
|
3
|
-
$font-size-base: 14px !default;
|
4
|
-
|
5
|
-
$line-height-base: 1.5 !default;
|
6
|
-
|
7
|
-
$text-color: #333 !default;
|
8
|
-
|
9
|
-
$body-bg-color: null !default;
|
10
|
-
|
11
|
-
$input-placeholder-color: #999 !default;
|
12
|
-
|
13
|
-
$selection-colors: (
|
14
|
-
// text: defaults to contrast-color(background),
|
15
|
-
background: null
|
16
|
-
) !default;
|
17
|
-
|
18
|
-
$link-status: (
|
19
|
-
link: (
|
20
|
-
color: #428bca,
|
21
|
-
line: none
|
22
|
-
),
|
23
|
-
hover: (
|
24
|
-
// color: defaults to darken(link.color, 15%),
|
25
|
-
line: underline
|
26
|
-
)
|
27
|
-
) !default;
|
28
|
-
|
29
|
-
$pseudo-element-colon: unquote(if(support-legacy-browser(ie, 8), ':', '::'));
|
@@ -1,25 +0,0 @@
|
|
1
|
-
@mixin clearfix {
|
2
|
-
// Only register once
|
3
|
-
@if not global-variable-exists(-clearfix-exists) {
|
4
|
-
@at-root %clearfix {
|
5
|
-
&#{$pseudo-element-colon}before,
|
6
|
-
&#{$pseudo-element-colon}after {
|
7
|
-
content: '\20';
|
8
|
-
display: table;
|
9
|
-
}
|
10
|
-
|
11
|
-
&#{$pseudo-element-colon}after {
|
12
|
-
clear: both;
|
13
|
-
}
|
14
|
-
|
15
|
-
@if support-legacy-browser(ie, 7) {
|
16
|
-
*zoom: 1;
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
|
-
// Mark
|
21
|
-
$-clearfix-exists: true !global;
|
22
|
-
}
|
23
|
-
|
24
|
-
@extend %clearfix;
|
25
|
-
}
|
@@ -1,18 +0,0 @@
|
|
1
|
-
// Override `compass/css3/appearance`
|
2
|
-
@mixin appearance($appearance) {
|
3
|
-
@each $prefix in -webkit, -moz {
|
4
|
-
@if support-prefix($prefix) {
|
5
|
-
@include prefix-prop(appearance, $appearance, $prefix);
|
6
|
-
}
|
7
|
-
}
|
8
|
-
}
|
9
|
-
|
10
|
-
// Override `compass/css3/inline-block`
|
11
|
-
@mixin inline-block {
|
12
|
-
display: inline-block;
|
13
|
-
|
14
|
-
@if support-legacy-browser(ie, 7) {
|
15
|
-
*display: inline;
|
16
|
-
*zoom: 1;
|
17
|
-
}
|
18
|
-
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
@mixin ellipsis-overflow {
|
2
|
-
// Only register once
|
3
|
-
@if not global-variable-exists(-ellipsis-overflow-exists) {
|
4
|
-
@at-root %ellipsis-overflow {
|
5
|
-
overflow: hidden;
|
6
|
-
text-overflow: ellipsis;
|
7
|
-
white-space: nowrap;
|
8
|
-
}
|
9
|
-
|
10
|
-
// Mark
|
11
|
-
$-ellipsis-overflow-exists: true !global;
|
12
|
-
}
|
13
|
-
|
14
|
-
@extend %ellipsis-overflow;
|
15
|
-
}
|
@@ -1,31 +0,0 @@
|
|
1
|
-
@mixin fixed-position($x: center, $y: center) {
|
2
|
-
$map: (
|
3
|
-
x: (
|
4
|
-
left: 0,
|
5
|
-
right: 0,
|
6
|
-
center: 50%
|
7
|
-
),
|
8
|
-
y: (
|
9
|
-
top: 0,
|
10
|
-
bottom: 0,
|
11
|
-
center: 50%
|
12
|
-
)
|
13
|
-
);
|
14
|
-
|
15
|
-
position: fixed;
|
16
|
-
|
17
|
-
#{if($x == right, right, left)}: map-find($map, 'x.#{$x}') or $x;
|
18
|
-
#{if($y == bottom, bottom, top)}: map-find($map, 'y.#{$y}') or $y;
|
19
|
-
|
20
|
-
@if $x == center or $y == center {
|
21
|
-
@include translate(-to-number($x), -to-number($y));
|
22
|
-
}
|
23
|
-
|
24
|
-
@content;
|
25
|
-
}
|
26
|
-
|
27
|
-
|
28
|
-
// === Pivate (start with hyphen) ===
|
29
|
-
@function -to-number($s) {
|
30
|
-
@return if($s == center, -50%, 0);
|
31
|
-
}
|
@@ -1,70 +0,0 @@
|
|
1
|
-
// Override `compass/css3/font-face`
|
2
|
-
// Browsers support data: http://caniuse.com/fontface
|
3
|
-
@mixin font-face($filename, $font-family: $filename, $path: null) {
|
4
|
-
@if not at-stylesheet-root() {
|
5
|
-
@warn 'include font-face mixin from the root level of your stylesheet.';
|
6
|
-
}
|
7
|
-
|
8
|
-
$prefix: '#{$filename}';
|
9
|
-
$ts: if(is-absolute($path), '?' + timestamp(), '');
|
10
|
-
|
11
|
-
@if type-of($path) == string {
|
12
|
-
@if str-slice($path, str-length($path)) != '/' {
|
13
|
-
$path: $path + '/';
|
14
|
-
}
|
15
|
-
|
16
|
-
$prefix: $path + $prefix;
|
17
|
-
}
|
18
|
-
|
19
|
-
@font-face {
|
20
|
-
font-family: '#{$font-family}';
|
21
|
-
|
22
|
-
// IE9 compat mode
|
23
|
-
@if support-legacy-browser(ie, 9) {
|
24
|
-
src: font-url($prefix + '.eot' + $ts);
|
25
|
-
}
|
26
|
-
src: -combo-font-urls($prefix, $ts);
|
27
|
-
|
28
|
-
@content;
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
// Check whether the $path is start with either `/` or `http`.
|
33
|
-
@function is-absolute($path) {
|
34
|
-
$path: '#{$path}';
|
35
|
-
@return str-slice($path, 0, 1) == '/' or str-slice($path, 0, 4) == 'http';
|
36
|
-
}
|
37
|
-
|
38
|
-
@function timestamp() {
|
39
|
-
@return current-time('%Y%m%d%H%M%S');
|
40
|
-
}
|
41
|
-
|
42
|
-
|
43
|
-
// === Pivate (start with hyphen) ===
|
44
|
-
@function -combo-font-urls($prefix, $timestamp) {
|
45
|
-
$src: comma-list();
|
46
|
-
|
47
|
-
@if support-legacy-browser(ie, 8) {
|
48
|
-
$src: append($src, font-files($prefix + '.eot' + $timestamp + '#iefix'));
|
49
|
-
}
|
50
|
-
|
51
|
-
// Modern browsers
|
52
|
-
$src: append($src, font-files($prefix + '.woff' + $timestamp));
|
53
|
-
|
54
|
-
@if support-legacy-browser(ios-safari, '4.2-4.3') or
|
55
|
-
support-legacy-browser(android, '4.2-4.3') or
|
56
|
-
support-legacy-browser(safari, 5) or
|
57
|
-
support-legacy-browser(opera, 11)
|
58
|
-
{
|
59
|
-
$src: append($src, font-files($prefix + '.ttf' + $timestamp));
|
60
|
-
}
|
61
|
-
|
62
|
-
@if support-legacy-browser(ios-safari, '4.0-4.1') or
|
63
|
-
support-legacy-browser(android, 2.3) or
|
64
|
-
index($supported-browsers, opera-mini)
|
65
|
-
{
|
66
|
-
$src: append($src, font-files($prefix + '.svg' + $timestamp + '#legacy'));
|
67
|
-
}
|
68
|
-
|
69
|
-
@return $src;
|
70
|
-
}
|
@@ -1,27 +0,0 @@
|
|
1
|
-
// Short retina mixin for setting `background-image` and `background-size`.
|
2
|
-
@mixin img-retina($img-1x, $img-2x, $bg-size: $default-background-size) {
|
3
|
-
background-image: image-url($img-1x);
|
4
|
-
|
5
|
-
$vendor: comma-list();
|
6
|
-
@include with-each-prefix(background-img-opts, $background-size-threshold) {
|
7
|
-
@if $current-prefix == -webkit { $vendor: append($vendor, -vendor(-webkit-min, '2')); }
|
8
|
-
@if $current-prefix == -moz { $vendor: append($vendor, -vendor(min--moz, '2')); }
|
9
|
-
@if $current-prefix == -o { $vendor: append($vendor, -vendor(-o-min, '2/1')); }
|
10
|
-
@if $current-prefix == null { $vendor: append($vendor, -vendor(min, '2')); }
|
11
|
-
}
|
12
|
-
|
13
|
-
@media #{$vendor},
|
14
|
-
only screen and (min-resolution: 192dpi),
|
15
|
-
only screen and (min-resolution: 2dppx) {
|
16
|
-
background: {
|
17
|
-
image: image-url($img-2x);
|
18
|
-
size: unquote($bg-size);
|
19
|
-
}
|
20
|
-
}
|
21
|
-
}
|
22
|
-
|
23
|
-
|
24
|
-
// === Pivate (start with hyphen) ===
|
25
|
-
@function -vendor($prefix, $ratio) {
|
26
|
-
@return unquote('only screen and (#{$prefix}-device-pixel-ratio: #{$ratio})');
|
27
|
-
}
|
@@ -1,67 +0,0 @@
|
|
1
|
-
* {
|
2
|
-
margin: 0;
|
3
|
-
padding: 0;
|
4
|
-
|
5
|
-
@if support-prefix(-webkit) {
|
6
|
-
-webkit-tap-highlight-color: rgba(#fff, 0);
|
7
|
-
}
|
8
|
-
|
9
|
-
$selection-text-color: map-get($selection-colors, text);
|
10
|
-
$selection-bg-color: map-get($selection-colors, background);
|
11
|
-
|
12
|
-
@if $selection-text-color != null {
|
13
|
-
@include selection($selection-bg-color, $selection-text-color) {
|
14
|
-
text-shadow: none;
|
15
|
-
}
|
16
|
-
}
|
17
|
-
@else if $selection-bg-color != null {
|
18
|
-
@include selection($selection-bg-color) {
|
19
|
-
text-shadow: none;
|
20
|
-
}
|
21
|
-
}
|
22
|
-
}
|
23
|
-
|
24
|
-
html {
|
25
|
-
@if support-prefix(-webkit) {
|
26
|
-
-webkit-overflow-scrolling: touch;
|
27
|
-
-webkit-text-size-adjust: 100%;
|
28
|
-
}
|
29
|
-
|
30
|
-
@if index($supported-browsers, ie-mobile) {
|
31
|
-
-ms-text-size-adjust: 100%;
|
32
|
-
}
|
33
|
-
}
|
34
|
-
|
35
|
-
body {
|
36
|
-
background-color: $body-bg-color;
|
37
|
-
color: $text-color;
|
38
|
-
font: unquote($font-size-base + '/' + $line-height-base) $font-family-base;
|
39
|
-
}
|
40
|
-
|
41
|
-
a {
|
42
|
-
color: map-find($link-status, 'link.color');
|
43
|
-
text-decoration: map-find($link-status, 'link.line');
|
44
|
-
|
45
|
-
&:hover {
|
46
|
-
color: map-find($link-status, 'hover.color')
|
47
|
-
or
|
48
|
-
darken(map-find($link-status, 'link.color'), 15%);
|
49
|
-
text-decoration: map-find($link-status, 'hover.line');
|
50
|
-
}
|
51
|
-
}
|
52
|
-
|
53
|
-
em {
|
54
|
-
font-style: normal;
|
55
|
-
}
|
56
|
-
|
57
|
-
img {
|
58
|
-
border: 0;
|
59
|
-
}
|
60
|
-
|
61
|
-
ol, ul {
|
62
|
-
@include reset-list-style;
|
63
|
-
}
|
64
|
-
|
65
|
-
table {
|
66
|
-
@include reset-table;
|
67
|
-
}
|
@@ -1,41 +0,0 @@
|
|
1
|
-
button, input, textarea, select {
|
2
|
-
@include reset-font;
|
3
|
-
}
|
4
|
-
|
5
|
-
button, input {
|
6
|
-
@if support-prefix(-moz) {
|
7
|
-
&::-moz-focus-inner {
|
8
|
-
padding: 0;
|
9
|
-
border: 0;
|
10
|
-
}
|
11
|
-
}
|
12
|
-
}
|
13
|
-
|
14
|
-
button, html input[type='button'], input[type='reset'], input[type='submit'] {
|
15
|
-
cursor: pointer;
|
16
|
-
|
17
|
-
@if index($supported-browsers, ios-safari) {
|
18
|
-
-webkit-appearance: button;
|
19
|
-
}
|
20
|
-
|
21
|
-
@if support-legacy-browser(ie, 7) {
|
22
|
-
*overflow: visible;
|
23
|
-
}
|
24
|
-
}
|
25
|
-
|
26
|
-
input[type='search'] {
|
27
|
-
@include appearance(textfield);
|
28
|
-
@include box-sizing(content-box);
|
29
|
-
|
30
|
-
@if support-prefix(-webkit) {
|
31
|
-
&::-webkit-search-decoration {
|
32
|
-
-webkit-appearance: none;
|
33
|
-
}
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
#{elements-of-type(text-input)} {
|
38
|
-
@include input-placeholder {
|
39
|
-
color: $input-placeholder-color;
|
40
|
-
}
|
41
|
-
}
|