Brian Vaughn
7 years ago
486 changed files with 10 additions and 6607 deletions
@ -1,29 +0,0 @@ |
|||
source 'https://rubygems.org' |
|||
|
|||
gem 'rake' |
|||
|
|||
# jekyll, which builds it all |
|||
# 3.0 includes sass processing |
|||
gem 'jekyll', '~>3.1' |
|||
|
|||
# Jekyll extensions |
|||
gem 'jekyll-redirect-from' |
|||
gem 'jekyll-paginate' |
|||
|
|||
# JSON |
|||
gem 'json' |
|||
|
|||
# For `rake watch` |
|||
gem 'rb-fsevent' |
|||
|
|||
# For markdown header cleanup |
|||
gem 'sanitize', '~>2.0' |
|||
|
|||
# Markdown |
|||
gem 'redcarpet' |
|||
|
|||
# Syntax highlighting |
|||
gem 'pygments.rb' |
|||
|
|||
# Avoid having to poll for changes on Windows |
|||
gem 'wdm', '>= 0.1.0' if Gem.win_platform? |
@ -1,67 +0,0 @@ |
|||
GEM |
|||
remote: https://rubygems.org/ |
|||
specs: |
|||
colorator (0.1) |
|||
ffi (1.9.14) |
|||
ffi (1.9.14-x64-mingw32) |
|||
jekyll (3.1.6) |
|||
colorator (~> 0.1) |
|||
jekyll-sass-converter (~> 1.0) |
|||
jekyll-watch (~> 1.1) |
|||
kramdown (~> 1.3) |
|||
liquid (~> 3.0) |
|||
mercenary (~> 0.3.3) |
|||
rouge (~> 1.7) |
|||
safe_yaml (~> 1.0) |
|||
jekyll-paginate (1.1.0) |
|||
jekyll-redirect-from (0.11.0) |
|||
jekyll (>= 2.0) |
|||
jekyll-sass-converter (1.4.0) |
|||
sass (~> 3.4) |
|||
jekyll-watch (1.4.0) |
|||
listen (~> 3.0, < 3.1) |
|||
json (2.0.1) |
|||
kramdown (1.11.1) |
|||
liquid (3.0.6) |
|||
listen (3.0.8) |
|||
rb-fsevent (~> 0.9, >= 0.9.4) |
|||
rb-inotify (~> 0.9, >= 0.9.7) |
|||
mercenary (0.3.6) |
|||
mini_portile2 (2.1.0) |
|||
nokogiri (1.6.8) |
|||
mini_portile2 (~> 2.1.0) |
|||
pkg-config (~> 1.1.7) |
|||
nokogiri (1.6.8-x64-mingw32) |
|||
mini_portile2 (~> 2.1.0) |
|||
pkg-config (~> 1.1.7) |
|||
pkg-config (1.1.7) |
|||
posix-spawn (0.3.11) |
|||
pygments.rb (0.6.3) |
|||
posix-spawn (~> 0.3.6) |
|||
yajl-ruby (~> 1.2.0) |
|||
rake (11.2.2) |
|||
rb-fsevent (0.9.7) |
|||
rb-inotify (0.9.7) |
|||
ffi (>= 0.5.0) |
|||
redcarpet (3.3.4) |
|||
rouge (1.11.1) |
|||
safe_yaml (1.0.4) |
|||
sanitize (2.1.0) |
|||
nokogiri (>= 1.4.4) |
|||
sass (3.4.22) |
|||
yajl-ruby (1.2.1) |
|||
|
|||
PLATFORMS |
|||
ruby |
|||
x64-mingw32 |
|||
|
|||
DEPENDENCIES |
|||
jekyll (~> 3.1) |
|||
jekyll-paginate |
|||
jekyll-redirect-from |
|||
json |
|||
pygments.rb |
|||
rake |
|||
rb-fsevent |
|||
redcarpet |
|||
sanitize (~> 2.0) |
@ -1,79 +0,0 @@ |
|||
# React Documentation & Website |
|||
|
|||
## [Read the React Documentation](https://reactjs.org/) |
|||
|
|||
This folder is not the right place to *read* the documentation. |
|||
|
|||
Instead, head over [to the React website](https://reactjs.org/) to read it. |
|||
|
|||
This folder only contains the source code for the website. |
|||
|
|||
## Installation |
|||
|
|||
If you are working on the site, you will want to install and run a local copy of it. |
|||
|
|||
We use [Jekyll](http://jekyllrb.com/) to build the site using ([mostly](http://zpao.com/posts/adding-line-highlights-to-markdown-code-fences/)) Markdown, and we host it by pushing HTML to [GitHub Pages](http://pages.github.com/). |
|||
|
|||
### Dependencies |
|||
|
|||
In order to use Jekyll, you will need to have Ruby installed. macOS comes pre-installed with Ruby, but you may need to update RubyGems (via `gem update --system`). |
|||
Otherwise, [RVM](https://rvm.io/) and [rbenv](https://github.com/sstephenson/rbenv) are popular ways to install Ruby. |
|||
|
|||
- [Ruby](http://www.ruby-lang.org/) (version >= 1.8.7) |
|||
- [RubyGems](http://rubygems.org/) (version >= 1.3.7) |
|||
- [Bundler](http://gembundler.com/) |
|||
|
|||
The version of the Pygment syntax highlighter used by Jekyll requires Python 2.7.x (not 3.x). macOS comes pre-installed with Python 2.7, but you may need to install it on other OSs. |
|||
|
|||
- [Python](https://www.python.org) (version 2.7.x) |
|||
|
|||
Once you have RubyGems and installed Bundler (via `gem install bundler`), use it to install the dependencies: |
|||
|
|||
```sh |
|||
$ cd react/docs |
|||
$ bundle install # Might need sudo. |
|||
$ npm install |
|||
``` |
|||
|
|||
### Instructions |
|||
|
|||
The site requires React, so first make sure you've built the project (via [`grunt`](http://gruntjs.com/getting-started)). |
|||
|
|||
Use Jekyll to serve the website locally (by default, at `http://localhost:4000`): |
|||
|
|||
```sh |
|||
$ cd react/docs |
|||
$ bundle exec rake |
|||
$ bundle exec rake fetch_remotes |
|||
$ bundle exec jekyll serve -w |
|||
$ open http://localhost:4000/react/index.html |
|||
``` |
|||
|
|||
We use [SASS](http://sass-lang.com/) (with [Bourbon](http://bourbon.io/)) for our CSS, and we use JSX to transform some of our JS. |
|||
If you only want to modify the HTML or Markdown, you do not have to do anything because we package pre-compiled copies of the CSS and JS. |
|||
If you want to modify the CSS or JS, use [Rake](http://rake.rubyforge.org/) to compile them: |
|||
|
|||
```sh |
|||
$ cd react/docs |
|||
$ bundle exec rake watch # Automatically compiles as needed. |
|||
# bundle exec rake Manually compile CSS and JS. |
|||
# bundle exec rake js Manually compile JS, only. |
|||
``` |
|||
|
|||
## Afterthoughts |
|||
|
|||
### Updating `facebook.github.io/react` |
|||
|
|||
The easiest way to do this is to have a separate clone of this repository, checked out to the `gh-pages` branch. We have a build step that expects this to be in a directory named `react-gh-pages` at the same depth as `react`. Then it's just a matter of running `grunt docs`, which will compile the site and copy it out to this repository. From there, you can check it in. |
|||
|
|||
**Note:** This should only be done for new releases. You should create a tag corresponding to the release tag in the main repository. |
|||
|
|||
We also have a rake task that does the same thing (without creating commits). It expects the directory structure mentioned above. |
|||
|
|||
```sh |
|||
$ bundle exec rake release |
|||
``` |
|||
|
|||
### Removing the Jekyll / Ruby Dependency |
|||
|
|||
In an ideal world, we would not be adding a Ruby dependency on part of our project. We would like to move towards a point where we are using React to render the website. |
@ -1,74 +0,0 @@ |
|||
require('rubygems') |
|||
require('json') |
|||
require('yaml') |
|||
require('open-uri') |
|||
|
|||
desc "download babel-browser" |
|||
task :fetch_remotes do |
|||
IO.copy_stream( |
|||
open('https://unpkg.com/babel-standalone@6.15.0/babel.min.js'), |
|||
'js/babel.min.js' |
|||
) |
|||
end |
|||
|
|||
desc "generate js from jsx" |
|||
task :js do |
|||
system "../node_modules/.bin/babel _js --out-dir=js" |
|||
end |
|||
|
|||
desc "watch js" |
|||
task :watch do |
|||
Process.spawn "../node_modules/.bin/babel _js --out-dir=js --watch" |
|||
Process.waitall |
|||
end |
|||
|
|||
desc "update version to match ../package.json" |
|||
task :update_version do |
|||
react_version = JSON.parse(File.read('../package.json'))['version'] |
|||
site_config = YAML.load_file('_config.yml') |
|||
if site_config['react_version'] != react_version |
|||
site_config['react_version'] = react_version |
|||
File.open('_config.yml', 'w+') { |f| f.write(site_config.to_yaml) } |
|||
end |
|||
end |
|||
|
|||
desc "update SRI hashes" |
|||
task :update_hashes do |
|||
map = { |
|||
'react.js' => 'dev', |
|||
'react.min.js' => 'prod', |
|||
'react-dom.js' => 'dom_dev', |
|||
'react-dom.min.js' => 'dom_prod', |
|||
'react-dom-server.js' => 'dom_server_dev', |
|||
'react-dom-server.min.js' => 'dom_server_prod' |
|||
} |
|||
site_config = YAML.load_file('_config.yml') |
|||
map.each do |file, key| |
|||
site_config['react_hashes'][key] = `openssl dgst -sha384 -binary ../../react-bower/#{file} | openssl base64 -A` |
|||
end |
|||
File.open('_config.yml', 'w+') { |f| f.write(site_config.to_yaml) } |
|||
end |
|||
|
|||
desc "update acknowledgements list" |
|||
task :update_acknowledgements do |
|||
authors = File.readlines('../AUTHORS').map {|author| author.gsub(/ <.*\n/,'')} |
|||
# split into cols here because nobody knows how to use liquid |
|||
# need to to_f because ruby will keep slice_size as int and round on its own |
|||
slice_size = (authors.size / 3.to_f).ceil |
|||
cols = authors.each_slice(slice_size).to_a |
|||
File.open('_data/acknowledgements.yml', 'w+') { |f| f.write(cols.to_yaml) } |
|||
end |
|||
|
|||
desc "copy error codes to docs" |
|||
task :copy_error_codes do |
|||
codes_json = File.read('../scripts/error-codes/codes.json') |
|||
codes_js = "var errorMap = #{codes_json.chomp};\n" |
|||
File.write('js/errorMap.js', codes_js) |
|||
end |
|||
|
|||
desc "build into ../../react-gh-pages" |
|||
task :release => [:update_version, :js, :fetch_remotes, :copy_error_codes] do |
|||
system "jekyll build -d ../../react-gh-pages" |
|||
end |
|||
|
|||
task :default => [:js] |
@ -1,72 +0,0 @@ |
|||
--- |
|||
name: React |
|||
description: A JavaScript library for building user interfaces |
|||
url: https://reactjs.org/ |
|||
baseurl: / |
|||
permalink: /blog/:year/:month/:day/:title.html |
|||
paginate_path: /blog/page:num/ |
|||
paginate: 5 |
|||
timezone: America/Los_Angeles |
|||
highlighter: pygments |
|||
defaults: |
|||
- scope: |
|||
path: '' |
|||
type: posts |
|||
values: |
|||
layout: post |
|||
sectionid: blog |
|||
- scope: |
|||
path: blog |
|||
type: pages |
|||
values: |
|||
sectionid: blog |
|||
- scope: |
|||
path: tutorial |
|||
type: pages |
|||
values: |
|||
layout: tutorial |
|||
sectionid: tutorial |
|||
- scope: |
|||
path: docs |
|||
type: pages |
|||
values: |
|||
layout: docs |
|||
sectionid: docs |
|||
- scope: |
|||
path: contributing |
|||
type: pages |
|||
values: |
|||
sectionid: docs |
|||
- scope: |
|||
path: community |
|||
type: pages |
|||
values: |
|||
layout: community |
|||
sectionid: community |
|||
exclude: |
|||
- Gemfile |
|||
- Gemfile.lock |
|||
- README.md |
|||
- Rakefile |
|||
- vendor/bundle |
|||
markdown: redcarpet |
|||
redcarpet: |
|||
extensions: |
|||
- fenced_code_blocks |
|||
- footnotes |
|||
sass: |
|||
style: :compressed |
|||
sass_dir: _css |
|||
gems: |
|||
- jekyll-redirect-from |
|||
- jekyll-paginate |
|||
react_version: 16.0.0 |
|||
react_hashes: |
|||
dev: buVLzxzBI8Ps3svVMSUurNdb5dozNidH5Ow4H0YgZeia3t6Oeui2VLpvtAq1fwtK |
|||
prod: nCjsa0kjNQPQdxWm12/ReVJzfBJaVubEwwDswyQDGMKYJmeWv3qShMuETfU5fisu |
|||
addons_dev: /u97pKzBwasbC1yj8gSIq1z30o4ZTUX9j1Mv/hyAjmG41ydTNHw9JFOhwFbDgxmR |
|||
addons_prod: /p86n4b5VTlWoA/INEHQZ+zjx9g1pJduoFmTEJ6fSzFTq1mBaXaBcWVGtZJXD68L |
|||
dom_dev: lUxkeWjg3I3lXmxcM1gvgo0yvm2w9alc1osa4L8yWZFO6l/vg9h5hSlHPFioltrm |
|||
dom_prod: u8x1yIGN9IjGNYbBaDMsp1D4MK3sCmMU13mcBX+bm+aMo5+gaT8HIwIj39GlXaRS |
|||
dom_server_dev: Okj1hVX1VF+oZSkPcJQ/YcnW6bsIpeni222ylwUaMnSmdCe0zWKmMwpFMVqzy4Ws |
|||
dom_server_prod: wiA4u+G5fEfF4xzhhVnNWeSifVyttoEIpgc3APaMKQgw5A4wHbEMihf63tk1qoyt |
@ -1,171 +0,0 @@ |
|||
html * { |
|||
color-profile: sRGB; |
|||
rendering-intent: auto; |
|||
} |
|||
.cm-s-solarized-light { |
|||
background-color: #f8f5ec; |
|||
color: #637c84; |
|||
} |
|||
.cm-s-solarized-light .emphasis { |
|||
font-weight: bold; |
|||
} |
|||
.cm-s-solarized-light .dotted { |
|||
border-bottom: 1px dotted #cb4b16; |
|||
} |
|||
.cm-s-solarized-light .CodeMirror-gutter { |
|||
background-color: #eee8d5; |
|||
border-right: 3px solid #eee8d5; |
|||
} |
|||
.cm-s-solarized-light .CodeMirror-gutter .CodeMirror-gutter-text { |
|||
color: #93a1a1; |
|||
} |
|||
.cm-s-solarized-light .CodeMirror-cursor { |
|||
border-left-color: #002b36 !important; |
|||
} |
|||
.cm-s-solarized-light .CodeMirror-matchingbracket { |
|||
color: #002b36; |
|||
background-color: #eee8d5; |
|||
box-shadow: 0 0 10px #eee8d5; |
|||
font-weight: bold; |
|||
} |
|||
.cm-s-solarized-light .CodeMirror-nonmatchingbracket { |
|||
color: #002b36; |
|||
background-color: #eee8d5; |
|||
box-shadow: 0 0 10px #eee8d5; |
|||
font-weight: bold; |
|||
color: #dc322f; |
|||
border-bottom: 1px dotted #cb4b16; |
|||
} |
|||
.cm-s-solarized-light span.cm-keyword { |
|||
color: #859900; |
|||
} |
|||
.cm-s-solarized-light span.cm-atom { |
|||
color: #2aa198; |
|||
} |
|||
.cm-s-solarized-light span.cm-number { |
|||
color: #586e75; |
|||
} |
|||
.cm-s-solarized-light span.cm-def { |
|||
color: #637c84; |
|||
} |
|||
.cm-s-solarized-light span.cm-variable { |
|||
color: #637c84; |
|||
} |
|||
.cm-s-solarized-light span.cm-variable-2 { |
|||
color: #b58900; |
|||
} |
|||
.cm-s-solarized-light span.cm-variable-3 { |
|||
color: #cb4b16; |
|||
} |
|||
.cm-s-solarized-light span.cm-comment { |
|||
color: #93a1a1; |
|||
} |
|||
.cm-s-solarized-light span.cm-property { |
|||
color: #657b83; |
|||
} |
|||
.cm-s-solarized-light span.cm-operator { |
|||
color: #657b83; |
|||
} |
|||
.cm-s-solarized-light span.cm-string { |
|||
color: #36958e; |
|||
} |
|||
.cm-s-solarized-light span.cm-error { |
|||
font-weight: bold; |
|||
border-bottom: 1px dotted #cb4b16; |
|||
} |
|||
.cm-s-solarized-light span.cm-bracket { |
|||
color: #268bd2; |
|||
} |
|||
.cm-s-solarized-light span.cm-tag { |
|||
color: #268bd2; |
|||
} |
|||
.cm-s-solarized-light span.cm-attribute { |
|||
color: #586e75; |
|||
} |
|||
.cm-s-solarized-light span.cm-meta { |
|||
color: #268bd2; |
|||
} |
|||
.cm-s-solarized-dark { |
|||
background-color: #002b36; |
|||
color: #839496; |
|||
} |
|||
.cm-s-solarized-dark .emphasis { |
|||
font-weight: bold; |
|||
} |
|||
.cm-s-solarized-dark .dotted { |
|||
border-bottom: 1px dotted #cb4b16; |
|||
} |
|||
.cm-s-solarized-dark .CodeMirror-gutter { |
|||
background-color: #073642; |
|||
border-right: 3px solid #073642; |
|||
} |
|||
.cm-s-solarized-dark .CodeMirror-gutter .CodeMirror-gutter-text { |
|||
color: #586e75; |
|||
} |
|||
.cm-s-solarized-dark .CodeMirror-cursor { |
|||
border-left-color: #fdf6e3 !important; |
|||
} |
|||
.cm-s-solarized-dark .CodeMirror-matchingbracket { |
|||
color: #fdf6e3; |
|||
background-color: #073642; |
|||
box-shadow: 0 0 10px #073642; |
|||
font-weight: bold; |
|||
} |
|||
.cm-s-solarized-dark .CodeMirror-nonmatchingbracket { |
|||
color: #fdf6e3; |
|||
background-color: #073642; |
|||
box-shadow: 0 0 10px #073642; |
|||
font-weight: bold; |
|||
color: #dc322f; |
|||
border-bottom: 1px dotted #cb4b16; |
|||
} |
|||
.cm-s-solarized-dark span.cm-keyword { |
|||
color: #839496; |
|||
font-weight: bold; |
|||
} |
|||
.cm-s-solarized-dark span.cm-atom { |
|||
color: #2aa198; |
|||
} |
|||
.cm-s-solarized-dark span.cm-number { |
|||
color: #93a1a1; |
|||
} |
|||
.cm-s-solarized-dark span.cm-def { |
|||
color: #268bd2; |
|||
} |
|||
.cm-s-solarized-dark span.cm-variable { |
|||
color: #cb4b16; |
|||
} |
|||
.cm-s-solarized-dark span.cm-variable-2 { |
|||
color: #cb4b16; |
|||
} |
|||
.cm-s-solarized-dark span.cm-variable-3 { |
|||
color: #cb4b16; |
|||
} |
|||
.cm-s-solarized-dark span.cm-comment { |
|||
color: #586e75; |
|||
} |
|||
.cm-s-solarized-dark span.cm-property { |
|||
color: #b58900; |
|||
} |
|||
.cm-s-solarized-dark span.cm-operator { |
|||
color: #839496; |
|||
} |
|||
.cm-s-solarized-dark span.cm-string { |
|||
color: #6c71c4; |
|||
} |
|||
.cm-s-solarized-dark span.cm-error { |
|||
font-weight: bold; |
|||
border-bottom: 1px dotted #cb4b16; |
|||
} |
|||
.cm-s-solarized-dark span.cm-bracket { |
|||
color: #cb4b16; |
|||
} |
|||
.cm-s-solarized-dark span.cm-tag { |
|||
color: #839496; |
|||
} |
|||
.cm-s-solarized-dark span.cm-attribute { |
|||
color: #93a1a1; |
|||
} |
|||
.cm-s-solarized-dark span.cm-meta { |
|||
color: #268bd2; |
|||
} |
@ -1,135 +0,0 @@ |
|||
@import 'variables.scss'; |
|||
|
|||
$textColor: $mediumColor; |
|||
$textColorLight: lighten($textColor, 20%); |
|||
|
|||
html { |
|||
font-family: $helvetica; |
|||
font-family: proxima-nova, $helvetica; |
|||
color: $textColor; |
|||
line-height: 1.28; |
|||
} |
|||
|
|||
p { |
|||
margin: 0 0 10px; |
|||
} |
|||
|
|||
.subHeader { |
|||
font-size: 21px; |
|||
font-weight: 200; |
|||
line-height: 30px; |
|||
margin-bottom: 10px; |
|||
} |
|||
|
|||
em { |
|||
font-style: italic; |
|||
} |
|||
|
|||
h1, |
|||
h2, |
|||
h3, |
|||
h4, |
|||
h5, |
|||
h6 { |
|||
margin: 10px 0; |
|||
font-family: inherit; |
|||
font-weight: bold; |
|||
line-height: 20px; |
|||
color: inherit; |
|||
text-rendering: optimizelegibility; |
|||
} |
|||
|
|||
h1 small, |
|||
h2 small, |
|||
h3 small, |
|||
h4 small, |
|||
h5 small, |
|||
h6 small { |
|||
font-weight: normal; |
|||
color: $textColorLight |
|||
} |
|||
|
|||
h1, |
|||
h2, |
|||
h3 { |
|||
line-height: 40px; |
|||
} |
|||
|
|||
h1 { |
|||
font-size: 39px; |
|||
} |
|||
|
|||
h2 { |
|||
font-size: 31px; |
|||
} |
|||
|
|||
h3 { |
|||
font-size: 23px; |
|||
} |
|||
|
|||
h4 { |
|||
font-size: 16px; |
|||
} |
|||
|
|||
h5 { |
|||
font-size: 14px; |
|||
} |
|||
|
|||
h6 { |
|||
font-size: 11px; |
|||
} |
|||
|
|||
h1 small { |
|||
font-size: 24px; |
|||
} |
|||
|
|||
h2 small { |
|||
font-size: 18px; |
|||
} |
|||
|
|||
h3 small { |
|||
font-size: 16px; |
|||
} |
|||
|
|||
h4 small { |
|||
font-size: 14px; |
|||
} |
|||
|
|||
ul, |
|||
ol { |
|||
margin: 0 0 10px 25px; |
|||
padding: 0; |
|||
} |
|||
|
|||
ul ul, |
|||
ul ol, |
|||
ol ol, |
|||
ol ul { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
li { |
|||
line-height: 20px; |
|||
} |
|||
|
|||
a { |
|||
color: $linkColor; |
|||
text-decoration: none; |
|||
&:hover, |
|||
&:focus { |
|||
color: $linkInteract; |
|||
text-decoration: underline; |
|||
} |
|||
&:focus { |
|||
outline: thin dotted #333; |
|||
outline: 5px auto -webkit-focus-ring-color; |
|||
outline-offset: -2px; |
|||
} |
|||
} |
|||
.center { |
|||
text-align: center; |
|||
} |
|||
|
|||
input { |
|||
font-family: inherit; |
|||
} |
@ -1,22 +0,0 @@ |
|||
$primary: #cc7a6f; |
|||
$linkColor: darken($primary, 9%); |
|||
$linkInteract: darken($linkColor, 9%); |
|||
$pageBg: #f9f9f9; |
|||
|
|||
$lightColor: #e9e9e9; |
|||
$mediumestColor: #666; |
|||
$mediumColor: #484848; |
|||
$darkColor: #2d2d2d; |
|||
$darkestColor: #222222; |
|||
$blueColor: #61dafb; |
|||
$orangeColor: complement($blueColor); |
|||
|
|||
$lightTextColor: #fafafa; |
|||
$mediumTextColor: #aaa; |
|||
$darkTextColor: $mediumColor; |
|||
|
|||
$buttonBlueTop: #77a3d2; |
|||
$buttonBlueBottom: #4783c2; |
|||
$buttonGreyTop: #9a9a9a; |
|||
$buttonGreyBottom: #646464; |
|||
|
@ -1,8 +0,0 @@ |
|||
//************************************************************************// |
|||
// These mixins/functions are deprecated |
|||
// They will be removed in the next MAJOR version release |
|||
//************************************************************************// |
|||
@mixin inline-block { |
|||
display: inline-block; |
|||
@warn "inline-block mixin is deprecated and will be removed in the next major version release"; |
|||
} |
@ -1,79 +0,0 @@ |
|||
// Settings |
|||
@import "settings/prefixer"; |
|||
@import "settings/px-to-em"; |
|||
@import "settings/asset-pipeline"; |
|||
|
|||
// Custom Helpers |
|||
@import "helpers/convert-units"; |
|||
@import "helpers/gradient-positions-parser"; |
|||
@import "helpers/is-num"; |
|||
@import "helpers/linear-angle-parser"; |
|||
@import "helpers/linear-gradient-parser"; |
|||
@import "helpers/linear-positions-parser"; |
|||
@import "helpers/linear-side-corner-parser"; |
|||
@import "helpers/radial-arg-parser"; |
|||
@import "helpers/radial-positions-parser"; |
|||
@import "helpers/radial-gradient-parser"; |
|||
@import "helpers/render-gradients"; |
|||
@import "helpers/shape-size-stripper"; |
|||
@import "helpers/str-to-num"; |
|||
|
|||
// Custom Functions |
|||
@import "functions/assign"; |
|||
@import "functions/color-lightness"; |
|||
@import "functions/flex-grid"; |
|||
@import "functions/golden-ratio"; |
|||
@import "functions/grid-width"; |
|||
@import "functions/modular-scale"; |
|||
@import "functions/px-to-em"; |
|||
@import "functions/px-to-rem"; |
|||
@import "functions/strip-units"; |
|||
@import "functions/tint-shade"; |
|||
@import "functions/transition-property-name"; |
|||
@import "functions/unpack"; |
|||
|
|||
// CSS3 Mixins |
|||
@import "css3/animation"; |
|||
@import "css3/appearance"; |
|||
@import "css3/backface-visibility"; |
|||
@import "css3/background"; |
|||
@import "css3/background-image"; |
|||
@import "css3/border-image"; |
|||
@import "css3/border-radius"; |
|||
@import "css3/box-sizing"; |
|||
@import "css3/calc"; |
|||
@import "css3/columns"; |
|||
@import "css3/filter"; |
|||
@import "css3/flex-box"; |
|||
@import "css3/font-face"; |
|||
@import "css3/font-feature-settings"; |
|||
@import "css3/hyphens"; |
|||
@import "css3/hidpi-media-query"; |
|||
@import "css3/image-rendering"; |
|||
@import "css3/keyframes"; |
|||
@import "css3/linear-gradient"; |
|||
@import "css3/perspective"; |
|||
@import "css3/radial-gradient"; |
|||
@import "css3/transform"; |
|||
@import "css3/transition"; |
|||
@import "css3/user-select"; |
|||
@import "css3/placeholder"; |
|||
|
|||
// Addons & other mixins |
|||
@import "addons/button"; |
|||
@import "addons/clearfix"; |
|||
@import "addons/directional-values"; |
|||
@import "addons/ellipsis"; |
|||
@import "addons/font-family"; |
|||
@import "addons/hide-text"; |
|||
@import "addons/html5-input-types"; |
|||
@import "addons/position"; |
|||
@import "addons/prefixer"; |
|||
@import "addons/retina-image"; |
|||
@import "addons/size"; |
|||
@import "addons/timing-functions"; |
|||
@import "addons/triangle"; |
|||
@import "addons/word-wrap"; |
|||
|
|||
// Soon to be deprecated Mixins |
|||
@import "bourbon-deprecated-upcoming"; |
@ -1,374 +0,0 @@ |
|||
@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) { |
|||
|
|||
@if type-of($style) == string and type-of($base-color) == color { |
|||
@include buttonstyle($style, $base-color, $text-size, $padding); |
|||
} |
|||
|
|||
@if type-of($style) == string and type-of($base-color) == number { |
|||
$padding: $text-size; |
|||
$text-size: $base-color; |
|||
$base-color: #4294f0; |
|||
|
|||
@if $padding == inherit { |
|||
$padding: 7px 18px; |
|||
} |
|||
|
|||
@include buttonstyle($style, $base-color, $text-size, $padding); |
|||
} |
|||
|
|||
@if type-of($style) == color and type-of($base-color) == color { |
|||
$base-color: $style; |
|||
$style: simple; |
|||
@include buttonstyle($style, $base-color, $text-size, $padding); |
|||
} |
|||
|
|||
@if type-of($style) == color and type-of($base-color) == number { |
|||
$padding: $text-size; |
|||
$text-size: $base-color; |
|||
$base-color: $style; |
|||
$style: simple; |
|||
|
|||
@if $padding == inherit { |
|||
$padding: 7px 18px; |
|||
} |
|||
|
|||
@include buttonstyle($style, $base-color, $text-size, $padding); |
|||
} |
|||
|
|||
@if type-of($style) == number { |
|||
$padding: $base-color; |
|||
$text-size: $style; |
|||
$base-color: #4294f0; |
|||
$style: simple; |
|||
|
|||
@if $padding == #4294f0 { |
|||
$padding: 7px 18px; |
|||
} |
|||
|
|||
@include buttonstyle($style, $base-color, $text-size, $padding); |
|||
} |
|||
|
|||
&:disabled { |
|||
opacity: 0.5; |
|||
cursor: not-allowed; |
|||
} |
|||
} |
|||
|
|||
|
|||
// Selector Style Button |
|||
//************************************************************************// |
|||
@mixin buttonstyle($type, $b-color, $t-size, $pad) { |
|||
// Grayscale button |
|||
@if $type == simple and $b-color == grayscale($b-color) { |
|||
@include simple($b-color, true, $t-size, $pad); |
|||
} |
|||
|
|||
@if $type == shiny and $b-color == grayscale($b-color) { |
|||
@include shiny($b-color, true, $t-size, $pad); |
|||
} |
|||
|
|||
@if $type == pill and $b-color == grayscale($b-color) { |
|||
@include pill($b-color, true, $t-size, $pad); |
|||
} |
|||
|
|||
@if $type == flat and $b-color == grayscale($b-color) { |
|||
@include flat($b-color, true, $t-size, $pad); |
|||
} |
|||
|
|||
// Colored button |
|||
@if $type == simple { |
|||
@include simple($b-color, false, $t-size, $pad); |
|||
} |
|||
|
|||
@else if $type == shiny { |
|||
@include shiny($b-color, false, $t-size, $pad); |
|||
} |
|||
|
|||
@else if $type == pill { |
|||
@include pill($b-color, false, $t-size, $pad); |
|||
} |
|||
|
|||
@else if $type == flat { |
|||
@include flat($b-color, false, $t-size, $pad); |
|||
} |
|||
} |
|||
|
|||
|
|||
// Simple Button |
|||
//************************************************************************// |
|||
@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { |
|||
$color: hsl(0, 0, 100%); |
|||
$border: adjust-color($base-color, $saturation: 9%, $lightness: -14%); |
|||
$inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%); |
|||
$stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%); |
|||
$text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%); |
|||
|
|||
@if is-light($base-color) { |
|||
$color: hsl(0, 0, 20%); |
|||
$text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); |
|||
} |
|||
|
|||
@if $grayscale == true { |
|||
$border: grayscale($border); |
|||
$inset-shadow: grayscale($inset-shadow); |
|||
$stop-gradient: grayscale($stop-gradient); |
|||
$text-shadow: grayscale($text-shadow); |
|||
} |
|||
|
|||
border: 1px solid $border; |
|||
border-radius: 3px; |
|||
box-shadow: inset 0 1px 0 0 $inset-shadow; |
|||
color: $color; |
|||
display: inline-block; |
|||
font-size: $textsize; |
|||
font-weight: bold; |
|||
@include linear-gradient ($base-color, $stop-gradient); |
|||
padding: $padding; |
|||
text-decoration: none; |
|||
text-shadow: 0 1px 0 $text-shadow; |
|||
background-clip: padding-box; |
|||
|
|||
&:hover:not(:disabled) { |
|||
$base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%); |
|||
$inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%); |
|||
$stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%); |
|||
|
|||
@if $grayscale == true { |
|||
$base-color-hover: grayscale($base-color-hover); |
|||
$inset-shadow-hover: grayscale($inset-shadow-hover); |
|||
$stop-gradient-hover: grayscale($stop-gradient-hover); |
|||
} |
|||
|
|||
box-shadow: inset 0 1px 0 0 $inset-shadow-hover; |
|||
cursor: pointer; |
|||
@include linear-gradient ($base-color-hover, $stop-gradient-hover); |
|||
} |
|||
|
|||
&:active:not(:disabled), |
|||
&:focus:not(:disabled) { |
|||
$border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%); |
|||
$inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%); |
|||
|
|||
@if $grayscale == true { |
|||
$border-active: grayscale($border-active); |
|||
$inset-shadow-active: grayscale($inset-shadow-active); |
|||
} |
|||
|
|||
border: 1px solid $border-active; |
|||
box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active; |
|||
} |
|||
} |
|||
|
|||
|
|||
// Shiny Button |
|||
//************************************************************************// |
|||
@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { |
|||
$color: hsl(0, 0, 100%); |
|||
$border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81); |
|||
$border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122); |
|||
$fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46); |
|||
$inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12); |
|||
$second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33); |
|||
$text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114); |
|||
$third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48); |
|||
|
|||
@if is-light($base-color) { |
|||
$color: hsl(0, 0, 20%); |
|||
$text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); |
|||
} |
|||
|
|||
@if $grayscale == true { |
|||
$border: grayscale($border); |
|||
$border-bottom: grayscale($border-bottom); |
|||
$fourth-stop: grayscale($fourth-stop); |
|||
$inset-shadow: grayscale($inset-shadow); |
|||
$second-stop: grayscale($second-stop); |
|||
$text-shadow: grayscale($text-shadow); |
|||
$third-stop: grayscale($third-stop); |
|||
} |
|||
|
|||
border: 1px solid $border; |
|||
border-bottom: 1px solid $border-bottom; |
|||
border-radius: 5px; |
|||
box-shadow: inset 0 1px 0 0 $inset-shadow; |
|||
color: $color; |
|||
display: inline-block; |
|||
font-size: $textsize; |
|||
font-weight: bold; |
|||
@include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%); |
|||
padding: $padding; |
|||
text-align: center; |
|||
text-decoration: none; |
|||
text-shadow: 0 -1px 1px $text-shadow; |
|||
|
|||
&:hover:not(:disabled) { |
|||
$first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18); |
|||
$second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51); |
|||
$third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66); |
|||
$fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63); |
|||
|
|||
@if $grayscale == true { |
|||
$first-stop-hover: grayscale($first-stop-hover); |
|||
$second-stop-hover: grayscale($second-stop-hover); |
|||
$third-stop-hover: grayscale($third-stop-hover); |
|||
$fourth-stop-hover: grayscale($fourth-stop-hover); |
|||
} |
|||
|
|||
cursor: pointer; |
|||
@include linear-gradient(top, $first-stop-hover 0%, |
|||
$second-stop-hover 50%, |
|||
$third-stop-hover 50%, |
|||
$fourth-stop-hover 100%); |
|||
} |
|||
|
|||
&:active:not(:disabled), |
|||
&:focus:not(:disabled) { |
|||
$inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122); |
|||
|
|||
@if $grayscale == true { |
|||
$inset-shadow-active: grayscale($inset-shadow-active); |
|||
} |
|||
|
|||
box-shadow: inset 0 0 20px 0 $inset-shadow-active; |
|||
} |
|||
} |
|||
|
|||
|
|||
// Pill Button |
|||
//************************************************************************// |
|||
@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { |
|||
$color: hsl(0, 0, 100%); |
|||
$border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%); |
|||
$border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%); |
|||
$border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%); |
|||
$inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%); |
|||
$stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%); |
|||
$text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%); |
|||
|
|||
@if is-light($base-color) { |
|||
$color: hsl(0, 0, 20%); |
|||
$text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); |
|||
} |
|||
|
|||
@if $grayscale == true { |
|||
$border-bottom: grayscale($border-bottom); |
|||
$border-sides: grayscale($border-sides); |
|||
$border-top: grayscale($border-top); |
|||
$inset-shadow: grayscale($inset-shadow); |
|||
$stop-gradient: grayscale($stop-gradient); |
|||
$text-shadow: grayscale($text-shadow); |
|||
} |
|||
|
|||
border: 1px solid $border-top; |
|||
border-color: $border-top $border-sides $border-bottom; |
|||
border-radius: 16px; |
|||
box-shadow: inset 0 1px 0 0 $inset-shadow; |
|||
color: $color; |
|||
display: inline-block; |
|||
font-size: $textsize; |
|||
font-weight: normal; |
|||
line-height: 1; |
|||
@include linear-gradient ($base-color, $stop-gradient); |
|||
padding: $padding; |
|||
text-align: center; |
|||
text-decoration: none; |
|||
text-shadow: 0 -1px 1px $text-shadow; |
|||
background-clip: padding-box; |
|||
|
|||
&:hover:not(:disabled) { |
|||
$base-color-hover: adjust-color($base-color, $lightness: -4.5%); |
|||
$border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%); |
|||
$border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%); |
|||
$border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%); |
|||
$inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%); |
|||
$stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%); |
|||
$text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%); |
|||
|
|||
@if $grayscale == true { |
|||
$base-color-hover: grayscale($base-color-hover); |
|||
$border-bottom: grayscale($border-bottom); |
|||
$border-sides: grayscale($border-sides); |
|||
$border-top: grayscale($border-top); |
|||
$inset-shadow-hover: grayscale($inset-shadow-hover); |
|||
$stop-gradient-hover: grayscale($stop-gradient-hover); |
|||
$text-shadow-hover: grayscale($text-shadow-hover); |
|||
} |
|||
|
|||
border: 1px solid $border-top; |
|||
border-color: $border-top $border-sides $border-bottom; |
|||
box-shadow: inset 0 1px 0 0 $inset-shadow-hover; |
|||
cursor: pointer; |
|||
@include linear-gradient ($base-color-hover, $stop-gradient-hover); |
|||
text-shadow: 0 -1px 1px $text-shadow-hover; |
|||
background-clip: padding-box; |
|||
} |
|||
|
|||
&:active:not(:disabled), |
|||
&:focus:not(:disabled) { |
|||
$active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%); |
|||
$border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%); |
|||
$border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%); |
|||
$inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%); |
|||
$text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%); |
|||
|
|||
@if $grayscale == true { |
|||
$active-color: grayscale($active-color); |
|||
$border-active: grayscale($border-active); |
|||
$border-bottom-active: grayscale($border-bottom-active); |
|||
$inset-shadow-active: grayscale($inset-shadow-active); |
|||
$text-shadow-active: grayscale($text-shadow-active); |
|||
} |
|||
|
|||
background: $active-color; |
|||
border: 1px solid $border-active; |
|||
border-bottom: 1px solid $border-bottom-active; |
|||
box-shadow: inset 0 0 6px 3px $inset-shadow-active; |
|||
text-shadow: 0 -1px 1px $text-shadow-active; |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
// Flat Button |
|||
//************************************************************************// |
|||
@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { |
|||
$color: hsl(0, 0, 100%); |
|||
|
|||
@if is-light($base-color) { |
|||
$color: hsl(0, 0, 20%); |
|||
} |
|||
|
|||
background-color: $base-color; |
|||
border-radius: 3px; |
|||
border: none; |
|||
color: $color; |
|||
display: inline-block; |
|||
font-size: inherit; |
|||
font-weight: bold; |
|||
padding: 7px 18px; |
|||
text-decoration: none; |
|||
background-clip: padding-box; |
|||
|
|||
&:hover:not(:disabled){ |
|||
$base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%); |
|||
|
|||
@if $grayscale == true { |
|||
$base-color-hover: grayscale($base-color-hover); |
|||
} |
|||
|
|||
background-color: $base-color-hover; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
&:active:not(:disabled), |
|||
&:focus:not(:disabled) { |
|||
$base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%); |
|||
|
|||
@if $grayscale == true { |
|||
$base-color-active: grayscale($base-color-active); |
|||
} |
|||
|
|||
background-color: $base-color-active; |
|||
cursor: pointer; |
|||
} |
|||
} |
@ -1,23 +0,0 @@ |
|||
// Modern micro clearfix provides an easy way to contain floats without adding additional markup. |
|||
// |
|||
// Example usage: |
|||
// |
|||
// // Contain all floats within .wrapper |
|||
// .wrapper { |
|||
// @include clearfix; |
|||
// .content, |
|||
// .sidebar { |
|||
// float : left; |
|||
// } |
|||
// } |
|||
|
|||
@mixin clearfix { |
|||
&:after { |
|||
content:""; |
|||
display:table; |
|||
clear:both; |
|||
} |
|||
} |
|||
|
|||
// Acknowledgements |
|||
// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php) |
@ -1,111 +0,0 @@ |
|||
// directional-property mixins are shorthands |
|||
// for writing properties like the following |
|||
// |
|||
// @include margin(null 0 10px); |
|||
// ------ |
|||
// margin-right: 0; |
|||
// margin-bottom: 10px; |
|||
// margin-left: 0; |
|||
// |
|||
// - or - |
|||
// |
|||
// @include border-style(dotted null); |
|||
// ------ |
|||
// border-top-style: dotted; |
|||
// border-bottom-style: dotted; |
|||
// |
|||
// ------ |
|||
// |
|||
// Note: You can also use false instead of null |
|||
|
|||
@function collapse-directionals($vals) { |
|||
$output: null; |
|||
|
|||
$A: nth( $vals, 1 ); |
|||
$B: if( length($vals) < 2, $A, nth($vals, 2)); |
|||
$C: if( length($vals) < 3, $A, nth($vals, 3)); |
|||
$D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) )); |
|||
|
|||
@if $A == 0 { $A: 0 } |
|||
@if $B == 0 { $B: 0 } |
|||
@if $C == 0 { $C: 0 } |
|||
@if $D == 0 { $D: 0 } |
|||
|
|||
@if $A == $B and $A == $C and $A == $D { $output: $A } |
|||
@else if $A == $C and $B == $D { $output: $A $B } |
|||
@else if $B == $D { $output: $A $B $C } |
|||
@else { $output: $A $B $C $D } |
|||
|
|||
@return $output; |
|||
} |
|||
|
|||
@function contains-falsy($list) { |
|||
@each $item in $list { |
|||
@if not $item { |
|||
@return true; |
|||
} |
|||
} |
|||
|
|||
@return false; |
|||
} |
|||
|
|||
@mixin directional-property($pre, $suf, $vals) { |
|||
// Property Names |
|||
$top: $pre + "-top" + if($suf, "-#{$suf}", ""); |
|||
$bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); |
|||
$left: $pre + "-left" + if($suf, "-#{$suf}", ""); |
|||
$right: $pre + "-right" + if($suf, "-#{$suf}", ""); |
|||
$all: $pre + if($suf, "-#{$suf}", ""); |
|||
|
|||
$vals: collapse-directionals($vals); |
|||
|
|||
@if contains-falsy($vals) { |
|||
@if nth($vals, 1) { #{$top}: nth($vals, 1); } |
|||
|
|||
@if length($vals) == 1 { |
|||
@if nth($vals, 1) { #{$right}: nth($vals, 1); } |
|||
} @else { |
|||
@if nth($vals, 2) { #{$right}: nth($vals, 2); } |
|||
} |
|||
|
|||
// prop: top/bottom right/left |
|||
@if length($vals) == 2 { |
|||
@if nth($vals, 1) { #{$bottom}: nth($vals, 1); } |
|||
@if nth($vals, 2) { #{$left}: nth($vals, 2); } |
|||
|
|||
// prop: top right/left bottom |
|||
} @else if length($vals) == 3 { |
|||
@if nth($vals, 3) { #{$bottom}: nth($vals, 3); } |
|||
@if nth($vals, 2) { #{$left}: nth($vals, 2); } |
|||
|
|||
// prop: top right bottom left |
|||
} @else if length($vals) == 4 { |
|||
@if nth($vals, 3) { #{$bottom}: nth($vals, 3); } |
|||
@if nth($vals, 4) { #{$left}: nth($vals, 4); } |
|||
} |
|||
|
|||
// prop: top/right/bottom/left |
|||
} @else { |
|||
#{$all}: $vals; |
|||
} |
|||
} |
|||
|
|||
@mixin margin($vals...) { |
|||
@include directional-property(margin, false, $vals...); |
|||
} |
|||
|
|||
@mixin padding($vals...) { |
|||
@include directional-property(padding, false, $vals...); |
|||
} |
|||
|
|||
@mixin border-style($vals...) { |
|||
@include directional-property(border, style, $vals...); |
|||
} |
|||
|
|||
@mixin border-color($vals...) { |
|||
@include directional-property(border, color, $vals...); |
|||
} |
|||
|
|||
@mixin border-width($vals...) { |
|||
@include directional-property(border, width, $vals...); |
|||
} |
@ -1,7 +0,0 @@ |
|||
@mixin ellipsis($width: 100%) { |
|||
display: inline-block; |
|||
max-width: $width; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; |
|||
} |
@ -1,5 +0,0 @@ |
|||
$georgia: Georgia, Cambria, "Times New Roman", Times, serif; |
|||
$helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; |
|||
$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif; |
|||
$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace; |
|||
$verdana: Verdana, Geneva, sans-serif; |
@ -1,10 +0,0 @@ |
|||
@mixin hide-text { |
|||
overflow: hidden; |
|||
|
|||
&:before { |
|||
content: ""; |
|||
display: block; |
|||
width: 0; |
|||
height: 100%; |
|||
} |
|||
} |
@ -1,86 +0,0 @@ |
|||
//************************************************************************// |
|||
// Generate a variable ($all-text-inputs) with a list of all html5 |
|||
// input types that have a text-based input, excluding textarea. |
|||
// http://diveintohtml5.org/forms.html |
|||
//************************************************************************// |
|||
$inputs-list: 'input[type="email"]', |
|||
'input[type="number"]', |
|||
'input[type="password"]', |
|||
'input[type="search"]', |
|||
'input[type="tel"]', |
|||
'input[type="text"]', |
|||
'input[type="url"]', |
|||
|
|||
// Webkit & Gecko may change the display of these in the future |
|||
'input[type="color"]', |
|||
'input[type="date"]', |
|||
'input[type="datetime"]', |
|||
'input[type="datetime-local"]', |
|||
'input[type="month"]', |
|||
'input[type="time"]', |
|||
'input[type="week"]'; |
|||
|
|||
// Bare inputs |
|||
//************************************************************************// |
|||
$all-text-inputs: assign-inputs($inputs-list); |
|||
|
|||
// Hover Pseudo-class |
|||
//************************************************************************// |
|||
$all-text-inputs-hover: assign-inputs($inputs-list, hover); |
|||
|
|||
// Focus Pseudo-class |
|||
//************************************************************************// |
|||
$all-text-inputs-focus: assign-inputs($inputs-list, focus); |
|||
|
|||
|
|||
|
|||
// You must use interpolation on the variable: |
|||
// #{$all-text-inputs} |
|||
// #{$all-text-inputs-hover} |
|||
// #{$all-text-inputs-focus} |
|||
|
|||
// Example |
|||
//************************************************************************// |
|||
// #{$all-text-inputs}, textarea { |
|||
// border: 1px solid red; |
|||
// } |
|||
|
|||
|
|||
|
|||
//************************************************************************// |
|||
// Generate a variable ($all-button-inputs) with a list of all html5 |
|||
// input types that have a button-based input, excluding button. |
|||
//************************************************************************// |
|||
$inputs-button-list: 'input[type="button"]', |
|||
'input[type="reset"]', |
|||
'input[type="submit"]'; |
|||
|
|||
// Bare inputs |
|||
//************************************************************************// |
|||
$all-button-inputs: assign-inputs($inputs-button-list); |
|||
|
|||
// Hover Pseudo-class |
|||
//************************************************************************// |
|||
$all-button-inputs-hover: assign-inputs($inputs-button-list, hover); |
|||
|
|||
// Focus Pseudo-class |
|||
//************************************************************************// |
|||
$all-button-inputs-focus: assign-inputs($inputs-button-list, focus); |
|||
|
|||
// Active Pseudo-class |
|||
//************************************************************************// |
|||
$all-button-inputs-active: assign-inputs($inputs-button-list, active); |
|||
|
|||
|
|||
|
|||
// You must use interpolation on the variable: |
|||
// #{$all-button-inputs} |
|||
// #{$all-button-inputs-hover} |
|||
// #{$all-button-inputs-focus} |
|||
// #{$all-button-inputs-active} |
|||
|
|||
// Example |
|||
//************************************************************************// |
|||
// #{$all-button-inputs}, button { |
|||
// border: 1px solid red; |
|||
// } |
@ -1,32 +0,0 @@ |
|||
@mixin position ($position: relative, $coordinates: null null null null) { |
|||
|
|||
@if type-of($position) == list { |
|||
$coordinates: $position; |
|||
$position: relative; |
|||
} |
|||
|
|||
$coordinates: unpack($coordinates); |
|||
|
|||
$top: nth($coordinates, 1); |
|||
$right: nth($coordinates, 2); |
|||
$bottom: nth($coordinates, 3); |
|||
$left: nth($coordinates, 4); |
|||
|
|||
position: $position; |
|||
|
|||
@if ($top and $top == auto) or (type-of($top) == number) { |
|||
top: $top; |
|||
} |
|||
|
|||
@if ($right and $right == auto) or (type-of($right) == number) { |
|||
right: $right; |
|||
} |
|||
|
|||
@if ($bottom and $bottom == auto) or (type-of($bottom) == number) { |
|||
bottom: $bottom; |
|||
} |
|||
|
|||
@if ($left and $left == auto) or (type-of($left) == number) { |
|||
left: $left; |
|||
} |
|||
} |
@ -1,45 +0,0 @@ |
|||
//************************************************************************// |
|||
// Example: @include prefixer(border-radius, $radii, webkit ms spec); |
|||
//************************************************************************// |
|||
// Variables located in /settings/_prefixer.scss |
|||
|
|||
@mixin prefixer ($property, $value, $prefixes) { |
|||
@each $prefix in $prefixes { |
|||
@if $prefix == webkit { |
|||
@if $prefix-for-webkit { |
|||
-webkit-#{$property}: $value; |
|||
} |
|||
} |
|||
@else if $prefix == moz { |
|||
@if $prefix-for-mozilla { |
|||
-moz-#{$property}: $value; |
|||
} |
|||
} |
|||
@else if $prefix == ms { |
|||
@if $prefix-for-microsoft { |
|||
-ms-#{$property}: $value; |
|||
} |
|||
} |
|||
@else if $prefix == o { |
|||
@if $prefix-for-opera { |
|||
-o-#{$property}: $value; |
|||
} |
|||
} |
|||
@else if $prefix == spec { |
|||
@if $prefix-for-spec { |
|||
#{$property}: $value; |
|||
} |
|||
} |
|||
@else { |
|||
@warn "Unrecognized prefix: #{$prefix}"; |
|||
} |
|||
} |
|||
} |
|||
|
|||
@mixin disable-prefix-for-all() { |
|||
$prefix-for-webkit: false !global; |
|||
$prefix-for-mozilla: false !global; |
|||
$prefix-for-microsoft: false !global; |
|||
$prefix-for-opera: false !global; |
|||
$prefix-for-spec: false !global; |
|||
} |
@ -1,31 +0,0 @@ |
|||
@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) { |
|||
@if $asset-pipeline { |
|||
background-image: image-url("#{$filename}.#{$extension}"); |
|||
} |
|||
@else { |
|||
background-image: url("#{$filename}.#{$extension}"); |
|||
} |
|||
|
|||
@include hidpi { |
|||
@if $asset-pipeline { |
|||
@if $retina-filename { |
|||
background-image: image-url("#{$retina-filename}.#{$extension}"); |
|||
} |
|||
@else { |
|||
background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}"); |
|||
} |
|||
} |
|||
|
|||
@else { |
|||
@if $retina-filename { |
|||
background-image: url("#{$retina-filename}.#{$extension}"); |
|||
} |
|||
@else { |
|||
background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); |
|||
} |
|||
} |
|||
|
|||
background-size: $background-size; |
|||
|
|||
} |
|||
} |
@ -1,16 +0,0 @@ |
|||
@mixin size($size) { |
|||
$height: nth($size, 1); |
|||
$width: $height; |
|||
|
|||
@if length($size) > 1 { |
|||
$height: nth($size, 2); |
|||
} |
|||
|
|||
@if $height == auto or (type-of($height) == number and not unitless($height)) { |
|||
height: $height; |
|||
} |
|||
|
|||
@if $width == auto or (type-of($width) == number and not unitless($width)) { |
|||
width: $width; |
|||
} |
|||
} |
@ -1,32 +0,0 @@ |
|||
// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) |
|||
// Timing functions are the same as demo'ed here: http://jqueryui.com/resources/demos/effect/easing.html |
|||
|
|||
// EASE IN |
|||
$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); |
|||
$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); |
|||
$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); |
|||
$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); |
|||
$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); |
|||
$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); |
|||
$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); |
|||
$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); |
|||
|
|||
// EASE OUT |
|||
$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); |
|||
$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); |
|||
$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); |
|||
$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); |
|||
$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); |
|||
$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); |
|||
$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); |
|||
$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); |
|||
|
|||
// EASE IN OUT |
|||
$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); |
|||
$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); |
|||
$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); |
|||
$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); |
|||
$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); |
|||
$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); |
|||
$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); |
|||
$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); |
@ -1,83 +0,0 @@ |
|||
@mixin triangle ($size, $color, $direction) { |
|||
height: 0; |
|||
width: 0; |
|||
|
|||
$width: nth($size, 1); |
|||
$height: nth($size, length($size)); |
|||
|
|||
$foreground-color: nth($color, 1); |
|||
$background-color: if(length($color) == 2, nth($color, 2), transparent); |
|||
|
|||
@if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { |
|||
|
|||
$width: $width / 2; |
|||
$height: if(length($size) > 1, $height, $height/2); |
|||
|
|||
@if $direction == up { |
|||
border-left: $width solid $background-color; |
|||
border-right: $width solid $background-color; |
|||
border-bottom: $height solid $foreground-color; |
|||
|
|||
} @else if $direction == right { |
|||
border-top: $width solid $background-color; |
|||
border-bottom: $width solid $background-color; |
|||
border-left: $height solid $foreground-color; |
|||
|
|||
} @else if $direction == down { |
|||
border-left: $width solid $background-color; |
|||
border-right: $width solid $background-color; |
|||
border-top: $height solid $foreground-color; |
|||
|
|||
} @else if $direction == left { |
|||
border-top: $width solid $background-color; |
|||
border-bottom: $width solid $background-color; |
|||
border-right: $height solid $foreground-color; |
|||
} |
|||
} |
|||
|
|||
@else if ($direction == up-right) or ($direction == up-left) { |
|||
border-top: $height solid $foreground-color; |
|||
|
|||
@if $direction == up-right { |
|||
border-left: $width solid $background-color; |
|||
|
|||
} @else if $direction == up-left { |
|||
border-right: $width solid $background-color; |
|||
} |
|||
} |
|||
|
|||
@else if ($direction == down-right) or ($direction == down-left) { |
|||
border-bottom: $height solid $foreground-color; |
|||
|
|||
@if $direction == down-right { |
|||
border-left: $width solid $background-color; |
|||
|
|||
} @else if $direction == down-left { |
|||
border-right: $width solid $background-color; |
|||
} |
|||
} |
|||
|
|||
@else if ($direction == inset-up) { |
|||
border-width: $height $width; |
|||
border-style: solid; |
|||
border-color: $background-color $background-color $foreground-color; |
|||
} |
|||
|
|||
@else if ($direction == inset-down) { |
|||
border-width: $height $width; |
|||
border-style: solid; |
|||
border-color: $foreground-color $background-color $background-color; |
|||
} |
|||
|
|||
@else if ($direction == inset-right) { |
|||
border-width: $width $height; |
|||
border-style: solid; |
|||
border-color: $background-color $background-color $background-color $foreground-color; |
|||
} |
|||
|
|||
@else if ($direction == inset-left) { |
|||
border-width: $width $height; |
|||
border-style: solid; |
|||
border-color: $background-color $foreground-color $background-color $background-color; |
|||
} |
|||
} |
@ -1,8 +0,0 @@ |
|||
@mixin word-wrap($wrap: break-word) { |
|||
word-wrap: $wrap; |
|||
|
|||
@if $wrap == break-word { |
|||
overflow-wrap: break-word; |
|||
word-break: break-all; |
|||
} |
|||
} |
@ -1,52 +0,0 @@ |
|||
// http://www.w3.org/TR/css3-animations/#the-animation-name-property- |
|||
// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties. |
|||
|
|||
// Official animation shorthand property. |
|||
@mixin animation ($animations...) { |
|||
@include prefixer(animation, $animations, webkit moz spec); |
|||
} |
|||
|
|||
// Individual Animation Properties |
|||
@mixin animation-name ($names...) { |
|||
@include prefixer(animation-name, $names, webkit moz spec); |
|||
} |
|||
|
|||
|
|||
@mixin animation-duration ($times...) { |
|||
@include prefixer(animation-duration, $times, webkit moz spec); |
|||
} |
|||
|
|||
|
|||
@mixin animation-timing-function ($motions...) { |
|||
// ease | linear | ease-in | ease-out | ease-in-out |
|||
@include prefixer(animation-timing-function, $motions, webkit moz spec); |
|||
} |
|||
|
|||
|
|||
@mixin animation-iteration-count ($values...) { |
|||
// infinite | <number> |
|||
@include prefixer(animation-iteration-count, $values, webkit moz spec); |
|||
} |
|||
|
|||
|
|||
@mixin animation-direction ($directions...) { |
|||
// normal | alternate |
|||
@include prefixer(animation-direction, $directions, webkit moz spec); |
|||
} |
|||
|
|||
|
|||
@mixin animation-play-state ($states...) { |
|||
// running | paused |
|||
@include prefixer(animation-play-state, $states, webkit moz spec); |
|||
} |
|||
|
|||
|
|||
@mixin animation-delay ($times...) { |
|||
@include prefixer(animation-delay, $times, webkit moz spec); |
|||
} |
|||
|
|||
|
|||
@mixin animation-fill-mode ($modes...) { |
|||
// none | forwards | backwards | both |
|||
@include prefixer(animation-fill-mode, $modes, webkit moz spec); |
|||
} |
@ -1,3 +0,0 @@ |
|||
@mixin appearance ($value) { |
|||
@include prefixer(appearance, $value, webkit moz ms o spec); |
|||
} |
@ -1,6 +0,0 @@ |
|||
//************************************************************************// |
|||
// Backface-visibility mixin |
|||
//************************************************************************// |
|||
@mixin backface-visibility($visibility) { |
|||
@include prefixer(backface-visibility, $visibility, webkit spec); |
|||
} |
@ -1,42 +0,0 @@ |
|||
//************************************************************************// |
|||
// Background-image property for adding multiple background images with |
|||
// gradients, or for stringing multiple gradients together. |
|||
//************************************************************************// |
|||
|
|||
@mixin background-image($images...) { |
|||
$webkit-images: (); |
|||
$spec-images: (); |
|||
|
|||
@each $image in $images { |
|||
$webkit-image: (); |
|||
$spec-image: (); |
|||
|
|||
@if (type-of($image) == string) { |
|||
$url-str: str-slice($image, 0, 3); |
|||
$gradient-type: str-slice($image, 0, 6); |
|||
|
|||
@if $url-str == "url" { |
|||
$webkit-image: $image; |
|||
$spec-image: $image; |
|||
} |
|||
|
|||
@else if $gradient-type == "linear" { |
|||
$gradients: _linear-gradient-parser($image); |
|||
$webkit-image: map-get($gradients, webkit-image); |
|||
$spec-image: map-get($gradients, spec-image); |
|||
} |
|||
|
|||
@else if $gradient-type == "radial" { |
|||
$gradients: _radial-gradient-parser($image); |
|||
$webkit-image: map-get($gradients, webkit-image); |
|||
$spec-image: map-get($gradients, spec-image); |
|||
} |
|||
} |
|||
|
|||
$webkit-images: append($webkit-images, $webkit-image, comma); |
|||
$spec-images: append($spec-images, $spec-image, comma); |
|||
} |
|||
|
|||
background-image: $webkit-images; |
|||
background-image: $spec-images; |
|||
} |
@ -1,55 +0,0 @@ |
|||
//************************************************************************// |
|||
// Background property for adding multiple backgrounds using shorthand |
|||
// notation. |
|||
//************************************************************************// |
|||
|
|||
@mixin background($backgrounds...) { |
|||
$webkit-backgrounds: (); |
|||
$spec-backgrounds: (); |
|||
|
|||
@each $background in $backgrounds { |
|||
$webkit-background: (); |
|||
$spec-background: (); |
|||
$background-type: type-of($background); |
|||
|
|||
@if $background-type == string or list { |
|||
$background-str: if($background-type == list, nth($background, 1), $background); |
|||
|
|||
$url-str: str-slice($background-str, 0, 3); |
|||
$gradient-type: str-slice($background-str, 0, 6); |
|||
|
|||
@if $url-str == "url" { |
|||
$webkit-background: $background; |
|||
$spec-background: $background; |
|||
} |
|||
|
|||
@else if $gradient-type == "linear" { |
|||
$gradients: _linear-gradient-parser("#{$background}"); |
|||
$webkit-background: map-get($gradients, webkit-image); |
|||
$spec-background: map-get($gradients, spec-image); |
|||
} |
|||
|
|||
@else if $gradient-type == "radial" { |
|||
$gradients: _radial-gradient-parser("#{$background}"); |
|||
$webkit-background: map-get($gradients, webkit-image); |
|||
$spec-background: map-get($gradients, spec-image); |
|||
} |
|||
|
|||
@else { |
|||
$webkit-background: $background; |
|||
$spec-background: $background; |
|||
} |
|||
} |
|||
|
|||
@else { |
|||
$webkit-background: $background; |
|||
$spec-background: $background; |
|||
} |
|||
|
|||
$webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma); |
|||
$spec-backgrounds: append($spec-backgrounds, $spec-background, comma); |
|||
} |
|||
|
|||
background: $webkit-backgrounds; |
|||
background: $spec-backgrounds; |
|||
} |
@ -1,59 +0,0 @@ |
|||
@mixin border-image($borders...) { |
|||
$webkit-borders: (); |
|||
$spec-borders: (); |
|||
|
|||
@each $border in $borders { |
|||
$webkit-border: (); |
|||
$spec-border: (); |
|||
$border-type: type-of($border); |
|||
|
|||
@if $border-type == string or list { |
|||
$border-str: if($border-type == list, nth($border, 1), $border); |
|||
|
|||
$url-str: str-slice($border-str, 0, 3); |
|||
$gradient-type: str-slice($border-str, 0, 6); |
|||
|
|||
@if $url-str == "url" { |
|||
$webkit-border: $border; |
|||
$spec-border: $border; |
|||
} |
|||
|
|||
@else if $gradient-type == "linear" { |
|||
$gradients: _linear-gradient-parser("#{$border}"); |
|||
$webkit-border: map-get($gradients, webkit-image); |
|||
$spec-border: map-get($gradients, spec-image); |
|||
} |
|||
|
|||
@else if $gradient-type == "radial" { |
|||
$gradients: _radial-gradient-parser("#{$border}"); |
|||
$webkit-border: map-get($gradients, webkit-image); |
|||
$spec-border: map-get($gradients, spec-image); |
|||
} |
|||
|
|||
@else { |
|||
$webkit-border: $border; |
|||
$spec-border: $border; |
|||
} |
|||
} |
|||
|
|||
@else { |
|||
$webkit-border: $border; |
|||
$spec-border: $border; |
|||
} |
|||
|
|||
$webkit-borders: append($webkit-borders, $webkit-border, comma); |
|||
$spec-borders: append($spec-borders, $spec-border, comma); |
|||
} |
|||
|
|||
-webkit-border-image: $webkit-borders; |
|||
border-image: $spec-borders; |
|||
border-style: solid; |
|||
} |
|||
|
|||
//Examples: |
|||
// @include border-image(url("image.png")); |
|||
// @include border-image(url("image.png") 20 stretch); |
|||
// @include border-image(linear-gradient(45deg, orange, yellow)); |
|||
// @include border-image(linear-gradient(45deg, orange, yellow) stretch); |
|||
// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round); |
|||
// @include border-image(radial-gradient(top, cover, orange, yellow, orange)); |
@ -1,22 +0,0 @@ |
|||
//************************************************************************// |
|||
// Shorthand Border-radius mixins |
|||
//************************************************************************// |
|||
@mixin border-top-radius($radii) { |
|||
@include prefixer(border-top-left-radius, $radii, spec); |
|||
@include prefixer(border-top-right-radius, $radii, spec); |
|||
} |
|||
|
|||
@mixin border-bottom-radius($radii) { |
|||
@include prefixer(border-bottom-left-radius, $radii, spec); |
|||
@include prefixer(border-bottom-right-radius, $radii, spec); |
|||
} |
|||
|
|||
@mixin border-left-radius($radii) { |
|||
@include prefixer(border-top-left-radius, $radii, spec); |
|||
@include prefixer(border-bottom-left-radius, $radii, spec); |
|||
} |
|||
|
|||
@mixin border-right-radius($radii) { |
|||
@include prefixer(border-top-right-radius, $radii, spec); |
|||
@include prefixer(border-bottom-right-radius, $radii, spec); |
|||
} |
@ -1,4 +0,0 @@ |
|||
@mixin box-sizing ($box) { |
|||
// content-box | border-box | inherit |
|||
@include prefixer(box-sizing, $box, webkit moz spec); |
|||
} |
@ -1,4 +0,0 @@ |
|||
@mixin calc($property, $value) { |
|||
#{$property}: -webkit-calc(#{$value}); |
|||
#{$property}: calc(#{$value}); |
|||
} |
@ -1,47 +0,0 @@ |
|||
@mixin columns($arg: auto) { |
|||
// <column-count> || <column-width> |
|||
@include prefixer(columns, $arg, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-count($int: auto) { |
|||
// auto || integer |
|||
@include prefixer(column-count, $int, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-gap($length: normal) { |
|||
// normal || length |
|||
@include prefixer(column-gap, $length, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-fill($arg: auto) { |
|||
// auto || length |
|||
@include prefixer(column-fill, $arg, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-rule($arg) { |
|||
// <border-width> || <border-style> || <color> |
|||
@include prefixer(column-rule, $arg, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-rule-color($color) { |
|||
@include prefixer(column-rule-color, $color, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-rule-style($style: none) { |
|||
// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid |
|||
@include prefixer(column-rule-style, $style, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-rule-width ($width: none) { |
|||
@include prefixer(column-rule-width, $width, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-span($arg: none) { |
|||
// none || all |
|||
@include prefixer(column-span, $arg, webkit moz spec); |
|||
} |
|||
|
|||
@mixin column-width($length: auto) { |
|||
// auto || length |
|||
@include prefixer(column-width, $length, webkit moz spec); |
|||
} |
@ -1,5 +0,0 @@ |
|||
@mixin filter($function: none) { |
|||
// <filter-function> [<filter-function]* | none |
|||
@include prefixer(filter, $function, webkit spec); |
|||
} |
|||
|
@ -1,321 +0,0 @@ |
|||
// CSS3 Flexible Box Model and property defaults |
|||
|
|||
// Custom shorthand notation for flexbox |
|||
@mixin box($orient: inline-axis, $pack: start, $align: stretch) { |
|||
@include display-box; |
|||
@include box-orient($orient); |
|||
@include box-pack($pack); |
|||
@include box-align($align); |
|||
} |
|||
|
|||
@mixin display-box { |
|||
display: -webkit-box; |
|||
display: -moz-box; |
|||
display: -ms-flexbox; // IE 10 |
|||
display: box; |
|||
} |
|||
|
|||
@mixin box-orient($orient: inline-axis) { |
|||
// horizontal|vertical|inline-axis|block-axis|inherit |
|||
@include prefixer(box-orient, $orient, webkit moz spec); |
|||
} |
|||
|
|||
@mixin box-pack($pack: start) { |
|||
// start|end|center|justify |
|||
@include prefixer(box-pack, $pack, webkit moz spec); |
|||
-ms-flex-pack: $pack; // IE 10 |
|||
} |
|||
|
|||
@mixin box-align($align: stretch) { |
|||
// start|end|center|baseline|stretch |
|||
@include prefixer(box-align, $align, webkit moz spec); |
|||
-ms-flex-align: $align; // IE 10 |
|||
} |
|||
|
|||
@mixin box-direction($direction: normal) { |
|||
// normal|reverse|inherit |
|||
@include prefixer(box-direction, $direction, webkit moz spec); |
|||
-ms-flex-direction: $direction; // IE 10 |
|||
} |
|||
|
|||
@mixin box-lines($lines: single) { |
|||
// single|multiple |
|||
@include prefixer(box-lines, $lines, webkit moz spec); |
|||
} |
|||
|
|||
@mixin box-ordinal-group($int: 1) { |
|||
@include prefixer(box-ordinal-group, $int, webkit moz spec); |
|||
-ms-flex-order: $int; // IE 10 |
|||
} |
|||
|
|||
@mixin box-flex($value: 0.0) { |
|||
@include prefixer(box-flex, $value, webkit moz spec); |
|||
-ms-flex: $value; // IE 10 |
|||
} |
|||
|
|||
@mixin box-flex-group($int: 1) { |
|||
@include prefixer(box-flex-group, $int, webkit moz spec); |
|||
} |
|||
|
|||
// CSS3 Flexible Box Model and property defaults |
|||
// Unified attributes for 2009, 2011, and 2012 flavours. |
|||
|
|||
// 2009 - display (box | inline-box) |
|||
// 2011 - display (flexbox | inline-flexbox) |
|||
// 2012 - display (flex | inline-flex) |
|||
@mixin display($value) { |
|||
// flex | inline-flex |
|||
@if $value == "flex" { |
|||
// 2009 |
|||
display: -webkit-box; |
|||
display: -moz-box; |
|||
display: box; |
|||
|
|||
// 2012 |
|||
display: -webkit-flex; |
|||
display: -moz-flex; |
|||
display: -ms-flexbox; // 2011 (IE 10) |
|||
display: flex; |
|||
} |
|||
|
|||
@elseif $value == "inline-flex" { |
|||
display: -webkit-inline-box; |
|||
display: -moz-inline-box; |
|||
display: inline-box; |
|||
|
|||
display: -webkit-inline-flex; |
|||
display: -moz-inline-flex; |
|||
display: -ms-inline-flexbox; |
|||
display: inline-flex; |
|||
} |
|||
|
|||
@else { |
|||
display: $value; |
|||
} |
|||
} |
|||
|
|||
// 2009 - box-flex (integer) |
|||
// 2011 - flex (decimal | width decimal) |
|||
// 2012 - flex (integer integer width) |
|||
@mixin flex($value) { |
|||
|
|||
// Grab flex-grow for older browsers. |
|||
$flex-grow: nth($value, 1); |
|||
|
|||
// 2009 |
|||
@include prefixer(box-flex, $flex-grow, webkit moz spec); |
|||
|
|||
// 2011 (IE 10), 2012 |
|||
@include prefixer(flex, $value, webkit moz ms spec); |
|||
} |
|||
|
|||
// 2009 - box-orient ( horizontal | vertical | inline-axis | block-axis) |
|||
// - box-direction (normal | reverse) |
|||
// 2011 - flex-direction (row | row-reverse | column | column-reverse) |
|||
// 2012 - flex-direction (row | row-reverse | column | column-reverse) |
|||
@mixin flex-direction($value: row) { |
|||
|
|||
// Alt values. |
|||
$value-2009: $value; |
|||
$value-2011: $value; |
|||
$direction: "normal"; |
|||
|
|||
@if $value == row { |
|||
$value-2009: horizontal; |
|||
} |
|||
|
|||
@elseif $value == "row-reverse" { |
|||
$value-2009: horizontal; |
|||
$direction: reverse; |
|||
} |
|||
|
|||
@elseif $value == column { |
|||
$value-2009: vertical; |
|||
} |
|||
|
|||
@elseif $value == "column-reverse" { |
|||
$value-2009: vertical; |
|||
$direction: reverse; |
|||
} |
|||
|
|||
// 2009 |
|||
@include prefixer(box-orient, $value-2009, webkit moz spec); |
|||
@if $direction == "reverse" { |
|||
@include prefixer(box-direction, $direction, webkit moz spec); |
|||
} |
|||
|
|||
// 2012 |
|||
@include prefixer(flex-direction, $value, webkit moz spec); |
|||
|
|||
// 2011 (IE 10) |
|||
-ms-flex-direction: $value; |
|||
} |
|||
|
|||
// 2009 - box-lines (single | multiple) |
|||
// 2011 - flex-wrap (nowrap | wrap | wrap-reverse) |
|||
// 2012 - flex-wrap (nowrap | wrap | wrap-reverse) |
|||
@mixin flex-wrap($value: nowrap) { |
|||
|
|||
// Alt values. |
|||
$alt-value: $value; |
|||
@if $value == nowrap { |
|||
$alt-value: single; |
|||
} |
|||
|
|||
@elseif $value == wrap { |
|||
$alt-value: multiple; |
|||
} |
|||
|
|||
@elseif $value == "wrap-reverse" { |
|||
$alt-value: multiple; |
|||
} |
|||
|
|||
@include prefixer(box-lines, $alt-value, webkit moz spec); |
|||
@include prefixer(flex-wrap, $value, webkit moz ms spec); |
|||
} |
|||
|
|||
// 2009 - TODO: parse values into flex-direction/flex-wrap |
|||
// 2011 - TODO: parse values into flex-direction/flex-wrap |
|||
// 2012 - flex-flow (flex-direction || flex-wrap) |
|||
@mixin flex-flow($value) { |
|||
@include prefixer(flex-flow, $value, webkit moz spec); |
|||
} |
|||
|
|||
// 2009 - box-ordinal-group (integer) |
|||
// 2011 - flex-order (integer) |
|||
// 2012 - order (integer) |
|||
@mixin order($int: 0) { |
|||
// 2009 |
|||
@include prefixer(box-ordinal-group, $int, webkit moz spec); |
|||
|
|||
// 2012 |
|||
@include prefixer(order, $int, webkit moz spec); |
|||
|
|||
// 2011 (IE 10) |
|||
-ms-flex-order: $int; |
|||
} |
|||
|
|||
// 2012 - flex-grow (number) |
|||
@mixin flex-grow($number: 0) { |
|||
@include prefixer(flex-grow, $number, webkit moz spec); |
|||
-ms-flex-positive: $number; |
|||
} |
|||
|
|||
// 2012 - flex-shrink (number) |
|||
@mixin flex-shrink($number: 1) { |
|||
@include prefixer(flex-shrink, $number, webkit moz spec); |
|||
-ms-flex-negative: $number; |
|||
} |
|||
|
|||
// 2012 - flex-basis (number) |
|||
@mixin flex-basis($width: auto) { |
|||
@include prefixer(flex-basis, $width, webkit moz spec); |
|||
-ms-flex-preferred-size: $width; |
|||
} |
|||
|
|||
// 2009 - box-pack (start | end | center | justify) |
|||
// 2011 - flex-pack (start | end | center | justify) |
|||
// 2012 - justify-content (flex-start | flex-end | center | space-between | space-around) |
|||
@mixin justify-content ($value: flex-start) { |
|||
|
|||
// Alt values. |
|||
$alt-value: $value; |
|||
@if $value == "flex-start" { |
|||
$alt-value: start; |
|||
} |
|||
|
|||
@elseif $value == "flex-end" { |
|||
$alt-value: end; |
|||
} |
|||
|
|||
@elseif $value == "space-between" { |
|||
$alt-value: justify; |
|||
} |
|||
|
|||
@elseif $value == "space-around" { |
|||
$alt-value: center; |
|||
} |
|||
|
|||
// 2009 |
|||
@include prefixer(box-pack, $alt-value, webkit moz spec); |
|||
|
|||
// 2012 |
|||
@include prefixer(justify-content, $value, webkit moz ms o spec); |
|||
|
|||
// 2011 (IE 10) |
|||
-ms-flex-pack: $alt-value; |
|||
} |
|||
|
|||
// 2009 - box-align (start | end | center | baseline | stretch) |
|||
// 2011 - flex-align (start | end | center | baseline | stretch) |
|||
// 2012 - align-items (flex-start | flex-end | center | baseline | stretch) |
|||
@mixin align-items($value: stretch) { |
|||
|
|||
$alt-value: $value; |
|||
|
|||
@if $value == "flex-start" { |
|||
$alt-value: start; |
|||
} |
|||
|
|||
@elseif $value == "flex-end" { |
|||
$alt-value: end; |
|||
} |
|||
|
|||
// 2009 |
|||
@include prefixer(box-align, $alt-value, webkit moz spec); |
|||
|
|||
// 2012 |
|||
@include prefixer(align-items, $value, webkit moz ms o spec); |
|||
|
|||
// 2011 (IE 10) |
|||
-ms-flex-align: $alt-value; |
|||
} |
|||
|
|||
// 2011 - flex-item-align (auto | start | end | center | baseline | stretch) |
|||
// 2012 - align-self (auto | flex-start | flex-end | center | baseline | stretch) |
|||
@mixin align-self($value: auto) { |
|||
|
|||
$value-2011: $value; |
|||
@if $value == "flex-start" { |
|||
$value-2011: start; |
|||
} |
|||
|
|||
@elseif $value == "flex-end" { |
|||
$value-2011: end; |
|||
} |
|||
|
|||
// 2012 |
|||
@include prefixer(align-self, $value, webkit moz spec); |
|||
|
|||
// 2011 (IE 10) |
|||
-ms-flex-item-align: $value-2011; |
|||
} |
|||
|
|||
// 2011 - flex-line-pack (start | end | center | justify | distribute | stretch) |
|||
// 2012 - align-content (flex-start | flex-end | center | space-between | space-around | stretch) |
|||
@mixin align-content($value: stretch) { |
|||
|
|||
$value-2011: $value; |
|||
@if $value == "flex-start" { |
|||
$value-2011: start; |
|||
} |
|||
|
|||
@elseif $value == "flex-end" { |
|||
$value-2011: end; |
|||
} |
|||
|
|||
@elseif $value == "space-between" { |
|||
$value-2011: justify; |
|||
} |
|||
|
|||
@elseif $value == "space-around" { |
|||
$value-2011: distribute; |
|||
} |
|||
|
|||
// 2012 |
|||
@include prefixer(align-content, $value, webkit moz spec); |
|||
|
|||
// 2011 (IE 10) |
|||
-ms-flex-line-pack: $value-2011; |
|||
} |
|||
|
@ -1,23 +0,0 @@ |
|||
// Order of the includes matters, and it is: normal, bold, italic, bold+italic. |
|||
|
|||
@mixin font-face($font-family, $file-path, $weight: normal, $style: normal, $asset-pipeline: $asset-pipeline) { |
|||
@font-face { |
|||
font-family: $font-family; |
|||
font-weight: $weight; |
|||
font-style: $style; |
|||
|
|||
@if $asset-pipeline == true { |
|||
src: font-url('#{$file-path}.eot'); |
|||
src: font-url('#{$file-path}.eot?#iefix') format('embedded-opentype'), |
|||
font-url('#{$file-path}.woff') format('woff'), |
|||
font-url('#{$file-path}.ttf') format('truetype'), |
|||
font-url('#{$file-path}.svg##{$font-family}') format('svg'); |
|||
} @else { |
|||
src: url('#{$file-path}.eot'); |
|||
src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'), |
|||
url('#{$file-path}.woff') format('woff'), |
|||
url('#{$file-path}.ttf') format('truetype'), |
|||
url('#{$file-path}.svg##{$font-family}') format('svg'); |
|||
} |
|||
} |
|||
} |
@ -1,10 +0,0 @@ |
|||
// Font feature settings mixin and property default. |
|||
// Examples: @include font-feature-settings("liga"); |
|||
// @include font-feature-settings("lnum" false); |
|||
// @include font-feature-settings("pnum" 1, "kern" 0); |
|||
// @include font-feature-settings("ss01", "ss02"); |
|||
|
|||
@mixin font-feature-settings($settings...) { |
|||
@if length($settings) == 0 { $settings: none; } |
|||
@include prefixer(font-feature-settings, $settings, webkit moz ms spec); |
|||
} |
@ -1,10 +0,0 @@ |
|||
// HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/) |
|||
@mixin hidpi($ratio: 1.3) { |
|||
@media only screen and (-webkit-min-device-pixel-ratio: $ratio), |
|||
only screen and (min--moz-device-pixel-ratio: $ratio), |
|||
only screen and (-o-min-device-pixel-ratio: #{$ratio}/1), |
|||
only screen and (min-resolution: #{round($ratio*96)}dpi), |
|||
only screen and (min-resolution: #{$ratio}dppx) { |
|||
@content; |
|||
} |
|||
} |
@ -1,4 +0,0 @@ |
|||
@mixin hyphens($hyphenation: none) { |
|||
// none | manual | auto |
|||
@include prefixer(hyphens, $hyphenation, webkit moz ms spec); |
|||
} |
@ -1,14 +0,0 @@ |
|||
@mixin image-rendering ($mode:auto) { |
|||
|
|||
@if ($mode == crisp-edges) { |
|||
-ms-interpolation-mode: nearest-neighbor; // IE8+ |
|||
image-rendering: -moz-crisp-edges; |
|||
image-rendering: -o-crisp-edges; |
|||
image-rendering: -webkit-optimize-contrast; |
|||
image-rendering: crisp-edges; |
|||
} |
|||
|
|||
@else { |
|||
image-rendering: $mode; |
|||
} |
|||
} |
@ -1,35 +0,0 @@ |
|||
// Adds keyframes blocks for supported prefixes, removing redundant prefixes in the block's content |
|||
@mixin keyframes($name) { |
|||
$original-prefix-for-webkit: $prefix-for-webkit; |
|||
$original-prefix-for-mozilla: $prefix-for-mozilla; |
|||
$original-prefix-for-microsoft: $prefix-for-microsoft; |
|||
$original-prefix-for-opera: $prefix-for-opera; |
|||
$original-prefix-for-spec: $prefix-for-spec; |
|||
|
|||
@if $original-prefix-for-webkit { |
|||
@include disable-prefix-for-all(); |
|||
$prefix-for-webkit: true !global; |
|||
@-webkit-keyframes #{$name} { |
|||
@content; |
|||
} |
|||
} |
|||
@if $original-prefix-for-mozilla { |
|||
@include disable-prefix-for-all(); |
|||
$prefix-for-mozilla: true !global; |
|||
@-moz-keyframes #{$name} { |
|||
@content; |
|||
} |
|||
} |
|||
|
|||
$prefix-for-webkit: $original-prefix-for-webkit !global; |
|||
$prefix-for-mozilla: $original-prefix-for-mozilla !global; |
|||
$prefix-for-microsoft: $original-prefix-for-microsoft !global; |
|||
$prefix-for-opera: $original-prefix-for-opera !global; |
|||
$prefix-for-spec: $original-prefix-for-spec !global; |
|||
|
|||
@if $original-prefix-for-spec { |
|||
@keyframes #{$name} { |
|||
@content; |
|||
} |
|||
} |
|||
} |
@ -1,38 +0,0 @@ |
|||
@mixin linear-gradient($pos, $G1, $G2: null, |
|||
$G3: null, $G4: null, |
|||
$G5: null, $G6: null, |
|||
$G7: null, $G8: null, |
|||
$G9: null, $G10: null, |
|||
$fallback: null) { |
|||
// Detect what type of value exists in $pos |
|||
$pos-type: type-of(nth($pos, 1)); |
|||
$pos-spec: null; |
|||
$pos-degree: null; |
|||
|
|||
// If $pos is missing from mixin, reassign vars and add default position |
|||
@if ($pos-type == color) or (nth($pos, 1) == "transparent") { |
|||
$G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5; |
|||
$G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos; |
|||
$pos: null; |
|||
} |
|||
|
|||
@if $pos { |
|||
$positions: _linear-positions-parser($pos); |
|||
$pos-degree: nth($positions, 1); |
|||
$pos-spec: nth($positions, 2); |
|||
} |
|||
|
|||
$full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10; |
|||
|
|||
// Set $G1 as the default fallback color |
|||
$fallback-color: nth($G1, 1); |
|||
|
|||
// If $fallback is a color use that color as the fallback color |
|||
@if (type-of($fallback) == color) or ($fallback == "transparent") { |
|||
$fallback-color: $fallback; |
|||
} |
|||
|
|||
background-color: $fallback-color; |
|||
background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome |
|||
background-image: unquote("linear-gradient(#{$pos-spec}#{$full})"); |
|||
} |
@ -1,8 +0,0 @@ |
|||
@mixin perspective($depth: none) { |
|||
// none | <length> |
|||
@include prefixer(perspective, $depth, webkit moz spec); |
|||
} |
|||
|
|||
@mixin perspective-origin($value: 50% 50%) { |
|||
@include prefixer(perspective-origin, $value, webkit moz spec); |
|||
} |
@ -1,8 +0,0 @@ |
|||
@mixin placeholder { |
|||
$placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input"; |
|||
@each $placeholder in $placeholders { |
|||
&:#{$placeholder}-placeholder { |
|||
@content; |
|||
} |
|||
} |
|||
} |
@ -1,39 +0,0 @@ |
|||
// Requires Sass 3.1+ |
|||
@mixin radial-gradient($G1, $G2, |
|||
$G3: null, $G4: null, |
|||
$G5: null, $G6: null, |
|||
$G7: null, $G8: null, |
|||
$G9: null, $G10: null, |
|||
$pos: null, |
|||
$shape-size: null, |
|||
$fallback: null) { |
|||
|
|||
$data: _radial-arg-parser($G1, $G2, $pos, $shape-size); |
|||
$G1: nth($data, 1); |
|||
$G2: nth($data, 2); |
|||
$pos: nth($data, 3); |
|||
$shape-size: nth($data, 4); |
|||
|
|||
$full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10; |
|||
|
|||
// Strip deprecated cover/contain for spec |
|||
$shape-size-spec: _shape-size-stripper($shape-size); |
|||
|
|||
// Set $G1 as the default fallback color |
|||
$first-color: nth($full, 1); |
|||
$fallback-color: nth($first-color, 1); |
|||
|
|||
@if (type-of($fallback) == color) or ($fallback == "transparent") { |
|||
$fallback-color: $fallback; |
|||
} |
|||
|
|||
// Add Commas and spaces |
|||
$shape-size: if($shape-size, '#{$shape-size}, ', null); |
|||
$pos: if($pos, '#{$pos}, ', null); |
|||
$pos-spec: if($pos, 'at #{$pos}', null); |
|||
$shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} '); |
|||
|
|||
background-color: $fallback-color; |
|||
background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); |
|||
background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); |
|||
} |
@ -1,15 +0,0 @@ |
|||
@mixin transform($property: none) { |
|||
// none | <transform-function> |
|||
@include prefixer(transform, $property, webkit moz ms o spec); |
|||
} |
|||
|
|||
@mixin transform-origin($axes: 50%) { |
|||
// x-axis - left | center | right | length | % |
|||
// y-axis - top | center | bottom | length | % |
|||
// z-axis - length |
|||
@include prefixer(transform-origin, $axes, webkit moz ms o spec); |
|||
} |
|||
|
|||
@mixin transform-style ($style: flat) { |
|||
@include prefixer(transform-style, $style, webkit moz ms o spec); |
|||
} |
@ -1,77 +0,0 @@ |
|||
// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. |
|||
// Example: @include transition (all 2s ease-in-out); |
|||
// @include transition (opacity 1s ease-in 2s, width 2s ease-out); |
|||
// @include transition-property (transform, opacity); |
|||
|
|||
@mixin transition ($properties...) { |
|||
// Fix for vendor-prefix transform property |
|||
$needs-prefixes: false; |
|||
$webkit: (); |
|||
$moz: (); |
|||
$spec: (); |
|||
|
|||
// Create lists for vendor-prefixed transform |
|||
@each $list in $properties { |
|||
@if nth($list, 1) == "transform" { |
|||
$needs-prefixes: true; |
|||
$list1: -webkit-transform; |
|||
$list2: -moz-transform; |
|||
$list3: (); |
|||
|
|||
@each $var in $list { |
|||
$list3: join($list3, $var); |
|||
|
|||
@if $var != "transform" { |
|||
$list1: join($list1, $var); |
|||
$list2: join($list2, $var); |
|||
} |
|||
} |
|||
|
|||
$webkit: append($webkit, $list1); |
|||
$moz: append($moz, $list2); |
|||
$spec: append($spec, $list3); |
|||
} |
|||
|
|||
// Create lists for non-prefixed transition properties |
|||
@else { |
|||
$webkit: append($webkit, $list, comma); |
|||
$moz: append($moz, $list, comma); |
|||
$spec: append($spec, $list, comma); |
|||
} |
|||
} |
|||
|
|||
@if $needs-prefixes { |
|||
-webkit-transition: $webkit; |
|||
-moz-transition: $moz; |
|||
transition: $spec; |
|||
} |
|||
@else { |
|||
@if length($properties) >= 1 { |
|||
@include prefixer(transition, $properties, webkit moz spec); |
|||
} |
|||
|
|||
@else { |
|||
$properties: all 0.15s ease-out 0s; |
|||
@include prefixer(transition, $properties, webkit moz spec); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@mixin transition-property ($properties...) { |
|||
-webkit-transition-property: transition-property-names($properties, 'webkit'); |
|||
-moz-transition-property: transition-property-names($properties, 'moz'); |
|||
transition-property: transition-property-names($properties, false); |
|||
} |
|||
|
|||
@mixin transition-duration ($times...) { |
|||
@include prefixer(transition-duration, $times, webkit moz spec); |
|||
} |
|||
|
|||
@mixin transition-timing-function ($motions...) { |
|||
// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() |
|||
@include prefixer(transition-timing-function, $motions, webkit moz spec); |
|||
} |
|||
|
|||
@mixin transition-delay ($times...) { |
|||
@include prefixer(transition-delay, $times, webkit moz spec); |
|||
} |
@ -1,3 +0,0 @@ |
|||
@mixin user-select($arg: none) { |
|||
@include prefixer(user-select, $arg, webkit moz ms spec); |
|||
} |
@ -1,11 +0,0 @@ |
|||
@function assign-inputs($inputs, $pseudo: null) { |
|||
$list : (); |
|||
|
|||
@each $input in $inputs { |
|||
$input: unquote($input); |
|||
$input: if($pseudo, $input + ":" + $pseudo, $input); |
|||
$list: append($list, $input, comma); |
|||
} |
|||
|
|||
@return $list; |
|||
} |
@ -1,13 +0,0 @@ |
|||
// Programatically determines whether a color is light or dark |
|||
// Returns a boolean |
|||
// More details here http://robots.thoughtbot.com/closer-look-color-lightness |
|||
|
|||
@function is-light($hex-color) { |
|||
$-local-red: red(rgba($hex-color, 1.0)); |
|||
$-local-green: green(rgba($hex-color, 1.0)); |
|||
$-local-blue: blue(rgba($hex-color, 1.0)); |
|||
|
|||
$-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; |
|||
|
|||
@return $-local-lightness > .6; |
|||
} |
@ -1,39 +0,0 @@ |
|||
// Flexible grid |
|||
@function flex-grid($columns, $container-columns: $fg-max-columns) { |
|||
$width: $columns * $fg-column + ($columns - 1) * $fg-gutter; |
|||
$container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; |
|||
@return percentage($width / $container-width); |
|||
} |
|||
|
|||
// Flexible gutter |
|||
@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { |
|||
$container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; |
|||
@return percentage($gutter / $container-width); |
|||
} |
|||
|
|||
// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function. |
|||
// This function takes the fluid grid equation (target / context = result) and uses columns to help define each. |
|||
// |
|||
// The calculation presumes that your column structure will be missing the last gutter: |
|||
// |
|||
// -- column -- gutter -- column -- gutter -- column |
|||
// |
|||
// $fg-column: 60px; // Column Width |
|||
// $fg-gutter: 25px; // Gutter Width |
|||
// $fg-max-columns: 12; // Total Columns For Main Container |
|||
// |
|||
// div { |
|||
// width: flex-grid(4); // returns (315px / 995px) = 31.65829%; |
|||
// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%; |
|||
// |
|||
// p { |
|||
// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; |
|||
// float: left; |
|||
// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%; |
|||
// } |
|||
// |
|||
// blockquote { |
|||
// float: left; |
|||
// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; |
|||
// } |
|||
// } |
@ -1,3 +0,0 @@ |
|||
@function golden-ratio($value, $increment) { |
|||
@return modular-scale($value, $increment, $golden) |
|||
} |
@ -1,13 +0,0 @@ |
|||
@function grid-width($n) { |
|||
@return $n * $gw-column + ($n - 1) * $gw-gutter; |
|||
} |
|||
|
|||
// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function. |
|||
// |
|||
// $gw-column: 100px; // Column Width |
|||
// $gw-gutter: 40px; // Gutter Width |
|||
// |
|||
// div { |
|||
// width: grid-width(4); // returns 520px; |
|||
// margin-left: $gw-gutter; // returns 40px; |
|||
// } |
@ -1,66 +0,0 @@ |
|||
// Scaling Variables |
|||
$golden: 1.618; |
|||
$minor-second: 1.067; |
|||
$major-second: 1.125; |
|||
$minor-third: 1.2; |
|||
$major-third: 1.25; |
|||
$perfect-fourth: 1.333; |
|||
$augmented-fourth: 1.414; |
|||
$perfect-fifth: 1.5; |
|||
$minor-sixth: 1.6; |
|||
$major-sixth: 1.667; |
|||
$minor-seventh: 1.778; |
|||
$major-seventh: 1.875; |
|||
$octave: 2; |
|||
$major-tenth: 2.5; |
|||
$major-eleventh: 2.667; |
|||
$major-twelfth: 3; |
|||
$double-octave: 4; |
|||
|
|||
@function modular-scale($value, $increment, $ratio) { |
|||
$v1: nth($value, 1); |
|||
$v2: nth($value, length($value)); |
|||
$value: $v1; |
|||
|
|||
// scale $v2 to just above $v1 |
|||
@while $v2 > $v1 { |
|||
$v2: ($v2 / $ratio); // will be off-by-1 |
|||
} |
|||
@while $v2 < $v1 { |
|||
$v2: ($v2 * $ratio); // will fix off-by-1 |
|||
} |
|||
|
|||
// check AFTER scaling $v2 to prevent double-counting corner-case |
|||
$double-stranded: $v2 > $v1; |
|||
|
|||
@if $increment > 0 { |
|||
@for $i from 1 through $increment { |
|||
@if $double-stranded and ($v1 * $ratio) > $v2 { |
|||
$value: $v2; |
|||
$v2: ($v2 * $ratio); |
|||
} @else { |
|||
$v1: ($v1 * $ratio); |
|||
$value: $v1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
@if $increment < 0 { |
|||
// adjust $v2 to just below $v1 |
|||
@if $double-stranded { |
|||
$v2: ($v2 / $ratio); |
|||
} |
|||
|
|||
@for $i from $increment through -1 { |
|||
@if $double-stranded and ($v1 / $ratio) < $v2 { |
|||
$value: $v2; |
|||
$v2: ($v2 / $ratio); |
|||
} @else { |
|||
$v1: ($v1 / $ratio); |
|||
$value: $v1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
@return $value; |
|||
} |
@ -1,13 +0,0 @@ |
|||
// Convert pixels to ems |
|||
// eg. for a relational value of 12px write em(12) when the parent is 16px |
|||
// if the parent is another value say 24px write em(12, 24) |
|||
|
|||
@function em($pxval, $base: $em-base) { |
|||
@if not unitless($pxval) { |
|||
$pxval: strip-units($pxval); |
|||
} |
|||
@if not unitless($base) { |
|||
$base: strip-units($base); |
|||
} |
|||
@return ($pxval / $base) * 1em; |
|||
} |
@ -1,15 +0,0 @@ |
|||
// Convert pixels to rems |
|||
// eg. for a relational value of 12px write rem(12) |
|||
// Assumes $em-base is the font-size of <html> |
|||
|
|||
@function rem($pxval) { |
|||
@if not unitless($pxval) { |
|||
$pxval: strip-units($pxval); |
|||
} |
|||
|
|||
$base: $em-base; |
|||
@if not unitless($base) { |
|||
$base: strip-units($base); |
|||
} |
|||
@return ($pxval / $base) * 1rem; |
|||
} |
@ -1,5 +0,0 @@ |
|||
// Srtips the units from a value. e.g. 12px -> 12 |
|||
|
|||
@function strip-units($val) { |
|||
@return ($val / ($val * 0 + 1)); |
|||
} |
@ -1,9 +0,0 @@ |
|||
// Add percentage of white to a color |
|||
@function tint($color, $percent){ |
|||
@return mix(white, $color, $percent); |
|||
} |
|||
|
|||
// Add percentage of black to a color |
|||
@function shade($color, $percent){ |
|||
@return mix(black, $color, $percent); |
|||
} |
@ -1,22 +0,0 @@ |
|||
// Return vendor-prefixed property names if appropriate |
|||
// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background |
|||
//************************************************************************// |
|||
@function transition-property-names($props, $vendor: false) { |
|||
$new-props: (); |
|||
|
|||
@each $prop in $props { |
|||
$new-props: append($new-props, transition-property-name($prop, $vendor), comma); |
|||
} |
|||
|
|||
@return $new-props; |
|||
} |
|||
|
|||
@function transition-property-name($prop, $vendor: false) { |
|||
// put other properties that need to be prefixed here aswell |
|||
@if $vendor and $prop == transform { |
|||
@return unquote('-'+$vendor+'-'+$prop); |
|||
} |
|||
@else { |
|||
@return $prop; |
|||
} |
|||
} |
@ -1,17 +0,0 @@ |
|||
// Convert shorthand to the 4-value syntax |
|||
|
|||
@function unpack($shorthand) { |
|||
@if length($shorthand) == 1 { |
|||
@return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); |
|||
} |
|||
@else if length($shorthand) == 2 { |
|||
@return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); |
|||
} |
|||
@else if length($shorthand) == 3 { |
|||
@return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); |
|||
} |
|||
@else { |
|||
@return $shorthand; |
|||
} |
|||
} |
|||
|
@ -1,15 +0,0 @@ |
|||
//************************************************************************// |
|||
// Helper function for str-to-num fn. |
|||
// Source: http://sassmeister.com/gist/9647408 |
|||
//************************************************************************// |
|||
@function _convert-units($number, $unit) { |
|||
$strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn'; |
|||
$units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn; |
|||
$index: index($strings, $unit); |
|||
|
|||
@if not $index { |
|||
@warn "Unknown unit `#{$unit}`."; |
|||
@return false; |
|||
} |
|||
@return $number * nth($units, $index); |
|||
} |
@ -1,13 +0,0 @@ |
|||
@function _gradient-positions-parser($gradient-type, $gradient-positions) { |
|||
@if $gradient-positions |
|||
and ($gradient-type == linear) |
|||
and (type-of($gradient-positions) != color) { |
|||
$gradient-positions: _linear-positions-parser($gradient-positions); |
|||
} |
|||
@else if $gradient-positions |
|||
and ($gradient-type == radial) |
|||
and (type-of($gradient-positions) != color) { |
|||
$gradient-positions: _radial-positions-parser($gradient-positions); |
|||
} |
|||
@return $gradient-positions; |
|||
} |
@ -1,8 +0,0 @@ |
|||
//************************************************************************// |
|||
// Helper for linear-gradient-parser |
|||
//************************************************************************// |
|||
@function _is-num($char) { |
|||
$values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9; |
|||
$index: index($values, $char); |
|||
@return if($index, true, false); |
|||
} |
@ -1,25 +0,0 @@ |
|||
// Private function for linear-gradient-parser |
|||
@function _linear-angle-parser($image, $first-val, $prefix, $suffix) { |
|||
$offset: null; |
|||
$unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val)); |
|||
$unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val)); |
|||
|
|||
@if ($unit-long == "grad") or |
|||
($unit-long == "turn") { |
|||
$offset: if($unit-long == "grad", -100grad * 3, -0.75turn); |
|||
} |
|||
|
|||
@else if ($unit-short == "deg") or |
|||
($unit-short == "rad") { |
|||
$offset: if($unit-short == "deg", -90 * 3, 1.6rad); |
|||
} |
|||
|
|||
@if $offset { |
|||
$num: _str-to-num($first-val); |
|||
|
|||
@return ( |
|||
webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix, |
|||
spec-image: $image |
|||
); |
|||
} |
|||
} |
@ -1,41 +0,0 @@ |
|||
@function _linear-gradient-parser($image) { |
|||
$image: unquote($image); |
|||
$gradients: (); |
|||
$start: str-index($image, "("); |
|||
$end: str-index($image, ","); |
|||
$first-val: str-slice($image, $start + 1, $end - 1); |
|||
|
|||
$prefix: str-slice($image, 0, $start); |
|||
$suffix: str-slice($image, $end, str-length($image)); |
|||
|
|||
$has-multiple-vals: str-index($first-val, " "); |
|||
$has-single-position: unquote(_position-flipper($first-val) + ""); |
|||
$has-angle: _is-num(str-slice($first-val, 0, 0)); |
|||
|
|||
@if $has-multiple-vals { |
|||
$gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals); |
|||
} |
|||
|
|||
@else if $has-single-position != "" { |
|||
$pos: unquote($has-single-position + ""); |
|||
|
|||
$gradients: ( |
|||
webkit-image: -webkit- + $image, |
|||
spec-image: $prefix + "to " + $pos + $suffix |
|||
); |
|||
} |
|||
|
|||
@else if $has-angle { |
|||
// Rotate degree for webkit |
|||
$gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix); |
|||
} |
|||
|
|||
@else { |
|||
$gradients: ( |
|||
webkit-image: -webkit- + $image, |
|||
spec-image: $image |
|||
); |
|||
} |
|||
|
|||
@return $gradients; |
|||
} |
@ -1,61 +0,0 @@ |
|||
@function _linear-positions-parser($pos) { |
|||
$type: type-of(nth($pos, 1)); |
|||
$spec: null; |
|||
$degree: null; |
|||
$side: null; |
|||
$corner: null; |
|||
$length: length($pos); |
|||
// Parse Side and corner positions |
|||
@if ($length > 1) { |
|||
@if nth($pos, 1) == "to" { // Newer syntax |
|||
$side: nth($pos, 2); |
|||
|
|||
@if $length == 2 { // eg. to top |
|||
// Swap for backwards compatibility |
|||
$degree: _position-flipper(nth($pos, 2)); |
|||
} |
|||
@else if $length == 3 { // eg. to top left |
|||
$corner: nth($pos, 3); |
|||
} |
|||
} |
|||
@else if $length == 2 { // Older syntax ("top left") |
|||
$side: _position-flipper(nth($pos, 1)); |
|||
$corner: _position-flipper(nth($pos, 2)); |
|||
} |
|||
|
|||
@if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") { |
|||
$degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); |
|||
} |
|||
@else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") { |
|||
$degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); |
|||
} |
|||
@else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") { |
|||
$degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); |
|||
} |
|||
@else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") { |
|||
$degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); |
|||
} |
|||
$spec: to $side $corner; |
|||
} |
|||
@else if $length == 1 { |
|||
// Swap for backwards compatibility |
|||
@if $type == string { |
|||
$degree: $pos; |
|||
$spec: to _position-flipper($pos); |
|||
} |
|||
@else { |
|||
$degree: -270 - $pos; //rotate the gradient opposite from spec |
|||
$spec: $pos; |
|||
} |
|||
} |
|||
$degree: unquote($degree + ","); |
|||
$spec: unquote($spec + ","); |
|||
@return $degree $spec; |
|||
} |
|||
|
|||
@function _position-flipper($pos) { |
|||
@return if($pos == left, right, null) |
|||
if($pos == right, left, null) |
|||
if($pos == top, bottom, null) |
|||
if($pos == bottom, top, null); |
|||
} |
@ -1,31 +0,0 @@ |
|||
// Private function for linear-gradient-parser |
|||
@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) { |
|||
$val-1: str-slice($first-val, 0, $has-multiple-vals - 1 ); |
|||
$val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val)); |
|||
$val-3: null; |
|||
$has-val-3: str-index($val-2, " "); |
|||
|
|||
@if $has-val-3 { |
|||
$val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2)); |
|||
$val-2: str-slice($val-2, 0, $has-val-3 - 1); |
|||
} |
|||
|
|||
$pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3); |
|||
$pos: unquote($pos + ""); |
|||
|
|||
// Use old spec for webkit |
|||
@if $val-1 == "to" { |
|||
@return ( |
|||
webkit-image: -webkit- + $prefix + $pos + $suffix, |
|||
spec-image: $image |
|||
); |
|||
} |
|||
|
|||
// Bring the code up to spec |
|||
@else { |
|||
@return ( |
|||
webkit-image: -webkit- + $image, |
|||
spec-image: $prefix + "to " + $pos + $suffix |
|||
); |
|||
} |
|||
} |
@ -1,69 +0,0 @@ |
|||
@function _radial-arg-parser($G1, $G2, $pos, $shape-size) { |
|||
@each $value in $G1, $G2 { |
|||
$first-val: nth($value, 1); |
|||
$pos-type: type-of($first-val); |
|||
$spec-at-index: null; |
|||
|
|||
// Determine if spec was passed to mixin |
|||
@if type-of($value) == list { |
|||
$spec-at-index: if(index($value, at), index($value, at), false); |
|||
} |
|||
@if $spec-at-index { |
|||
@if $spec-at-index > 1 { |
|||
@for $i from 1 through ($spec-at-index - 1) { |
|||
$shape-size: $shape-size nth($value, $i); |
|||
} |
|||
@for $i from ($spec-at-index + 1) through length($value) { |
|||
$pos: $pos nth($value, $i); |
|||
} |
|||
} |
|||
@else if $spec-at-index == 1 { |
|||
@for $i from ($spec-at-index + 1) through length($value) { |
|||
$pos: $pos nth($value, $i); |
|||
} |
|||
} |
|||
$G1: null; |
|||
} |
|||
|
|||
// If not spec calculate correct values |
|||
@else { |
|||
@if ($pos-type != color) or ($first-val != "transparent") { |
|||
@if ($pos-type == number) |
|||
or ($first-val == "center") |
|||
or ($first-val == "top") |
|||
or ($first-val == "right") |
|||
or ($first-val == "bottom") |
|||
or ($first-val == "left") { |
|||
|
|||
$pos: $value; |
|||
|
|||
@if $pos == $G1 { |
|||
$G1: null; |
|||
} |
|||
} |
|||
|
|||
@else if |
|||
($first-val == "ellipse") |
|||
or ($first-val == "circle") |
|||
or ($first-val == "closest-side") |
|||
or ($first-val == "closest-corner") |
|||
or ($first-val == "farthest-side") |
|||
or ($first-val == "farthest-corner") |
|||
or ($first-val == "contain") |
|||
or ($first-val == "cover") { |
|||
|
|||
$shape-size: $value; |
|||
|
|||
@if $value == $G1 { |
|||
$G1: null; |
|||
} |
|||
|
|||
@else if $value == $G2 { |
|||
$G2: null; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@return $G1, $G2, $pos, $shape-size; |
|||
} |
@ -1,50 +0,0 @@ |
|||
@function _radial-gradient-parser($image) { |
|||
$image: unquote($image); |
|||
$gradients: (); |
|||
$start: str-index($image, "("); |
|||
$end: str-index($image, ","); |
|||
$first-val: str-slice($image, $start + 1, $end - 1); |
|||
|
|||
$prefix: str-slice($image, 0, $start); |
|||
$suffix: str-slice($image, $end, str-length($image)); |
|||
|
|||
$is-spec-syntax: str-index($first-val, "at"); |
|||
|
|||
@if $is-spec-syntax and $is-spec-syntax > 1 { |
|||
$keyword: str-slice($first-val, 1, $is-spec-syntax - 2); |
|||
$pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); |
|||
$pos: append($pos, $keyword, comma); |
|||
|
|||
$gradients: ( |
|||
webkit-image: -webkit- + $prefix + $pos + $suffix, |
|||
spec-image: $image |
|||
) |
|||
} |
|||
|
|||
@else if $is-spec-syntax == 1 { |
|||
$pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); |
|||
|
|||
$gradients: ( |
|||
webkit-image: -webkit- + $prefix + $pos + $suffix, |
|||
spec-image: $image |
|||
) |
|||
} |
|||
|
|||
@else if str-index($image, "cover") or str-index($image, "contain") { |
|||
@warn "Radial-gradient needs to be updated to conform to latest spec."; |
|||
|
|||
$gradients: ( |
|||
webkit-image: null, |
|||
spec-image: $image |
|||
) |
|||
} |
|||
|
|||
@else { |
|||
$gradients: ( |
|||
webkit-image: -webkit- + $image, |
|||
spec-image: $image |
|||
) |
|||
} |
|||
|
|||
@return $gradients; |
|||
} |
@ -1,18 +0,0 @@ |
|||
@function _radial-positions-parser($gradient-pos) { |
|||
$shape-size: nth($gradient-pos, 1); |
|||
$pos: nth($gradient-pos, 2); |
|||
$shape-size-spec: _shape-size-stripper($shape-size); |
|||
|
|||
$pre-spec: unquote(if($pos, "#{$pos}, ", null)) |
|||
unquote(if($shape-size, "#{$shape-size},", null)); |
|||
$pos-spec: if($pos, "at #{$pos}", null); |
|||
|
|||
$spec: "#{$shape-size-spec} #{$pos-spec}"; |
|||
|
|||
// Add comma |
|||
@if ($spec != ' ') { |
|||
$spec: "#{$spec}," |
|||
} |
|||
|
|||
@return $pre-spec $spec; |
|||
} |
@ -1,26 +0,0 @@ |
|||
// User for linear and radial gradients within background-image or border-image properties |
|||
|
|||
@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) { |
|||
$pre-spec: null; |
|||
$spec: null; |
|||
$vendor-gradients: null; |
|||
@if $gradient-type == linear { |
|||
@if $gradient-positions { |
|||
$pre-spec: nth($gradient-positions, 1); |
|||
$spec: nth($gradient-positions, 2); |
|||
} |
|||
} |
|||
@else if $gradient-type == radial { |
|||
$pre-spec: nth($gradient-positions, 1); |
|||
$spec: nth($gradient-positions, 2); |
|||
} |
|||
|
|||
@if $vendor { |
|||
$vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients); |
|||
} |
|||
@else if $vendor == false { |
|||
$vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})"; |
|||
$vendor-gradients: unquote($vendor-gradients); |
|||
} |
|||
@return $vendor-gradients; |
|||
} |
@ -1,10 +0,0 @@ |
|||
@function _shape-size-stripper($shape-size) { |
|||
$shape-size-spec: null; |
|||
@each $value in $shape-size { |
|||
@if ($value == "cover") or ($value == "contain") { |
|||
$value: null; |
|||
} |
|||
$shape-size-spec: "#{$shape-size-spec} #{$value}"; |
|||
} |
|||
@return $shape-size-spec; |
|||
} |
@ -1,50 +0,0 @@ |
|||
//************************************************************************// |
|||
// Helper function for linear/radial-gradient-parsers. |
|||
// Source: http://sassmeister.com/gist/9647408 |
|||
//************************************************************************// |
|||
@function _str-to-num($string) { |
|||
// Matrices |
|||
$strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; |
|||
$numbers: 0 1 2 3 4 5 6 7 8 9; |
|||
|
|||
// Result |
|||
$result: 0; |
|||
$divider: 0; |
|||
$minus: false; |
|||
|
|||
// Looping through all characters |
|||
@for $i from 1 through str-length($string) { |
|||
$character: str-slice($string, $i, $i); |
|||
$index: index($strings, $character); |
|||
|
|||
@if $character == '-' { |
|||
$minus: true; |
|||
} |
|||
|
|||
@else if $character == '.' { |
|||
$divider: 1; |
|||
} |
|||
|
|||
@else { |
|||
@if not $index { |
|||
$result: if($minus, $result * -1, $result); |
|||
@return _convert-units($result, str-slice($string, $i)); |
|||
} |
|||
|
|||
$number: nth($numbers, $index); |
|||
|
|||
@if $divider == 0 { |
|||
$result: $result * 10; |
|||
} |
|||
|
|||
@else { |
|||
// Move the decimal dot to the left |
|||
$divider: $divider * 10; |
|||
$number: $number / $divider; |
|||
} |
|||
|
|||
$result: $result + $number; |
|||
} |
|||
} |
|||
@return if($minus, $result * -1, $result); |
|||
} |
@ -1 +0,0 @@ |
|||
$asset-pipeline: false !default; |
@ -1,6 +0,0 @@ |
|||
// Variable settings for /addons/prefixer.scss |
|||
$prefix-for-webkit: true !default; |
|||
$prefix-for-mozilla: true !default; |
|||
$prefix-for-microsoft: true !default; |
|||
$prefix-for-opera: true !default; |
|||
$prefix-for-spec: true !default; // required for keyframe mixin |
@ -1 +0,0 @@ |
|||
$em-base: 16px !default; |
@ -1,10 +0,0 @@ |
|||
- title: Contributing |
|||
items: |
|||
- id: how-to-contribute |
|||
title: How to Contribute |
|||
- id: codebase-overview |
|||
title: Codebase Overview |
|||
- id: implementation-notes |
|||
title: Implementation Notes |
|||
- id: design-principles |
|||
title: Design Principles |
@ -1,32 +0,0 @@ |
|||
{% assign page = include.page %} |
|||
|
|||
<h1> |
|||
{% if include.isPermalink %} |
|||
{{ page.title }} |
|||
{% else %} |
|||
<a href="/react{{ page.url }}">{{ page.title }}</a> |
|||
{% endif %} |
|||
</h1> |
|||
|
|||
<p class="meta"> |
|||
{{ page.date | date: "%B %e, %Y" }} |
|||
by |
|||
{% for author in page.authors %} |
|||
{% if author.url %} |
|||
<a href="{{author.url}}">{{ author.name }}</a> |
|||
{% else %} |
|||
{{ author.name }} |
|||
{% endif %} |
|||
{% if forloop.last == false %} and {% endif %} |
|||
{% endfor %} |
|||
</p> |
|||
|
|||
<hr> |
|||
|
|||
<div class="post"> |
|||
{{ include.content }} |
|||
</div> |
|||
|
|||
{% if include.isPermalink %} |
|||
<div class="fb-like" data-send="true" data-width="650" data-show-faces="false"></div> |
|||
{% endif %} |
@ -1,41 +0,0 @@ |
|||
<footer class="nav-footer"> |
|||
<section class="sitemap"> |
|||
<a href="/react/" class="nav-home"> |
|||
</a> |
|||
<div> |
|||
<h5><a href="/react/docs/">Docs</a></h5> |
|||
<a href="/react/docs/hello-world.html">Quick Start</a> |
|||
<a href="/react/docs/thinking-in-react.html">Thinking in React</a> |
|||
<a href="/react/tutorial/tutorial.html">Tutorial</a> |
|||
<a href="/react/docs/jsx-in-depth.html">Advanced Guides</a> |
|||
</div> |
|||
<div> |
|||
<h5><a href="/react/community/support.html">Community</a></h5> |
|||
<a href="http://stackoverflow.com/questions/tagged/reactjs" target="_blank">Stack Overflow</a> |
|||
<a href="https://discuss.reactjs.org/" target="_blank">Discussion Forum</a> |
|||
<a href="https://discord.gg/0ZcbPKXt5bZjGY5n" target="_blank">Reactiflux Chat</a> |
|||
<a href="https://www.facebook.com/react" target="_blank">Facebook</a> |
|||
<a href="https://twitter.com/reactjs" target="_blank">Twitter</a> |
|||
</div> |
|||
<div> |
|||
<h5><a href="/react/community/support.html">Resources</a></h5> |
|||
<a href="/react/community/conferences.html">Conferences</a> |
|||
<a href="/react/community/videos.html">Videos</a> |
|||
<a href="https://github.com/facebook/react/wiki/Examples" target="_blank">Examples</a> |
|||
<a href="https://github.com/facebook/react/wiki/Complementary-Tools" target="_blank">Complementary Tools</a> |
|||
</div> |
|||
<div> |
|||
<h5>More</h5> |
|||
<a href="/react/blog/">Blog</a> |
|||
<a href="https://github.com/facebook/react" target="_blank">GitHub</a> |
|||
<a href="http://facebook.github.io/react-native/" target="_blank">React Native</a> |
|||
<a href="/react/acknowledgements.html">Acknowledgements</a> |
|||
</div> |
|||
</section> |
|||
<a href="https://code.facebook.com/projects/" target="_blank" class="fbOpenSource"> |
|||
<img src="/react/img/oss_logo.png" alt="Facebook Open Source" width="170" height="45"/> |
|||
</a> |
|||
<section class="copyright"> |
|||
Copyright © {{ site.time | date: '%Y' }} Facebook Inc. |
|||
</section> |
|||
</footer> |
@ -1,13 +0,0 @@ |
|||
<div class="hero"> |
|||
<div class="wrap"> |
|||
<div class="text"><strong>React</strong></div> |
|||
<div class="minitext"> |
|||
A JavaScript library for building user interfaces |
|||
</div> |
|||
|
|||
<div class="buttons-unit"> |
|||
<a href="/react/docs/hello-world.html" class="button">Get Started</a> |
|||
<a href="/react/tutorial/tutorial.html" class="button">Take the Tutorial</a> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -1,11 +0,0 @@ |
|||
<div class="nav-docs nav-blog"> |
|||
<div class="nav-docs-section"> |
|||
<h3>Recent posts</h3> |
|||
<ul> |
|||
{% for post in site.posts limit:10 %} |
|||
<li><a href="/react{{ post.url }}"{% if page.title == post.title %} class="active"{% endif %}>{{ post.title }}</a></li> |
|||
{% endfor %} |
|||
<li><a href="/react/blog/all.html">All posts ...</a></li> |
|||
</ul> |
|||
</div> |
|||
</div> |
@ -1,24 +0,0 @@ |
|||
<div class="nav-docs"> |
|||
<!-- Community Nav --> |
|||
{% for section in site.data.nav_community %} |
|||
<div class="nav-docs-section"> |
|||
<h3>{{ section.title }}</h3> |
|||
<ul> |
|||
{% for item in section.items %} |
|||
<li> |
|||
{{ item | community_sidebar_link }} |
|||
{% if item.subitems %} |
|||
<ul> |
|||
{% for subitem in item.subitems %} |
|||
<li> |
|||
{{ subitem | community_sidebar_link }} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
{% endif %} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</div> |
|||
{% endfor %} |
|||
</div> |
@ -1,39 +0,0 @@ |
|||
<div class="nav-docs"> |
|||
<!-- Docs Nav --> |
|||
{% for section in site.data.nav_docs %} |
|||
<div class="nav-docs-section"> |
|||
<h3>{{ section.title }}</h3> |
|||
<ul> |
|||
{% for item in section.items %} |
|||
<li> |
|||
{{ item | docs_sidebar_link}} |
|||
{% if item.subitems %} |
|||
<ul> |
|||
{% for subitem in item.subitems %} |
|||
<li> |
|||
{{ subitem | docs_sidebar_link }} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
{% endif %} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</div> |
|||
{% endfor %} |
|||
|
|||
<!-- Contributing Nav --> |
|||
{% for section in site.data.nav_contributing %} |
|||
<div class="nav-docs-section"> |
|||
<h3>{{ section.title }}</h3> |
|||
<ul> |
|||
{% for item in section.items %} |
|||
<li> |
|||
<a href="/react/contributing/{{ item.id }}.html"{% if page.id == item.id %} class="active"{% endif %}>{{ item.title }}</a> |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</div> |
|||
{% endfor %} |
|||
|
|||
</div> |
@ -1,24 +0,0 @@ |
|||
<div class="nav-docs"> |
|||
<!-- Tutorial Nav --> |
|||
{% for section in site.data.nav_tutorial %} |
|||
<div class="nav-docs-section"> |
|||
<h3>{{ section.title }}</h3> |
|||
<ul> |
|||
{% for item in section.items %} |
|||
<li> |
|||
{{ item | tutorial_sidebar_link }} |
|||
{% if item.subitems %} |
|||
<ul> |
|||
{% for subitem in item.subitems %} |
|||
<li> |
|||
{{ subitem | tutorial_sidebar_link }} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
{% endif %} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</div> |
|||
{% endfor %} |
|||
</div> |
@ -1,23 +0,0 @@ |
|||
<div class="nav-main"> |
|||
<div class="wrap"> |
|||
<a class="nav-home" href="/react/"> |
|||
<img class="nav-logo" src="/react/img/logo.svg" width="36" height="36"> |
|||
React |
|||
</a> |
|||
<div class="nav-lists"> |
|||
<ul class="nav-site nav-site-internal"> |
|||
<li><a href="/react/docs/hello-world.html"{% if page.sectionid == 'docs' or page.sectionid == 'tips' or page.sectionid == 'contributing' %} class="active"{% endif %}>Docs</a></li> |
|||
<li><a href="/react/tutorial/tutorial.html"{% if page.sectionid == 'tutorial' %} class="active"{% endif %}>Tutorial</a></li> |
|||
<li><a href="/react/community/support.html"{% if page.sectionid == 'community' %} class="active"{% endif %}>Community</a></li> |
|||
<li><a href="/react/blog/"{% if page.sectionid == 'blog' %} class="active"{% endif %}>Blog</a></li> |
|||
<li class="nav-site-search"> |
|||
<input id="algolia-doc-search" type="text" placeholder="Search docs..." /> |
|||
</li> |
|||
</ul> |
|||
<ul class="nav-site nav-site-external"> |
|||
<li><a href="https://github.com/facebook/react">GitHub</a></li> |
|||
<li><a href="https://github.com/facebook/react/releases">v{{site.react_version}}</a></li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -1,109 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2013-present, Facebook, Inc. |
|||
* |
|||
* This source code is licensed under the MIT license found in the |
|||
* LICENSE file in the root directory of this source tree. |
|||
*/ |
|||
/* global React ReactDOM errorMap:true */ |
|||
'use strict'; |
|||
|
|||
function replaceArgs(msg, argList) { |
|||
let argIdx = 0; |
|||
return msg.replace(/%s/g, function() { |
|||
const arg = argList[argIdx++]; |
|||
return arg === undefined ? '[missing argument]' : arg; |
|||
}); |
|||
} |
|||
|
|||
function urlify(str) { |
|||
const urlRegex = /(https:\/\/fb\.me\/[a-z\-]+)/g; |
|||
|
|||
const segments = str.split(urlRegex); |
|||
|
|||
for (let i = 0; i < segments.length; i++) { |
|||
if (i % 2 === 1) { |
|||
segments[i] = (<a key={i} target="_blank" href={segments[i]}>{segments[i]}</a>); |
|||
} |
|||
} |
|||
|
|||
return segments; |
|||
} |
|||
|
|||
// ?invariant=123&args[]=foo&args[]=bar
|
|||
function parseQueryString() { |
|||
const rawQueryString = window.location.search.substring(1); |
|||
if (!rawQueryString) { |
|||
return null; |
|||
} |
|||
|
|||
let code = ''; |
|||
let args = []; |
|||
|
|||
const queries = rawQueryString.split('&'); |
|||
for (let i = 0; i < queries.length; i++) { |
|||
const query = decodeURIComponent(queries[i]); |
|||
if (query.indexOf('invariant=') === 0) { |
|||
code = query.slice(10); |
|||
} else if (query.indexOf('args[]=') === 0) { |
|||
args.push(query.slice(7)); |
|||
} |
|||
} |
|||
|
|||
return [code, args]; |
|||
} |
|||
|
|||
function ErrorResult(props) { |
|||
const code = props.code; |
|||
const errorMsg = props.msg; |
|||
|
|||
if (!code) { |
|||
return ( |
|||
<p>When you encounter an error, you'll receive a link to this page for that specific error and we'll show you the full error text.</p> |
|||
); |
|||
} |
|||
|
|||
return ( |
|||
<div> |
|||
<p>The full text of the error you just encountered is:</p> |
|||
<code>{urlify(errorMsg)}</code> |
|||
</div> |
|||
); |
|||
} |
|||
|
|||
class ErrorDecoder extends React.Component { |
|||
constructor(...args) { |
|||
super(...args); |
|||
|
|||
this.state = { |
|||
code: null, |
|||
errorMsg: '', |
|||
}; |
|||
} |
|||
|
|||
componentWillMount() { |
|||
const parseResult = parseQueryString(); |
|||
if (parseResult != null) { |
|||
const [code, args] = parseResult; |
|||
if (errorMap[code]) { |
|||
this.setState({ |
|||
code: code, |
|||
errorMsg: replaceArgs(errorMap[code], args), |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
|
|||
render() { |
|||
return ( |
|||
<ErrorResult |
|||
code={this.state.code} |
|||
msg={this.state.errorMsg} |
|||
/> |
|||
); |
|||
} |
|||
} |
|||
|
|||
ReactDOM.render( |
|||
<ErrorDecoder />, |
|||
document.querySelector('.error-decoder-container') |
|||
); |
@ -1,30 +0,0 @@ |
|||
// Add anchors to headings client-side, which prevents them from showing up
|
|||
// in RSS feeds. See https://github.com/facebook/react/issues/4124.
|
|||
(function() { |
|||
var selector = '.inner-content h2, .inner-content h3, .inner-content h4'; |
|||
var elements = document.querySelectorAll(selector); |
|||
for (var i = 0; i < elements.length; i++) { |
|||
var textMethod = document.body.textContent ? "textContent" : "innerText"; |
|||
var roughText = elements[i][textMethod]; |
|||
|
|||
// Regex rule for making the title URL-friendly.
|
|||
var urlFriendlyText = roughText.trim() |
|||
.toLowerCase() |
|||
.replace(/\s+/g, '-') |
|||
.replace(/[^A-Za-z0-9\-_.\p{Cyrillic}\p{Hangul}\p{Hiragana}\p{Katakana}\p{Han}]/g, ''); |
|||
|
|||
// Create the anchor we'll jump to.
|
|||
var anchor = document.createElement('a'); |
|||
anchor.className = 'anchor'; |
|||
anchor.name = urlFriendlyText; |
|||
elements[i].insertBefore(anchor, elements[i].firstChild); |
|||
|
|||
// Create the clickable "#" icon.
|
|||
var hashLink = document.createElement('a'); |
|||
var icon = document.createTextNode("#"); |
|||
hashLink.appendChild(icon); |
|||
hashLink.className = 'hash-link'; |
|||
hashLink.href = '#' + urlFriendlyText; |
|||
elements[i].appendChild(hashLink); |
|||
} |
|||
}()); |
@ -1,7 +0,0 @@ |
|||
--- |
|||
rules: |
|||
block-scoped-var: 0 |
|||
no-undef: 0 |
|||
strict: 0 |
|||
react/react-in-jsx-scope: 0 |
|||
react/jsx-no-undef: 0 |
@ -1,15 +0,0 @@ |
|||
var name = Math.random() > 0.5 ? 'Jane' : 'John'; |
|||
var HELLO_COMPONENT = ` |
|||
class HelloMessage extends React.Component { |
|||
render() { |
|||
return <div>Hello {this.props.name}</div>; |
|||
} |
|||
} |
|||
|
|||
ReactDOM.render(<HelloMessage name="${name}" />, mountNode); |
|||
`.trim();
|
|||
|
|||
ReactDOM.render( |
|||
<ReactPlayground codeText={HELLO_COMPONENT} />, |
|||
document.getElementById('helloExample') |
|||
); |
@ -1,42 +0,0 @@ |
|||
var MARKDOWN_COMPONENT = ` |
|||
class MarkdownEditor extends React.Component { |
|||
constructor(props) { |
|||
super(props); |
|||
this.handleChange = this.handleChange.bind(this); |
|||
this.state = {value: 'Type some *markdown* here!'}; |
|||
} |
|||
|
|||
handleChange(e) { |
|||
this.setState({value: e.target.value}); |
|||
} |
|||
|
|||
getRawMarkup() { |
|||
var md = new Remarkable(); |
|||
return { __html: md.render(this.state.value) }; |
|||
} |
|||
|
|||
render() { |
|||
return ( |
|||
<div className="MarkdownEditor"> |
|||
<h3>Input</h3> |
|||
<textarea |
|||
onChange={this.handleChange} |
|||
defaultValue={this.state.value} |
|||
/> |
|||
<h3>Output</h3> |
|||
<div |
|||
className="content" |
|||
dangerouslySetInnerHTML={this.getRawMarkup()} |
|||
/> |
|||
</div> |
|||
); |
|||
} |
|||
} |
|||
|
|||
ReactDOM.render(<MarkdownEditor />, mountNode); |
|||
`.trim();
|
|||
|
|||
ReactDOM.render( |
|||
<ReactPlayground codeText={MARKDOWN_COMPONENT} />, |
|||
document.getElementById('markdownExample') |
|||
); |
@ -1,35 +0,0 @@ |
|||
var TIMER_COMPONENT = ` |
|||
class Timer extends React.Component { |
|||
constructor(props) { |
|||
super(props); |
|||
this.state = {secondsElapsed: 0}; |
|||
} |
|||
|
|||
tick() { |
|||
this.setState((prevState) => ({ |
|||
secondsElapsed: prevState.secondsElapsed + 1 |
|||
})); |
|||
} |
|||
|
|||
componentDidMount() { |
|||
this.interval = setInterval(() => this.tick(), 1000); |
|||
} |
|||
|
|||
componentWillUnmount() { |
|||
clearInterval(this.interval); |
|||
} |
|||
|
|||
render() { |
|||
return ( |
|||
<div>Seconds Elapsed: {this.state.secondsElapsed}</div> |
|||
); |
|||
} |
|||
} |
|||
|
|||
ReactDOM.render(<Timer />, mountNode); |
|||
`.trim();
|
|||
|
|||
ReactDOM.render( |
|||
<ReactPlayground codeText={TIMER_COMPONENT} />, |
|||
document.getElementById('timerExample') |
|||
); |
@ -1,61 +0,0 @@ |
|||
var TODO_COMPONENT = ` |
|||
class TodoApp extends React.Component { |
|||
constructor(props) { |
|||
super(props); |
|||
this.handleChange = this.handleChange.bind(this); |
|||
this.handleSubmit = this.handleSubmit.bind(this); |
|||
this.state = {items: [], text: ''}; |
|||
} |
|||
|
|||
render() { |
|||
return ( |
|||
<div> |
|||
<h3>TODO</h3> |
|||
<TodoList items={this.state.items} /> |
|||
<form onSubmit={this.handleSubmit}> |
|||
<input onChange={this.handleChange} value={this.state.text} /> |
|||
<button>{'Add #' + (this.state.items.length + 1)}</button> |
|||
</form> |
|||
</div> |
|||
); |
|||
} |
|||
|
|||
handleChange(e) { |
|||
this.setState({text: e.target.value}); |
|||
} |
|||
|
|||
handleSubmit(e) { |
|||
e.preventDefault(); |
|||
if (!this.state.text.length) { |
|||
return; |
|||
} |
|||
var newItem = { |
|||
text: this.state.text, |
|||
id: Date.now() |
|||
}; |
|||
this.setState((prevState) => ({ |
|||
items: prevState.items.concat(newItem), |
|||
text: '' |
|||
})); |
|||
} |
|||
} |
|||
|
|||
class TodoList extends React.Component { |
|||
render() { |
|||
return ( |
|||
<ul> |
|||
{this.props.items.map(item => ( |
|||
<li key={item.id}>{item.text}</li> |
|||
))} |
|||
</ul> |
|||
); |
|||
} |
|||
} |
|||
|
|||
ReactDOM.render(<TodoApp />, mountNode); |
|||
`.trim();
|
|||
|
|||
ReactDOM.render( |
|||
<ReactPlayground codeText={TODO_COMPONENT} />, |
|||
document.getElementById('todoExample') |
|||
); |
@ -1,7 +0,0 @@ |
|||
// Ideally it would be nice to just redirect, but GitHub Pages is very basic and
|
|||
// lacks that functionality.
|
|||
console.warn( |
|||
'html-jsx-lib.js has moved to http://reactjs.github.io/react-magic/' + |
|||
'htmltojsx.min.js. If using React-Magic, you are no longer required to ' + |
|||
'link to this file. Please delete its <script> tag.' |
|||
); |
@ -1,10 +0,0 @@ |
|||
(function() { |
|||
var tag = document.querySelector( |
|||
'script[type="application/javascript;version=1.7"]' |
|||
); |
|||
if (!tag || tag.textContent.indexOf('window.onload=function(){') !== -1) { |
|||
alert('Bad JSFiddle configuration, please fork the original React JSFiddle'); |
|||
} |
|||
tag.setAttribute('type', 'text/jsx;harmony=true'); |
|||
tag.textContent = tag.textContent.replace(/^\/\/<!\[CDATA\[/, ''); |
|||
})(); |
@ -1,234 +0,0 @@ |
|||
var IS_MOBILE = ( |
|||
navigator.userAgent.match(/Android/i) |
|||
|| navigator.userAgent.match(/webOS/i) |
|||
|| navigator.userAgent.match(/iPhone/i) |
|||
|| navigator.userAgent.match(/iPad/i) |
|||
|| navigator.userAgent.match(/iPod/i) |
|||
|| navigator.userAgent.match(/BlackBerry/i) |
|||
|| navigator.userAgent.match(/Windows Phone/i) |
|||
); |
|||
|
|||
var CodeMirrorEditor = createReactClass({ |
|||
propTypes: { |
|||
lineNumbers: PropTypes.bool, |
|||
onChange: PropTypes.func, |
|||
}, |
|||
getDefaultProps: function() { |
|||
return { |
|||
lineNumbers: false, |
|||
}; |
|||
}, |
|||
componentDidMount: function() { |
|||
if (IS_MOBILE) return; |
|||
|
|||
this.editor = CodeMirror.fromTextArea(this.refs.editor, { |
|||
mode: 'jsx', |
|||
lineNumbers: this.props.lineNumbers, |
|||
lineWrapping: true, |
|||
smartIndent: false, // javascript mode does bad things with jsx indents
|
|||
matchBrackets: true, |
|||
theme: 'solarized-light', |
|||
readOnly: this.props.readOnly, |
|||
}); |
|||
this.editor.on('change', this.handleChange); |
|||
}, |
|||
|
|||
componentDidUpdate: function() { |
|||
if (this.props.readOnly) { |
|||
this.editor.setValue(this.props.codeText); |
|||
} |
|||
}, |
|||
|
|||
handleChange: function() { |
|||
if (!this.props.readOnly) { |
|||
this.props.onChange && this.props.onChange(this.editor.getValue()); |
|||
} |
|||
}, |
|||
|
|||
render: function() { |
|||
// wrap in a div to fully contain CodeMirror
|
|||
var editor; |
|||
|
|||
if (IS_MOBILE) { |
|||
editor = <pre style={{overflow: 'scroll'}}>{this.props.codeText}</pre>; |
|||
} else { |
|||
editor = <textarea ref="editor" defaultValue={this.props.codeText} />; |
|||
} |
|||
|
|||
return ( |
|||
<div style={this.props.style} className={this.props.className}> |
|||
{editor} |
|||
</div> |
|||
); |
|||
}, |
|||
}); |
|||
|
|||
var selfCleaningTimeout = { |
|||
componentDidUpdate: function() { |
|||
clearTimeout(this.timeoutID); |
|||
}, |
|||
|
|||
setTimeout: function() { |
|||
clearTimeout(this.timeoutID); |
|||
this.timeoutID = setTimeout.apply(null, arguments); |
|||
}, |
|||
}; |
|||
|
|||
var ReactPlayground = createReactClass({ |
|||
mixins: [selfCleaningTimeout], |
|||
|
|||
MODES: {JSX: 'JSX', JS: 'JS'}, //keyMirror({JSX: true, JS: true}),
|
|||
|
|||
propTypes: { |
|||
codeText: PropTypes.string.isRequired, |
|||
transformer: PropTypes.func, |
|||
renderCode: PropTypes.bool, |
|||
showCompiledJSTab: PropTypes.bool, |
|||
showLineNumbers: PropTypes.bool, |
|||
editorTabTitle: PropTypes.string, |
|||
}, |
|||
|
|||
getDefaultProps: function() { |
|||
return { |
|||
transformer: function(code, options) { |
|||
var presets = ['react']; |
|||
if (!options || !options.skipES2015Transform) { |
|||
presets.push('es2015'); |
|||
} |
|||
return Babel.transform(code, { |
|||
presets |
|||
}).code; |
|||
}, |
|||
editorTabTitle: 'Live JSX Editor', |
|||
showCompiledJSTab: true, |
|||
showLineNumbers: false, |
|||
}; |
|||
}, |
|||
|
|||
getInitialState: function() { |
|||
return { |
|||
mode: this.MODES.JSX, |
|||
code: this.props.codeText, |
|||
}; |
|||
}, |
|||
|
|||
handleCodeChange: function(value) { |
|||
this.setState({code: value}); |
|||
this.executeCode(); |
|||
}, |
|||
|
|||
handleCodeModeSwitch: function(mode) { |
|||
this.setState({mode: mode}); |
|||
}, |
|||
|
|||
compileCode: function(options) { |
|||
return this.props.transformer(this.state.code, options); |
|||
}, |
|||
|
|||
render: function() { |
|||
var isJS = this.state.mode === this.MODES.JS; |
|||
var compiledCode = ''; |
|||
try { |
|||
compiledCode = this.compileCode({skipES2015Transform: true}); |
|||
} catch (err) {} |
|||
|
|||
var JSContent = |
|||
<CodeMirrorEditor |
|||
key="js" |
|||
className="playgroundStage CodeMirror-readonly" |
|||
onChange={this.handleCodeChange} |
|||
codeText={compiledCode} |
|||
readOnly={true} |
|||
lineNumbers={this.props.showLineNumbers} |
|||
/>; |
|||
|
|||
var JSXContent = |
|||
<CodeMirrorEditor |
|||
key="jsx" |
|||
onChange={this.handleCodeChange} |
|||
className="playgroundStage" |
|||
codeText={this.state.code} |
|||
lineNumbers={this.props.showLineNumbers} |
|||
/>; |
|||
|
|||
var JSXTabClassName = |
|||
'playground-tab' + (isJS ? '' : ' playground-tab-active'); |
|||
var JSTabClassName = |
|||
'playground-tab' + (isJS ? ' playground-tab-active' : ''); |
|||
|
|||
var JSTab = |
|||
<div |
|||
className={JSTabClassName} |
|||
onClick={this.handleCodeModeSwitch.bind(this, this.MODES.JS)}> |
|||
Compiled JS |
|||
</div>; |
|||
|
|||
var JSXTab = |
|||
<div |
|||
className={JSXTabClassName} |
|||
onClick={this.handleCodeModeSwitch.bind(this, this.MODES.JSX)}> |
|||
{this.props.editorTabTitle} |
|||
</div> |
|||
|
|||
return ( |
|||
<div className="playground"> |
|||
<div> |
|||
{JSXTab} |
|||
{this.props.showCompiledJSTab && JSTab} |
|||
</div> |
|||
<div className="playgroundCode"> |
|||
{isJS ? JSContent : JSXContent} |
|||
</div> |
|||
<div className="playgroundPreview"> |
|||
<div ref="mount" /> |
|||
</div> |
|||
</div> |
|||
); |
|||
}, |
|||
|
|||
componentDidMount: function() { |
|||
this.executeCode(); |
|||
}, |
|||
|
|||
componentDidUpdate: function(prevProps, prevState) { |
|||
// execute code only when the state's not being updated by switching tab
|
|||
// this avoids re-displaying the error, which comes after a certain delay
|
|||
if (this.props.transformer !== prevProps.transformer || |
|||
this.state.code !== prevState.code) { |
|||
this.executeCode(); |
|||
} |
|||
}, |
|||
|
|||
executeCode: function() { |
|||
var mountNode = this.refs.mount; |
|||
|
|||
try { |
|||
ReactDOM.unmountComponentAtNode(mountNode); |
|||
} catch (e) { } |
|||
|
|||
try { |
|||
var compiledCode; |
|||
if (this.props.renderCode) { |
|||
compiledCode = this.compileCode({skipES2015Transform: true}); |
|||
ReactDOM.render( |
|||
<CodeMirrorEditor codeText={compiledCode} readOnly={true} />, |
|||
mountNode |
|||
); |
|||
} else { |
|||
compiledCode = this.compileCode({skipES2015Transform: false}); |
|||
eval(compiledCode); |
|||
} |
|||
} catch (err) { |
|||
// Babel errors are preformatted, runtime errors are not.
|
|||
const errorMessage = err._babel ? |
|||
<pre style={{overflowX: 'auto'}} className="playgroundError">{err.toString()}</pre> : |
|||
<div className="playgroundError">{err.toString()}</div>; |
|||
this.setTimeout(function() { |
|||
ReactDOM.render( |
|||
errorMessage, |
|||
mountNode |
|||
); |
|||
}, 500); |
|||
} |
|||
}, |
|||
}); |
@ -1,29 +0,0 @@ |
|||
--- |
|||
layout: default |
|||
sectionid: community |
|||
--- |
|||
|
|||
<section class="content wrap communityContent"> |
|||
<div class="inner-content"> |
|||
<a class="edit-page-link" |
|||
href="https://github.com/facebook/react/tree/master/docs/{{ page.path }}" |
|||
target="_blank">Edit on GitHub</a> |
|||
<h1> |
|||
{{ page.title }} |
|||
</h1> |
|||
<div class="subHeader">{{ page.description }}</div> |
|||
|
|||
{{ content }} |
|||
|
|||
<div class="docs-prevnext"> |
|||
{% if page.prev %} |
|||
<a class="docs-prev" href="/react/community/{{ page.prev }}">← Prev</a> |
|||
{% endif %} |
|||
{% if page.next %} |
|||
<a class="docs-next" href="/react/community/{{ page.next }}">Next →</a> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
|
|||
{% include nav_community.html %} |
|||
</section> |
@ -1,23 +0,0 @@ |
|||
--- |
|||
layout: default |
|||
sectionid: contributing |
|||
--- |
|||
|
|||
<section class="content wrap documentationContent"> |
|||
<div class="inner-content"> |
|||
<h1>{{ page.title }}</h1> |
|||
<div class="subHeader">{{ page.description }}</div> |
|||
{{ content }} |
|||
|
|||
<div class="docs-prevnext"> |
|||
{% if page.prev %} |
|||
<a class="docs-prev" href="/react/contributing/{{ page.prev }}">← Prev</a> |
|||
{% endif %} |
|||
{% if page.next %} |
|||
<a class="docs-next" href="/react/contributing/{{ page.next }}">Next →</a> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
|
|||
{% include nav_docs.html %} |
|||
</section> |
@ -1,96 +0,0 @@ |
|||
{% if page.excerpt %} |
|||
{% assign type = 'article' %} |
|||
{% assign sectionTitle = 'React Blog' %} |
|||
{% assign description = page.excerpt | strip_html %} |
|||
{% else %} |
|||
{% assign type = 'website' %} |
|||
{% assign sectionTitle = 'React' %} |
|||
{% assign description = 'A JavaScript library for building user interfaces' %} |
|||
{% endif %} |
|||
{% if page.id == 'home' %} |
|||
{% assign title = sectionTitle | append: ' - ' | append: page.title %} |
|||
{% else %} |
|||
{% assign title = page.title | append: ' - ' | append: sectionTitle %} |
|||
{% endif %} |
|||
<!DOCTYPE html> |
|||
<!--[if IE]><![endif]--> |
|||
<html> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
|||
<title>{{ title }}</title> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<meta property="og:title" content="{{ title }}"> |
|||
<meta property="og:type" content="{{ type }}"> |
|||
<meta property="og:url" content="https://reactjs.org/{{ page.url }}"> |
|||
<meta property="og:image" content="https://reactjs.org/logo-og.png"> |
|||
<meta property="og:description" content="{{ description }}"> |
|||
<meta property="fb:app_id" content="623268441017527"> |
|||
|
|||
<link rel="shortcut icon" href="/react/favicon.ico"> |
|||
<link rel="alternate" type="application/rss+xml" title="{{ site.name }}" href="{{ site.url }}{{ site.baseurl }}/feed.xml"> |
|||
|
|||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css" /> |
|||
<link rel="stylesheet" href="/react/css/syntax.css"> |
|||
<link rel="stylesheet" href="/react/css/codemirror.css"> |
|||
<link rel="stylesheet" href="/react/css/react.css"> |
|||
|
|||
<script src="//use.typekit.net/vqa1hcx.js"></script> |
|||
<script>try{Typekit.load();}catch(e){}</script> |
|||
|
|||
<!--[if lte IE 8]> |
|||
<script src="https://unpkg.com/html5shiv@3.7.3/dist/html5shiv.min.js"></script> |
|||
<script src="https://unpkg.com/es5-shim@4.5.9/es5-shim.min.js"></script> |
|||
<script src="https://unpkg.com/es5-shim@4.5.9/es5-sham.min.js"></script> |
|||
<![endif]--> |
|||
<script src="https://unpkg.com/docsearch.js@1.5.0/dist/cdn/docsearch.min.js"></script> |
|||
<script src="https://unpkg.com/codemirror@5.15.2"></script> |
|||
<script src="https://unpkg.com/codemirror@5.15.2/mode/javascript/javascript.js"></script> |
|||
<script src="https://unpkg.com/codemirror@5.15.2/mode/xml/xml.js"></script> |
|||
<script src="https://unpkg.com/codemirror@5.15.2/mode/jsx/jsx.js"></script> |
|||
<script src="https://unpkg.com/prop-types/prop-types.min.js"></script> |
|||
<script src="https://unpkg.com/react/umd/react.production.min.js"></script> |
|||
<script src="https://unpkg.com/react-dom/umd/react-dom.production.min.js"></script> |
|||
<script src="https://unpkg.com/create-react-class/create-react-class.min.js"></script> |
|||
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script> |
|||
<script src="/react/js/live_editor.js"></script> |
|||
</head> |
|||
<body> |
|||
|
|||
<div class="container"> |
|||
|
|||
{% include navigation.html %} |
|||
|
|||
{{ content }} |
|||
|
|||
{% include footer.html %} |
|||
</div> |
|||
|
|||
<div id="fb-root"></div> |
|||
<script src="/react/js/anchor-links.js"></script> |
|||
<script> |
|||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ |
|||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), |
|||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) |
|||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); |
|||
ga('create', 'UA-41298772-1', 'facebook.github.io'); |
|||
ga('send', 'pageview'); |
|||
|
|||
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); |
|||
|
|||
(function(d, s, id) { |
|||
var js, fjs = d.getElementsByTagName(s)[0]; |
|||
if (d.getElementById(id)) return; |
|||
js = d.createElement(s); js.id = id; |
|||
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.6&appId=623268441017527"; |
|||
fjs.parentNode.insertBefore(js, fjs); |
|||
}(document, 'script', 'facebook-jssdk')); |
|||
|
|||
docsearch({ |
|||
apiKey: '36221914cce388c46d0420343e0bb32e', |
|||
indexName: 'react', |
|||
inputSelector: '#algolia-doc-search' |
|||
}); |
|||
</script> |
|||
</body> |
|||
</html> |
@ -1,27 +0,0 @@ |
|||
--- |
|||
layout: default |
|||
sectionid: docs |
|||
--- |
|||
|
|||
<section class="content wrap documentationContent"> |
|||
<div class="inner-content"> |
|||
<a class="edit-page-link" href="https://github.com/facebook/react/tree/master/docs/{{ page.path }}" target="_blank">Edit on GitHub</a> |
|||
<h1> |
|||
{{ page.title }} |
|||
</h1> |
|||
<div class="subHeader">{{ page.description }}</div> |
|||
|
|||
{{ content }} |
|||
|
|||
<div class="docs-prevnext"> |
|||
{% if page.prev %} |
|||
<a class="docs-prev" href="/react/docs/{{ page.prev }}">← Prev</a> |
|||
{% endif %} |
|||
{% if page.next %} |
|||
<a class="docs-next" href="/react/docs/{{ page.next }}">Next →</a> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
|
|||
{% include nav_docs.html %} |
|||
</section> |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue