Compare commits
120 Commits
better_spr
...
stable
Author | SHA1 | Date | |
---|---|---|---|
|
1dd2563484 | ||
|
37c58300c0 | ||
|
7fced9373e | ||
|
92981fb5d3 | ||
|
f4d1a8255c | ||
|
aef3c5a07e | ||
|
93811a66c4 | ||
|
a8ff39a8e4 | ||
|
6dbce65e32 | ||
|
2691312067 | ||
|
d0067d7122 | ||
|
cdf11d7002 | ||
|
0de35e6d2b | ||
|
84e3746325 | ||
|
45db63c35e | ||
|
04800afc63 | ||
|
5b540f070d | ||
|
07819ccfbd | ||
|
ff94ab79c9 | ||
|
a4b35e7515 | ||
|
42bb556329 | ||
|
10168fe147 | ||
|
0257a58eea | ||
|
7a814581e7 | ||
|
539f206e51 | ||
|
432309d1a7 | ||
|
27c8dfbee8 | ||
|
b8b6af9d49 | ||
|
23d3d341de | ||
|
36f2e56f1c | ||
|
b2b9d57505 | ||
|
842e877bc0 | ||
|
8d8d3eecbc | ||
|
d7115caad6 | ||
|
efb484778d | ||
|
3b18b72d64 | ||
|
b7e66a7658 | ||
|
ab270c1adb | ||
|
349e29f7ca | ||
|
8837b0a347 | ||
|
239e43b4e0 | ||
|
87c79bcfb6 | ||
|
7ffe2c3a64 | ||
|
89ad638a1d | ||
|
157c2e0518 | ||
|
6d2040b86a | ||
|
94af47d1ca | ||
|
b6fef2fae9 | ||
|
ff61678572 | ||
|
461a589a61 | ||
|
6d2f7f41e5 | ||
|
ec29ec4b33 | ||
|
6170ab119f | ||
|
852f033160 | ||
|
82d739f4dd | ||
|
1d32683b5d | ||
|
c8cb9f2e39 | ||
|
569abeedb2 | ||
|
84f7b7a5ef | ||
|
dc504ecd8e | ||
|
db74d8bdb3 | ||
|
6712c65ce7 | ||
|
6bb9904834 | ||
|
2d81e0a506 | ||
|
a6a80221ee | ||
|
6ca90dccc3 | ||
|
809394a1e9 | ||
|
890236a8ad | ||
|
b352e8b140 | ||
|
b9234e50d0 | ||
|
0f8cd61436 | ||
|
f0f231a041 | ||
|
7d68162499 | ||
|
c4e3a83cda | ||
|
adac73a951 | ||
|
41bd992a8d | ||
|
1f17603aea | ||
|
894e5d51a0 | ||
|
6b7f2c2419 | ||
|
cebe25a460 | ||
|
80412b5c1d | ||
|
b6cf4f5213 | ||
|
6f95c9d17a | ||
|
fa165a3d84 | ||
|
39df74c55a | ||
|
2be7567bb2 | ||
|
ab25ba0b40 | ||
|
c069babe76 | ||
|
7454e522a5 | ||
|
3d4a57c3c1 | ||
|
a6ea065eaa | ||
|
21a5a2ae3d | ||
|
437842caa1 | ||
|
40e2f330e6 | ||
|
5999c7ba6c | ||
|
59a6d5706d | ||
|
b3ed3705c9 | ||
|
ecd1efdea4 | ||
|
e4a22c4cbf | ||
|
47572acc50 | ||
|
69cf947cab | ||
|
3473e7d63a | ||
|
00195296b8 | ||
|
b6bec9ad62 | ||
|
60680769ca | ||
|
e2966fa78d | ||
|
15412a756c | ||
|
9dcbbee3af | ||
|
333240de35 | ||
|
028f96131d | ||
|
10fb3814ca | ||
|
23fc8290c0 | ||
|
759692a618 | ||
|
cb6068c9a3 | ||
|
223258c203 | ||
|
6b3ca3901c | ||
|
d4422d108e | ||
|
8661c481cf | ||
|
2f3b757b46 | ||
|
21928907e4 |
1
.gitignore
vendored
@ -28,3 +28,4 @@ devbin
|
||||
*.rbc
|
||||
vendor/ruby
|
||||
vendor
|
||||
Gemfile.lock
|
||||
|
@ -4,4 +4,4 @@ rvm:
|
||||
- jruby
|
||||
- rbx
|
||||
- ree
|
||||
script: "bundle exec rake test"
|
||||
script: "bundle exec rake test features"
|
||||
|
4
Gemfile
@ -5,7 +5,7 @@ gemspec
|
||||
gem "cucumber", "~> 0.9.2"
|
||||
gem "rspec", "~>2.0.0"
|
||||
gem "rails", "~>3.0.0.rc"
|
||||
gem "compass-validator", "3.0.0"
|
||||
gem "compass-validator", "3.0.1"
|
||||
gem "css_parser", "~> 1.0.1"
|
||||
gem "sass", "~>3.1"
|
||||
gem "haml", "~> 3.1"
|
||||
@ -21,6 +21,8 @@ gem 'mocha'
|
||||
gem 'timecop'
|
||||
gem 'diff-lcs', '~> 1.1.2'
|
||||
|
||||
gem 'rake', '0.8.7'
|
||||
|
||||
group :mac do
|
||||
gem "rb-fsevent"
|
||||
end
|
||||
|
154
Gemfile.lock
@ -1,154 +0,0 @@
|
||||
GIT
|
||||
remote: git://github.com/johnbintz/fakefs.git
|
||||
revision: 005ddaaeb2b2881391c31ac9846a55ce5a42c206
|
||||
specs:
|
||||
fakefs (0.3.1)
|
||||
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
compass (0.11.1.f248c22)
|
||||
chunky_png (~> 1.1)
|
||||
fssm (>= 0.2.7)
|
||||
sass (~> 3.1)
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
ZenTest (4.5.0)
|
||||
abstract (1.0.0)
|
||||
actionmailer (3.0.7)
|
||||
actionpack (= 3.0.7)
|
||||
mail (~> 2.2.15)
|
||||
actionpack (3.0.7)
|
||||
activemodel (= 3.0.7)
|
||||
activesupport (= 3.0.7)
|
||||
builder (~> 2.1.2)
|
||||
erubis (~> 2.6.6)
|
||||
i18n (~> 0.5.0)
|
||||
rack (~> 1.2.1)
|
||||
rack-mount (~> 0.6.14)
|
||||
rack-test (~> 0.5.7)
|
||||
tzinfo (~> 0.3.23)
|
||||
activemodel (3.0.7)
|
||||
activesupport (= 3.0.7)
|
||||
builder (~> 2.1.2)
|
||||
i18n (~> 0.5.0)
|
||||
activerecord (3.0.7)
|
||||
activemodel (= 3.0.7)
|
||||
activesupport (= 3.0.7)
|
||||
arel (~> 2.0.2)
|
||||
tzinfo (~> 0.3.23)
|
||||
activeresource (3.0.7)
|
||||
activemodel (= 3.0.7)
|
||||
activesupport (= 3.0.7)
|
||||
activesupport (3.0.7)
|
||||
addressable (2.2.5)
|
||||
arel (2.0.9)
|
||||
autotest (4.4.6)
|
||||
ZenTest (>= 4.4.1)
|
||||
autotest-fsevent (0.2.5)
|
||||
sys-uname
|
||||
builder (2.1.2)
|
||||
chunky_png (1.2.0)
|
||||
compass-validator (3.0.0)
|
||||
css_parser (1.0.1)
|
||||
cucumber (0.9.4)
|
||||
builder (~> 2.1.2)
|
||||
diff-lcs (~> 1.1.2)
|
||||
gherkin (~> 2.2.9)
|
||||
json (~> 1.4.6)
|
||||
term-ansicolor (~> 1.0.5)
|
||||
diff-lcs (1.1.2)
|
||||
em-dir-watcher (0.9.4)
|
||||
em-websocket (0.2.1)
|
||||
addressable (>= 2.1.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
erubis (2.6.6)
|
||||
abstract (>= 1.0.0)
|
||||
eventmachine (0.12.10)
|
||||
fssm (0.2.7)
|
||||
gherkin (2.2.9)
|
||||
json (~> 1.4.6)
|
||||
term-ansicolor (~> 1.0.5)
|
||||
haml (3.1.1)
|
||||
i18n (0.5.0)
|
||||
json (1.4.6)
|
||||
livereload (1.6)
|
||||
em-dir-watcher (>= 0.1)
|
||||
em-websocket (>= 0.1.2)
|
||||
ruby-json (>= 1.1.2)
|
||||
mail (2.2.17)
|
||||
activesupport (>= 2.3.6)
|
||||
i18n (>= 0.4.0)
|
||||
mime-types (~> 1.16)
|
||||
treetop (~> 1.4.8)
|
||||
mime-types (1.16)
|
||||
mocha (0.9.12)
|
||||
polyglot (0.3.1)
|
||||
rack (1.2.2)
|
||||
rack-mount (0.6.14)
|
||||
rack (>= 1.0.0)
|
||||
rack-test (0.5.7)
|
||||
rack (>= 1.0)
|
||||
rails (3.0.7)
|
||||
actionmailer (= 3.0.7)
|
||||
actionpack (= 3.0.7)
|
||||
activerecord (= 3.0.7)
|
||||
activeresource (= 3.0.7)
|
||||
activesupport (= 3.0.7)
|
||||
bundler (~> 1.0)
|
||||
railties (= 3.0.7)
|
||||
railties (3.0.7)
|
||||
actionpack (= 3.0.7)
|
||||
activesupport (= 3.0.7)
|
||||
rake (>= 0.8.7)
|
||||
thor (~> 0.14.4)
|
||||
rake (0.8.7)
|
||||
rb-fsevent (0.4.0)
|
||||
rcov (0.9.9)
|
||||
rspec (2.0.1)
|
||||
rspec-core (~> 2.0.1)
|
||||
rspec-expectations (~> 2.0.1)
|
||||
rspec-mocks (~> 2.0.1)
|
||||
rspec-core (2.0.1)
|
||||
rspec-expectations (2.0.1)
|
||||
diff-lcs (>= 1.1.2)
|
||||
rspec-mocks (2.0.1)
|
||||
rspec-core (~> 2.0.1)
|
||||
rspec-expectations (~> 2.0.1)
|
||||
ruby-json (1.1.2)
|
||||
ruby-prof (0.10.5)
|
||||
rubyzip (0.9.4)
|
||||
sass (3.1.1)
|
||||
sys-uname (0.8.5)
|
||||
term-ansicolor (1.0.5)
|
||||
thor (0.14.6)
|
||||
timecop (0.3.5)
|
||||
treetop (1.4.9)
|
||||
polyglot (>= 0.3.1)
|
||||
tzinfo (0.3.26)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
autotest
|
||||
autotest-fsevent
|
||||
compass!
|
||||
compass-validator (= 3.0.0)
|
||||
css_parser (~> 1.0.1)
|
||||
cucumber (~> 0.9.2)
|
||||
diff-lcs (~> 1.1.2)
|
||||
fakefs!
|
||||
haml (~> 3.1)
|
||||
livereload
|
||||
mocha
|
||||
rails (~> 3.0.0.rc)
|
||||
rb-fsevent
|
||||
rcov
|
||||
rspec (~> 2.0.0)
|
||||
ruby-prof
|
||||
rubyzip
|
||||
sass (~> 3.1)
|
||||
timecop
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
:major: 0
|
||||
:minor: 11
|
||||
:build: 1
|
||||
:patch: 5
|
||||
:name: Antares
|
||||
|
@ -16,7 +16,7 @@ Gem::Specification.new do |gemspec|
|
||||
gemspec.summary = %q{A Real Stylesheet Framework}
|
||||
|
||||
gemspec.add_dependency 'sass', '~> 3.1'
|
||||
gemspec.add_dependency 'chunky_png', '~> 1.1'
|
||||
gemspec.add_dependency 'chunky_png', '~> 1.2'
|
||||
gemspec.add_dependency 'fssm', '>= 0.2.7'
|
||||
|
||||
gemspec.files = %w(README.markdown LICENSE.markdown VERSION.yml Rakefile)
|
||||
|
BIN
doc-src/assets/images/compass.app.png
Normal file
After Width: | Height: | Size: 50 KiB |
@ -14,16 +14,65 @@ The Documentation for the [latest stable release](http://compass-style.org/docs/
|
||||
|
||||
The Documentation for the [latest preview release](http://beta.compass-style.org/)
|
||||
|
||||
0.11.3 (PENDING)
|
||||
0.11.6 (UNRELEASED)
|
||||
-------------------
|
||||
* Sprites will now by default remove any old versions of the sprite a new variable has been created to override this.
|
||||
|
||||
* Added `user-select` mixin to control the selection model and granularity of an element. It accepts one argument (`$select`) from the following options: `none` | `text` | `toggle` | `element` | `elements` | `all` | `inherit`.
|
||||
|
||||
0.11.5 (07/10/2011)
|
||||
-------------------
|
||||
|
||||
* Updated the list of elements returned by the `elements-of-type()` helper.
|
||||
It now understands `html5-block` and `html5-inline` and other types now
|
||||
return html5 elements in them by default.
|
||||
* Fix warning logic in vertical-rhythms module.
|
||||
* Fix typo in the css3/transition module.
|
||||
|
||||
0.11.4 (07/03/2011)
|
||||
-------------------
|
||||
|
||||
* Vertical rhythm now supports absolute units like pixels.
|
||||
Set `$relative-font-sizing` to `false` to enable.
|
||||
* Vertical rhythm now has a minimum padding that defaults to 2px.
|
||||
This makes some edge cases look better.
|
||||
* New mixin `force-wrap` prevents URLs and long lines of text from breaking layouts.
|
||||
* Fix absolute path detection on windows.
|
||||
* Fix the mime type returned for inline svg images.
|
||||
* Allow multiple transitions in the CSS3 `transition` mixin.
|
||||
* The Blueprint `:focus` styles no longer clobbers cascade-based overrides unnecessarily.
|
||||
* The Blueprint grid-background vertical rhythm is now based off of $blueprint-font-size,
|
||||
rather than a static value of 20px
|
||||
|
||||
0.11.3 (06/11/2011)
|
||||
-------------------
|
||||
|
||||
**Note:** Due to some internal changes to compass you may have issue with your sass cache. Run `compass clean` to clear your cache.
|
||||
|
||||
* The `pie-clearfix` mixin has been updated. If you have to
|
||||
support Firefox < 3.5, please update your stylesheets
|
||||
to use `legacy-pie-clearfix` instead.
|
||||
* Added a new command: `compass clean` which removes any generated
|
||||
css files and clears the sass cache.
|
||||
* Enable IE 10 support for flexible box with the -ms prefix.
|
||||
* A small change to how generated sprites are named for better
|
||||
rails 3.1 compatibility.
|
||||
* Fixes for the compass --quiet mode.
|
||||
* It is now possible to generate cache buster urls that manipulate
|
||||
the path of the image instead of the query string. This makes
|
||||
images work better with proxies, but will require some web server
|
||||
configuration. [Docs](/help/tutorials/configuration-reference/#asset-cache-buster)
|
||||
* Numerous small bug fixes to sprites.
|
||||
* Sprite Engines are now classes see [Docs](/help/tutorials/extending) for more information
|
||||
* Sprite classes have bee re-factored into modules for readability
|
||||
* Sprites will no longer cause `undefined method 'find' for #<Compass::SpriteMap>` when adding or removing sprite files
|
||||
|
||||
0.11.2 (06/10/2011)
|
||||
-------------------
|
||||
* Sprites will now by default remove any old versions of the sprite. A new configuration
|
||||
variable has been created to override this.
|
||||
* Nested sprites are now supported using globs `@import 'nested/**/*.png';`.
|
||||
* Fixed a bug that was causing sprite variable options to not get passed to the image classes.
|
||||
* Sass Colors will no longer cause an error if you use them as sprite names.
|
||||
|
||||
0.11.2 (05/01/2011)
|
||||
-------------------
|
||||
|
||||
* Added support for -ms gradients in background-image and background properties
|
||||
* Give a better error if Sass::Script::Functions.declare does not exist.
|
||||
|
||||
|
@ -40,7 +40,7 @@ layout: site
|
||||
|
||||
## Manual setup using the Blueprint Framework
|
||||
|
||||
When starting a project from scrath:
|
||||
When starting a project from scratch:
|
||||
|
||||
compass create /path/to/project --using blueprint
|
||||
|
||||
|
@ -280,6 +280,13 @@ later on.
|
||||
<td style="vertical-align:top;">Symbol </td>
|
||||
<td style="vertical-align:top;">Defaults to <code>:chunky_png</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:top;"><code>chunky_png_options</code></td>
|
||||
<td style="vertical-align:top;">Hash </td>
|
||||
<td style="vertical-align:top;">
|
||||
Defaults to <code>{:compression => Zlib::BEST_COMPRESSION}</code>. See the chunky_png <a href='https://github.com/wvanbergen/chunky_png/wiki/Constraints' _target='blank'>wiki</a> for more information
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<a name="configuration-functions"></a>
|
||||
@ -307,10 +314,14 @@ the asset host configuration is ignored.
|
||||
|
||||
---
|
||||
|
||||
<a name="asset-cache-buster"></a>
|
||||
**`asset_cache_buster`** – Pass this function a block of code that defines the
|
||||
cache buster strategy to be used. The block must return nil or a string that can
|
||||
be appended to a url as a query parameter. The returned string must not include
|
||||
the starting `?`. The block will be passed the root-relative url of the asset.
|
||||
cache buster strategy to be used. The block must return nil, a string or a hash.
|
||||
If the returned value is a hash the values of :path and/or :query is used to generate
|
||||
a cache busted path to the asset. If a string value is returned, it is added as a query string.
|
||||
The returned values for query strings must not include the starting `?`.
|
||||
|
||||
The block will be passed the root-relative url of the asset.
|
||||
If the block accepts two arguments, it will also be passed a path
|
||||
that points to the asset on disk — which may or may not exist.
|
||||
|
||||
@ -324,6 +335,18 @@ that points to the asset on disk — which may or may not exist.
|
||||
end
|
||||
end
|
||||
|
||||
Busting the cache via path:
|
||||
|
||||
asset_cache_buster do |path, real_path|
|
||||
if File.exists?(real_path)
|
||||
pathname = Pathname.new(path)
|
||||
modified_time = File.mtime(real_path).strftime("%s")
|
||||
new_path = "%s/%s-%s%s" % [pathname.dirname, pathname.basename(pathname.extname), modified_time, pathname.extname]
|
||||
|
||||
{:path => new_path, :query => nil}
|
||||
end
|
||||
end
|
||||
|
||||
To disable the asset cache buster:
|
||||
|
||||
asset_cache_buster :none
|
||||
|
@ -14,11 +14,9 @@ The sprite engine is the work horse of sprite generation it's the interface for
|
||||
|
||||
### Requirements
|
||||
|
||||
A sprite engine requires only one method and that is `construct_sprite` which must return an object that responds to `save(filepath)`
|
||||
A sprite engine requires two methods `construct_sprite`, and `save(filename)`
|
||||
|
||||
Once inside this method you have access to `images` which is a collection of [Compass::SassExtensions::Sprites::Image](http://rdoc.info/github/chriseppstein/compass/dda7c9/Compass/SassExtensions/Sprites/Image)
|
||||
|
||||
Since the Engine module extends base you also have access to all methods in [Compass::SassExtensions::Sprites::Base](http://rdoc.info/github/chriseppstein/compass/dda7c9/Compass/SassExtensions/Sprites/Base)
|
||||
Once inside the class you have access to `images` which is a collection of [Compass::SassExtensions::Sprites::Image](http://rdoc.info/github/chriseppstein/compass/dda7c9/Compass/SassExtensions/Sprites/Image)
|
||||
|
||||
### Configuration
|
||||
|
||||
@ -26,7 +24,7 @@ To enable your sprite engine from the config file set
|
||||
|
||||
sprite_engine = :<engine name>
|
||||
|
||||
The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine`
|
||||
The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine.new(width, height, images)`
|
||||
|
||||
sprite_engine = :chunky_png
|
||||
|
||||
@ -35,11 +33,14 @@ The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine`
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module <engine name>Engine
|
||||
class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine
|
||||
|
||||
# Returns an object
|
||||
def construct_sprite
|
||||
#must return a image object that responds to save(filename)
|
||||
#do something
|
||||
end
|
||||
|
||||
def save(filename)
|
||||
#save file
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Application Integration
|
||||
layout: tutorial
|
||||
crumb: Appliction Integration
|
||||
crumb: Application Integration
|
||||
classnames:
|
||||
- tutorial
|
||||
---
|
||||
|
@ -15,10 +15,10 @@ of several convenient ways.
|
||||
|
||||
For this tutorial, let's imagine that in your project's image folder there are four icons:
|
||||
|
||||
* `public/images/icon/new.png`
|
||||
* `public/images/icon/edit.png`
|
||||
* `public/images/icon/save.png`
|
||||
* `public/images/icon/delete.png`
|
||||
* `images/icon/new.png`
|
||||
* `images/icon/edit.png`
|
||||
* `images/icon/save.png`
|
||||
* `images/icon/delete.png`
|
||||
|
||||
Each is an icon that is 32px square.
|
||||
|
||||
@ -34,7 +34,7 @@ And you'll get the following CSS output:
|
||||
.icon-delete,
|
||||
.icon-edit,
|
||||
.icon-new,
|
||||
.icon-save { background: url('/images/icon-34fe0604ab.png') no-repeat; }
|
||||
.icon-save { background: url('/images/icon-s34fe0604ab.png') no-repeat; }
|
||||
|
||||
.icon-delete { background-position: 0 0; }
|
||||
.icon-edit { background-position: 0 -32px; }
|
||||
@ -74,7 +74,7 @@ And your stylesheet will compile to:
|
||||
.actions .new,
|
||||
.actions .edit,
|
||||
.actions .save,
|
||||
.actions .delete { background: url('/images/icon-34fe0604ab.png') no-repeat; }
|
||||
.actions .delete { background: url('/images/icon-s34fe0604ab.png') no-repeat; }
|
||||
|
||||
.actions .new { background-position: 0 -64px; }
|
||||
.actions .edit { background-position: 0 -32px; }
|
||||
@ -89,7 +89,7 @@ magic, some people are scared by it, and others are curious about how the magic
|
||||
you would like to avoid the magic, you can use compass to generate an import for you. On the
|
||||
command line:
|
||||
|
||||
compass sprite "public/images/icon/*.png"
|
||||
compass sprite "images/icon/*.png"
|
||||
|
||||
This will create file using your project's preferred syntax, or you can specify the
|
||||
output filename using the `-f` option and the syntax will be inferred from the extension.
|
||||
@ -122,7 +122,7 @@ Now in our sass file we add:
|
||||
And your stylesheet will compile to:
|
||||
|
||||
.selectors-sprite, a {
|
||||
background: url('/selectors-edfef809e2.png') no-repeat;
|
||||
background: url('/selectors-sedfef809e2.png') no-repeat;
|
||||
}
|
||||
|
||||
a {
|
||||
@ -141,7 +141,7 @@ And your stylesheet will compile to:
|
||||
Alternatively you can use the `@include all-selectors-sprites;` after the import and get the following output:
|
||||
|
||||
.selectors-sprite, .selectors-ten-by-ten {
|
||||
background: url('/selectors-edfef809e2.png') no-repeat;
|
||||
background: url('/selectors-sedfef809e2.png') no-repeat;
|
||||
}
|
||||
|
||||
.selectors-ten-by-ten {
|
||||
|
@ -22,7 +22,7 @@ what changed to your stylesheets:
|
||||
1. $ cd my_compass_project
|
||||
2. $ compass compile --force
|
||||
3. $ cp -r stylesheets stylesheets.backup
|
||||
4. $ gem install compass --pre # you might need to type sudo first if you're on mac or linux.
|
||||
4. $ gem install compass # you might need to type sudo first if you're on mac or linux.
|
||||
5. $ compass compile --force
|
||||
6. Take note of any deprecation warnings printed in red during the compile.
|
||||
7. If you have textmate and installed the `mate` command line tool:<br>
|
||||
|
@ -69,3 +69,27 @@ layout: homepage
|
||||
%img(src="/images/sites/busyconf.jpg")
|
||||
%span.title BusyConf
|
||||
%span.url http://busyconf.com
|
||||
|
||||
%section.book
|
||||
%h3 Save <em>37%</em> on the Book: (Currently In Beta)
|
||||
|
||||
%p
|
||||
%a(href="http://www.manning.com/netherland/")
|
||||
%img(src="http://www.manning.com/netherland/netherland_cover150.jpg" alt="Sass & Compass in Action")
|
||||
Compliments of Manning.com is a standing 37% discount on
|
||||
<a href="http://www.manning.com/netherland/">Sass and Compass in Action</a>.
|
||||
Use promo code <code>sasscomp37</code> at manning.com on the MEAP, eBook and pBook of Sass and
|
||||
Compass in Action. All pBook purchases include free eFormats (PDF, ePub, and Kindle)
|
||||
as soon as available.
|
||||
|
||||
%section.gui
|
||||
%h3 <em>Hate</em> the Command Line?
|
||||
|
||||
%a(href="http://compass.handlino.com/")
|
||||
%img(src="/images/compass.app.png")
|
||||
%p
|
||||
Buy <a href="http://compass.handlino.com/">Compass.app</a>
|
||||
for Windows and Mac for just $7.
|
||||
%p.note
|
||||
Note: Compass.app is a product of Handlino, Inc but
|
||||
30% of all proceeds go to Compass's charity of choice: <a href="http://umdf.org/compass">UMDF.org</a>.
|
||||
|
@ -25,7 +25,7 @@ classnames:
|
||||
Example (more examples are available by following the links below):
|
||||
|
||||
<pre><code class="source-code scss">.in-css3 {
|
||||
background: image-url("foo.png"),
|
||||
background: url(foo.png),
|
||||
linear-gradient(top left, #333, #0c0),
|
||||
radial-gradient(#c00, #fff 100px);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ layout: core
|
||||
|
||||
:markdown
|
||||
The compass helpers are functions that augment the [functions provided
|
||||
by Sass](http://sass-lang.com/yardoc/Sass/Script/Functions.html).
|
||||
by Sass](http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html).
|
||||
|
||||
All Helpers:
|
||||
|
||||
|
@ -21,7 +21,7 @@ documented_functions:
|
||||
.details
|
||||
%p
|
||||
The following display values exist and will return
|
||||
the elements listed to the right.
|
||||
the elements listed below the display value.
|
||||
%dl
|
||||
%dg.head
|
||||
%dt Display Value
|
||||
|
@ -0,0 +1,15 @@
|
||||
---
|
||||
title: Wrapping Long Text and URLs
|
||||
crumb: Force Wrap
|
||||
framework: compass
|
||||
stylesheet: compass/typography/text/_force-wrap.scss
|
||||
layout: core
|
||||
meta_description: Wrap URLs and long lines of text.
|
||||
classnames:
|
||||
- reference
|
||||
- core
|
||||
- typography
|
||||
---
|
||||
- render 'reference' do
|
||||
%p
|
||||
This mixin will wrap URLs and long lines of text to prevent text from breaking layouts.
|
@ -79,4 +79,21 @@ ul#featured_sites {
|
||||
.title { bottom: 1.7em; left: 0; z-index: 103; text-decoration: none; padding: 0 11px; color: #fff; }
|
||||
}
|
||||
}
|
||||
section.book, section.gui {
|
||||
width: 48%;
|
||||
float: left;
|
||||
@extend .group;
|
||||
h3 { margin-bottom: 1em; height: 2em; text-align: left; }
|
||||
}
|
||||
section.book {
|
||||
margin-right: 2%;
|
||||
img { float: left; margin-right: 1em; margin-bottom: 1em; }
|
||||
}
|
||||
section.gui {
|
||||
text-align: center;
|
||||
.note {
|
||||
font-size: smaller;
|
||||
}
|
||||
}
|
||||
|
||||
html.light body#home { h1#logo { background-position: bottom;} }
|
@ -29,7 +29,8 @@
|
||||
ul { list-style: none; margin-bottom: 1em;}
|
||||
h2 { line-height: 1.3em; margin-top: 0; padding-top: 3px;}
|
||||
}
|
||||
em { font-style: italic; }
|
||||
em { font-style: italic; }
|
||||
strong { font-weight: bold; }
|
||||
|
||||
#page > article {
|
||||
ul ul { padding-left: 1em; }
|
||||
|
@ -130,7 +130,7 @@ end
|
||||
|
||||
def compass_version
|
||||
v = Compass.version
|
||||
"#{v[:major]}.#{v[:minor]}#{"."+v[:state] if v[:state]}.#{v[:build]}"
|
||||
"#{v[:major]}.#{v[:minor]}#{"."+v[:state] if v[:state]}.#{v[:build] || v[:patch]}"
|
||||
end
|
||||
|
||||
def long_compass_version
|
||||
|
@ -63,6 +63,15 @@ Feature: Command Line
|
||||
And I am told that I can place stylesheets in the sass subdirectory
|
||||
And I am told how to compile my sass stylesheets
|
||||
|
||||
Scenario: Compiling a project with errors
|
||||
Given I am using the existing project in test/fixtures/stylesheets/compass
|
||||
And the project has a file named "sass/error.scss" containing:
|
||||
"""
|
||||
.broken {
|
||||
"""
|
||||
When I run: compass compile
|
||||
Then the command exits with a non-zero error code
|
||||
|
||||
Scenario: Creating a bare project with a framework
|
||||
When I create a project using: compass create bare_project --using blueprint --bare
|
||||
Then an error message is printed out: A bare project cannot be created when a framework is specified.
|
||||
@ -145,6 +154,7 @@ Feature: Command Line
|
||||
Scenario: Basic help
|
||||
When I run: compass help
|
||||
Then I should see the following "primary" commands:
|
||||
| clean |
|
||||
| compile |
|
||||
| create |
|
||||
| init |
|
||||
@ -179,12 +189,33 @@ Feature: Command Line
|
||||
And I run: compass compile
|
||||
And a css file tmp/layout.css is reported overwritten
|
||||
|
||||
Scenario: Cleaning a project
|
||||
Given I am using the existing project in test/fixtures/stylesheets/compass
|
||||
When I run: compass compile
|
||||
And I run: compass clean
|
||||
Then the following files are reported removed:
|
||||
| .sass-cache/ |
|
||||
| tmp/border_radius.css |
|
||||
| tmp/box.css |
|
||||
| tmp/box_shadow.css |
|
||||
| tmp/columns.css |
|
||||
| tmp/fonts.css |
|
||||
| images/flag-s03c3b29b35.png |
|
||||
And the following files are removed:
|
||||
| .sass-cache/ |
|
||||
| tmp/border_radius.css |
|
||||
| tmp/box.css |
|
||||
| tmp/box_shadow.css |
|
||||
| tmp/columns.css |
|
||||
| tmp/fonts.css |
|
||||
| images/flag-s03c3b29b35.png |
|
||||
|
||||
Scenario: Watching a project for changes
|
||||
Given ruby supports fork
|
||||
Given I am using the existing project in test/fixtures/stylesheets/compass
|
||||
When I run: compass compile
|
||||
And I run in a separate process: compass watch
|
||||
And I wait 1 second
|
||||
And I wait 3 seconds
|
||||
And I touch sass/layout.sass
|
||||
And I wait 2 seconds
|
||||
And I shutdown the other process
|
||||
@ -218,7 +249,6 @@ Feature: Command Line
|
||||
| sass_dir | sass |
|
||||
| css_dir | assets/css |
|
||||
|
||||
@now
|
||||
Scenario Outline: Print out a configuration value
|
||||
Given I am using the existing project in test/fixtures/stylesheets/compass
|
||||
When I run: compass config -p <property>
|
||||
|
@ -53,6 +53,13 @@ Given /^I should clean up the directory: (\w+)$/ do |directory|
|
||||
@cleanup_directories << directory
|
||||
end
|
||||
|
||||
Given %r{^the project has a file named "([^"]*)" containing:$} do |arg1, string|
|
||||
File.open(arg1, "w") do |f|
|
||||
f << string
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# When Actions are performed
|
||||
When /^I create a project using: compass create ([^\s]+) ?(.+)?$/ do |dir, args|
|
||||
@cleanup_directories << dir
|
||||
@ -76,7 +83,7 @@ When /^I run in a separate process: compass ([^\s]+) ?(.+)?$/ do |command, args|
|
||||
file.puts $stdout.string
|
||||
end
|
||||
open('/tmp/last_error.compass_test.txt', 'w') do |file|
|
||||
file.puts @stderr.string
|
||||
file.puts $stderr.string
|
||||
end
|
||||
exit!
|
||||
end
|
||||
@ -116,10 +123,30 @@ Then /^a directory ([^ ]+) is (not )?created$/ do |directory, negated|
|
||||
File.directory?(directory).should == !negated
|
||||
end
|
||||
|
||||
Then /an? \w+ file ([^ ]+) is (not )?removed/ do |filename, negated|
|
||||
File.exists?(filename).should == !!negated
|
||||
end
|
||||
|
||||
Then /an? \w+ file ([^ ]+) is (not )?created/ do |filename, negated|
|
||||
File.exists?(filename).should == !negated
|
||||
end
|
||||
|
||||
Then "the following files are reported removed:" do |table|
|
||||
table.rows.each do |css_file|
|
||||
Then %Q{a css file #{css_file.first} is reported removed}
|
||||
end
|
||||
end
|
||||
|
||||
Then "the following files are removed:" do |table|
|
||||
table.rows.each do |css_file|
|
||||
Then %Q{a css file #{css_file.first} is removed}
|
||||
end
|
||||
end
|
||||
|
||||
Then /an? \w+ file ([^ ]+) is reported removed/ do |filename|
|
||||
@last_result.should =~ /remove.*#{Regexp.escape(filename)}/
|
||||
end
|
||||
|
||||
Then /an? \w+ file ([^ ]+) is reported created/ do |filename|
|
||||
@last_result.should =~ /create.*#{Regexp.escape(filename)}/
|
||||
end
|
||||
|
@ -1,5 +1,5 @@
|
||||
@import "compass/layout/grid-background";
|
||||
@import "blueprint/grid";
|
||||
@import "grid", "typography";
|
||||
|
||||
// Shows a background that can be used to check grid alignment.
|
||||
// By default this is a pure css version that only works in browsers
|
||||
@ -14,7 +14,7 @@
|
||||
$total : $blueprint-grid-columns,
|
||||
$column : $blueprint-grid-width,
|
||||
$gutter : $blueprint-grid-margin,
|
||||
$baseline : 20px
|
||||
$baseline : $blueprint-font-size * 1.5
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@
|
||||
background-color:#fff;
|
||||
border: 1px solid $unfocused-border-color;
|
||||
&:focus {
|
||||
border: 1px solid $focus-border-color;
|
||||
border-color: $focus-border-color;
|
||||
}
|
||||
}
|
||||
select { background-color:#fff; border-width:1px; border-style:solid; }
|
||||
|
@ -17,7 +17,7 @@
|
||||
form, label, legend,
|
||||
caption, tbody, tfoot, thead, tr { @include blueprint-basic-reset; }
|
||||
#{headers(all)} { @include blueprint-basic-reset(bp-reset-element); }
|
||||
#{elements-of-type(html5)} { @include blueprint-reset-html5-element(bp-reset-element); }
|
||||
#{elements-of-type(html5-block)} { @include blueprint-reset-html5-element(bp-reset-element); }
|
||||
blockquote, q { @include blueprint-reset-quotation(bp-reset-element); }
|
||||
th, td, caption { @include blueprint-reset-table-cell(bp-reset-element); }
|
||||
table { @include blueprint-reset-table(bp-reset-element); }
|
||||
|
@ -24,7 +24,10 @@ $default-box-shadow-spread : false !default;
|
||||
// The default shadow inset: inset or false (for standard shadow).
|
||||
$default-box-shadow-inset : false !default;
|
||||
|
||||
// Provides cross-browser for Webkit, Gecko, and CSS3 box shadows when one or more box shadows are needed.
|
||||
// Provides cross-browser for Webkit, Gecko, and CSS3 box shadows when one or more box
|
||||
// shadows are needed.
|
||||
// Each shadow argument should adhere to the standard css3 syntax for the
|
||||
// box-shadow property.
|
||||
@mixin box-shadow(
|
||||
$shadow-1 : default,
|
||||
$shadow-2 : false,
|
||||
|
@ -3,7 +3,7 @@
|
||||
// display:box; must be used for any of the other flexbox mixins to work properly
|
||||
@mixin display-box {
|
||||
@include experimental-value(display, box,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ $default-box-orient: horizontal !default;
|
||||
) {
|
||||
$orientation : unquote($orientation);
|
||||
@include experimental(box-orient, $orientation,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ $default-box-align: stretch !default;
|
||||
) {
|
||||
$alignment : unquote($alignment);
|
||||
@include experimental(box-align, $alignment,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ $default-box-flex: 0 !default;
|
||||
$flex: $default-box-flex
|
||||
) {
|
||||
@include experimental(box-flex, $flex,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -55,7 +55,7 @@ $default-box-flex-group: 1 !default;
|
||||
$group: $default-box-flex-group
|
||||
) {
|
||||
@include experimental(box-flex-group, $group,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -67,7 +67,7 @@ $default-box-ordinal-group: 1 !default;
|
||||
$group: $default-ordinal-flex-group
|
||||
) {
|
||||
@include experimental(box-ordinal-group, $group,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ $default-box-direction: normal !default;
|
||||
) {
|
||||
$direction: unquote($direction);
|
||||
@include experimental(box-direction, $direction,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ $default-box-lines: single !default;
|
||||
) {
|
||||
$lines: unquote($lines);
|
||||
@include experimental(box-lines, $lines,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
|
||||
@ -106,6 +106,6 @@ $default-box-pack: start !default;
|
||||
) {
|
||||
$pack: unquote($pack);
|
||||
@include experimental(box-pack, $pack,
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, -ms, not -khtml, official
|
||||
);
|
||||
}
|
@ -15,7 +15,7 @@
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// +font-face("this name", font-files("this.woff", "woff", "this.otf", "opentype"), "this.eot")
|
||||
// @include font-face("this name", font-files("this.woff", woff, "this.otf", opentype), "this.eot")
|
||||
@mixin font-face(
|
||||
$name,
|
||||
$font-files,
|
||||
|
@ -83,10 +83,7 @@
|
||||
@mixin filter-gradient($start-color, $end-color, $orientation: vertical) {
|
||||
@include has-layout;
|
||||
$gradient-type: if($orientation == vertical, 0, 1);
|
||||
@if $legacy-support-for-ie8 {
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type}, startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}')";
|
||||
}
|
||||
@if $legacy-support-for-ie6 or $legacy-support-for-ie7 {
|
||||
@if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type}, startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}');
|
||||
}
|
||||
}
|
||||
|
@ -6,10 +6,7 @@
|
||||
// A number between 0 and 1, where 0 is transparent and 1 is opaque.
|
||||
|
||||
@mixin opacity($opacity) {
|
||||
@if $legacy-support-for-ie8 {
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=#{round($opacity * 100)})";
|
||||
}
|
||||
@if $legacy-support-for-ie6 or $legacy-support-for-ie7 {
|
||||
@if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {
|
||||
filter: unquote("progid:DXImageTransform.Microsoft.Alpha(Opacity=#{round($opacity * 100)})");
|
||||
}
|
||||
opacity: $opacity;
|
||||
|
@ -9,6 +9,8 @@ $default-text-shadow-v-offset: 0px !default;
|
||||
$default-text-shadow-blur: 1px !default;
|
||||
|
||||
// Provides cross-browser text shadows when one or more shadows are needed.
|
||||
// Each shadow argument should adhere to the standard css3 syntax for the
|
||||
// text-shadow property.
|
||||
@mixin text-shadow(
|
||||
$shadow-1 : default,
|
||||
$shadow-2 : false,
|
||||
|
@ -72,7 +72,7 @@ $default-transition-delay: false !default;
|
||||
|
||||
// Transition all-in-one shorthand
|
||||
|
||||
@mixin transition(
|
||||
@mixin single-transition(
|
||||
$properties: $default-transition-property,
|
||||
$duration: $default-transition-duration,
|
||||
$function: $default-transition-function,
|
||||
@ -83,3 +83,37 @@ $default-transition-delay: false !default;
|
||||
@if $function { @include transition-timing-function($function); }
|
||||
@if $delay { @include transition-delay($delay); }
|
||||
}
|
||||
|
||||
@mixin transition(
|
||||
$transition-1 : default,
|
||||
$transition-2 : false,
|
||||
$transition-3 : false,
|
||||
$transition-4 : false,
|
||||
$transition-5 : false,
|
||||
$transition-6 : false,
|
||||
$transition-7 : false,
|
||||
$transition-8 : false,
|
||||
$transition-9 : false,
|
||||
$transition-10: false
|
||||
) {
|
||||
$legacy: (type-of($transition-1) == string and type-of(if($transition-2, $transition-2, 0)) == number and type-of(if($transition-3, $transition-3, '')) == string and type-of(if($transition-4, $transition-4, 0)) == number and ($transition-2 or $transition-3 or $transition-4));
|
||||
@if $legacy {
|
||||
@warn "Passing separate arguments for a single transition to transition is deprecated. " +
|
||||
"Pass the values as a single space-separated list, or use the single-transition mixin.";
|
||||
@include single-transition(
|
||||
if($transition-1, $transition-1, $default-transition-property),
|
||||
if($transition-2, $transition-2, $default-transition-duration),
|
||||
if($transition-3, $transition-3, $default-transition-function),
|
||||
if($transition-4, $transition-4, $default-transition-delay)
|
||||
);
|
||||
}
|
||||
@else {
|
||||
@if $transition-1 == default {
|
||||
$transition-1 : -compass-space-list(compact($default-transition-property, $default-transition-duration, $default-transition-function, $default-transition-delay));
|
||||
}
|
||||
$transition : compact($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10);
|
||||
@include experimental(transition, $transition,
|
||||
-moz, -webkit, -o, not -ms, not -khtml, official
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,24 @@
|
||||
@import "shared";
|
||||
|
||||
// User Interface ------------------------------------------------------------
|
||||
// This file can be expanded to handle all the user interface properties as
|
||||
// they become available in browsers:
|
||||
// http://www.w3.org/TR/2000/WD-css3-userint-20000216
|
||||
|
||||
// User Select ---------------------------------------------------------------
|
||||
// This property controls the selection model and granularity of an element.
|
||||
//
|
||||
// @param $select
|
||||
// [ none | text | toggle | element | elements | all | inherit ]
|
||||
|
||||
@mixin user-select($select) {
|
||||
$select: unquote($select);
|
||||
// Mozilla needs prefix on both the -moz-property and the -moz-value
|
||||
@include experimental(user-select, -moz-#{$select},
|
||||
-moz, not -webkit, not -o, not -ms, not -khtml, not official
|
||||
);
|
||||
// others do not
|
||||
@include experimental(user-select, $select,
|
||||
not -moz, -webkit, not -o, not -ms, -khtml, official
|
||||
);
|
||||
}
|
@ -105,7 +105,7 @@
|
||||
// so they are rendered correctly in browsers that don't recognize them
|
||||
// and reset in browsers that have default styles for them.
|
||||
@mixin reset-html5 {
|
||||
article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
||||
#{elements-of-type(html5-block)} {
|
||||
@include reset-box-model;
|
||||
display: block; } }
|
||||
|
||||
|
@ -107,12 +107,11 @@
|
||||
border: none; }
|
||||
|
||||
// Unrecognized elements are displayed inline.
|
||||
// This reset provides a basic reset for html5 elements
|
||||
// This reset provides a basic reset for block html5 elements
|
||||
// so they are rendered correctly in browsers that don't recognize them
|
||||
// and reset in browsers that have default styles for them.
|
||||
@mixin reset-html5 {
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
#{elements-of-type(html5-block)} {
|
||||
display: block; } }
|
||||
|
||||
// Resets the display of inline and block elements to their default display
|
||||
|
@ -1,3 +1,4 @@
|
||||
@import "text/ellipsis";
|
||||
@import "text/nowrap";
|
||||
@import "text/replacement";
|
||||
@import "text/force-wrap";
|
||||
|
@ -10,22 +10,47 @@ $default-rhythm-border-style: solid !default;
|
||||
// The IE font ratio is a fact of life. Deal with it.
|
||||
$ie-font-ratio: 16px / 100%;
|
||||
|
||||
// Set to false if you want to use absolute pixes in sizing your typography.
|
||||
$relative-font-sizing: true !default;
|
||||
|
||||
// Ensure there is at least this many pixels
|
||||
// of vertical padding above and below the text.
|
||||
$min-line-padding: 2px;
|
||||
|
||||
// $base-font-size but in your output unit of choice.
|
||||
// Defaults to 1em when `$relative-font-sizing`
|
||||
$font-unit: if($relative-font-sizing, 1em, $base-font-size) !default;
|
||||
|
||||
// The basic unit of font rhythm
|
||||
$base-rhythm-unit: $base-line-height / $base-font-size * 1em;
|
||||
$base-rhythm-unit: $base-line-height / $base-font-size * $font-unit;
|
||||
|
||||
// The leader is the amount of whitespace in a line.
|
||||
// It might be useful in your calculations
|
||||
$base-leader: ($base-line-height - $base-font-size) * 1em / $base-font-size;
|
||||
$base-leader: ($base-line-height - $base-font-size) * $font-unit / $base-font-size;
|
||||
|
||||
// The half-leader is the amount of whitespace above and below a line.
|
||||
// It might be useful in your calculations
|
||||
$base-half-leader: $base-leader / 2;
|
||||
|
||||
// True if a number has a relative unit
|
||||
@function relative-unit($number) {
|
||||
@return unit($number) == "%" or unit($number) == "em" or unit($number) == "rem"
|
||||
}
|
||||
|
||||
// True if a number has an absolute unit
|
||||
@function absolute-unit($number) {
|
||||
@return not (relative-unit($number) or unitless($number));
|
||||
}
|
||||
|
||||
@if $relative-font-sizing and not relative-unit($font-unit) {
|
||||
@warn "$relative-font-sizing is true but $font-unit is set to #{$font-unit} which is not a relative unit.";
|
||||
}
|
||||
|
||||
// Establishes a font baseline for the given font-size in pixels
|
||||
@mixin establish-baseline($font-size: $base-font-size) {
|
||||
body {
|
||||
font-size: $font-size / $ie-font-ratio;
|
||||
@include adjust-leading-to(1, $font-size);
|
||||
@include adjust-leading-to(1, if($relative-font-sizing, $font-size, $base-font-size));
|
||||
}
|
||||
html>body {
|
||||
font-size: $font-size;
|
||||
@ -42,13 +67,19 @@ $base-half-leader: $base-leader / 2;
|
||||
// font size should use up. Does not have to be an integer, but it defaults
|
||||
// to the smallest integer that is large enough to fit the font.
|
||||
// Use $from_size to adjust from a non-base font-size.
|
||||
@mixin adjust-font-size-to($to-size, $lines: ceil($to-size / $base-line-height), $from-size: $base-font-size) {
|
||||
font-size: 1em * $to-size / $from-size;
|
||||
@include adjust-leading-to($lines, $to-size);
|
||||
@mixin adjust-font-size-to($to-size, $lines: lines-for-font-size($to-size), $from-size: $base-font-size) {
|
||||
@if not $relative-font-sizing and $from-size != $base-font-size {
|
||||
@warn "$relative-font-sizing is false but a relative font size was passed to adjust-font-size-to";
|
||||
}
|
||||
font-size: $font-unit * $to-size / $from-size;
|
||||
@include adjust-leading-to($lines, if($relative-font-sizing, $to-size, $base-font-size));
|
||||
}
|
||||
|
||||
@mixin adjust-leading-to($lines, $font-size: $base-font-size) {
|
||||
line-height: 1em * $lines * $base-line-height / $font-size;
|
||||
@if not $relative-font-sizing and $font-size != $base-font-size {
|
||||
@warn "$relative-font-sizing is false but a relative font size was passed to adjust-leading-to";
|
||||
}
|
||||
line-height: $font-unit * $lines * $base-line-height / $font-size;
|
||||
}
|
||||
|
||||
// Calculate rhythm units
|
||||
@ -56,32 +87,55 @@ $base-half-leader: $base-leader / 2;
|
||||
$lines: 1,
|
||||
$font-size: $base-font-size
|
||||
) {
|
||||
$rhythm: 1em * $lines * $base-line-height / $font-size;
|
||||
@if not $relative-font-sizing and $font-size != $base-font-size {
|
||||
@warn "$relative-font-sizing is false but a relative font size was passed to the rhythm function";
|
||||
}
|
||||
$rhythm: $font-unit * $lines * $base-line-height / $font-size;
|
||||
@return $rhythm;
|
||||
}
|
||||
|
||||
@function lines-for-font-size($font-size) {
|
||||
$lines: ceil($font-size / $base-line-height);
|
||||
@if $lines * $base-line-height - $font-size < $min-line-padding * 2 {
|
||||
$lines: $lines + 1;
|
||||
}
|
||||
@return $lines;
|
||||
}
|
||||
|
||||
// Apply leading whitespace
|
||||
@mixin leader($lines: 1, $font-size: $base-font-size, $property: margin) {
|
||||
#{$property}-top: rhythm($lines, $font-size);
|
||||
$leader: rhythm($lines, $font-size);
|
||||
@if unit($leader) == px {
|
||||
$leader: floor($leader)
|
||||
}
|
||||
#{$property}-top: $leader;
|
||||
}
|
||||
|
||||
// Apply leading whitespace as padding
|
||||
@mixin padding-leader($lines: 1, $font-size: $base-font-size) {
|
||||
@include leader($lines, $font-size, padding);
|
||||
}
|
||||
|
||||
// Apply leading whitespace as margin
|
||||
@mixin margin-leader($lines: 1, $font-size: $base-font-size) {
|
||||
@include leader($lines, $font-size, margin);
|
||||
}
|
||||
|
||||
// Apply trailing whitespace
|
||||
@mixin trailer($lines: 1, $font-size: $base-font-size, $property: margin) {
|
||||
#{$property}-bottom: rhythm($lines, $font-size);
|
||||
$leader: rhythm($lines, $font-size);
|
||||
@if unit($leader) == px {
|
||||
$leader: ceil($leader)
|
||||
}
|
||||
#{$property}-bottom: $leader;
|
||||
}
|
||||
|
||||
// Apply trailing whitespace as padding
|
||||
@mixin padding-trailer($lines: 1, $font-size: $base-font-size) {
|
||||
@include trailer($lines, $font-size, padding);
|
||||
}
|
||||
|
||||
// Apply trailing whitespace as margin
|
||||
@mixin margin-trailer($lines: 1, $font-size: $base-font-size) {
|
||||
@include trailer($lines, $font-size, margin);
|
||||
}
|
||||
@ -95,21 +149,28 @@ $base-half-leader: $base-leader / 2;
|
||||
@include trailer($trailer, $font-size);
|
||||
}
|
||||
|
||||
// Apply a border width to any side without destroying the vertical rhythm
|
||||
// Apply a border width to any side without destroying the vertical rhythm.
|
||||
// The available space ($lines) must be greater than the width of your border.
|
||||
@mixin apply-side-rhythm-border($side, $width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
||||
@if not $relative-font-sizing and $font-size != $base-font-size {
|
||||
@warn "$relative-font-sizing is false but a relative font size was passed to apply-side-rhythm-border";
|
||||
}
|
||||
border-#{$side}: {
|
||||
style: $border-style;
|
||||
width: 1em * $width / $font-size;
|
||||
width: $font-unit * $width / $font-size;
|
||||
};
|
||||
padding-#{$side}: 1em / $font-size * ($lines * $base-line-height - $width);
|
||||
padding-#{$side}: $font-unit / $font-size * ($lines * $base-line-height - $width);
|
||||
}
|
||||
|
||||
// Aplly rhythm borders equally to all sides
|
||||
@mixin rhythm-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
||||
@if not $relative-font-sizing and $font-size != $base-font-size {
|
||||
@warn "$relative-font-sizing is false but a relative font size was passed to rhythm-borders";
|
||||
}
|
||||
border: {
|
||||
style: $border-style;
|
||||
width: 1em * $width / $font-size; };
|
||||
padding: 1em / $font-size * ($lines * $base-line-height - $width);
|
||||
width: $font-unit * $width / $font-size; };
|
||||
padding: $font-unit / $font-size * ($lines * $base-line-height - $width);
|
||||
}
|
||||
|
||||
// Apply a leading rhythm border
|
||||
|
@ -2,7 +2,7 @@
|
||||
@mixin no-bullet {
|
||||
list-style-image : none;
|
||||
list-style-type : none;
|
||||
margin-left : 0px;
|
||||
margin-left : 0;
|
||||
}
|
||||
|
||||
// turns off the bullets for an entire list
|
||||
|
@ -0,0 +1,12 @@
|
||||
// Prevent long urls and text from breaking layouts
|
||||
// [originally from perishablepress.com](http://perishablepress.com/press/2010/06/01/wrapping-content/)
|
||||
@mixin force-wrap {
|
||||
white-space: pre; // CSS 2.0
|
||||
white-space: pre-wrap; // CSS 2.1
|
||||
white-space: pre-line; // CSS 3.0
|
||||
white-space: -pre-wrap; // Opera 4-6
|
||||
white-space: -o-pre-wrap; // Opera 7
|
||||
white-space: -moz-pre-wrap; // Mozilla
|
||||
white-space: -hp-pre-wrap; // HP Printers
|
||||
word-wrap: break-word; // IE 5+
|
||||
}
|
@ -18,7 +18,7 @@
|
||||
// [Easy Clearing](http://www.positioniseverything.net/easyclearing.html)
|
||||
// has the advantage of allowing positioned elements to hang
|
||||
// outside the bounds of the container at the expense of more tricky CSS.
|
||||
@mixin pie-clearfix {
|
||||
@mixin legacy-pie-clearfix {
|
||||
&:after {
|
||||
content : "\0020";
|
||||
display : block;
|
||||
@ -29,3 +29,16 @@
|
||||
}
|
||||
@include has-layout;
|
||||
}
|
||||
|
||||
// This is an updated version of the PIE clearfix method that reduces the amount of CSS output.
|
||||
// If you need to support Firefox before 3.5 you need to use `legacy-pie-clearfix` instead.
|
||||
//
|
||||
// Adapted from: [A new micro clearfix hack](http://nicolasgallagher.com/micro-clearfix-hack/)
|
||||
@mixin pie-clearfix {
|
||||
&:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
@include has-layout;
|
||||
}
|
||||
|
@ -1,77 +1,96 @@
|
||||
<!--
|
||||
PIE: CSS3 rendering for IE
|
||||
Version 1.0beta3
|
||||
Version 1.0beta5
|
||||
http://css3pie.com
|
||||
Dual-licensed for use under the Apache License Version 2.0 or the General Public License (GPL) Version 2.
|
||||
-->
|
||||
<PUBLIC:COMPONENT lightWeight="true">
|
||||
<!-- saved from url=(0014)about:internet -->
|
||||
<PUBLIC:ATTACH EVENT="oncontentready" FOR="element" ONEVENT="init()" />
|
||||
<PUBLIC:ATTACH EVENT="ondocumentready" FOR="element" ONEVENT="init()" />
|
||||
<PUBLIC:ATTACH EVENT="ondetach" FOR="element" ONEVENT="cleanup()" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var doc = element.document;var h=window.PIE;
|
||||
if(!h){h=window.PIE={I:"-pie-",Na:"Pie",Ja:"pie_",Bb:{TD:1,TH:1}};try{doc.execCommand("BackgroundImageCache",false,true)}catch(J){}h.D=function(){for(var a=4,b=doc.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="<!--[if gt IE "+ ++a+"]><i></i><![endif]--\>",c[0];);return a}();if(h.D===6)h.I=h.I.replace(/^-/,"");h.Wa=h.D===8&&doc.documentMode;h.n={Aa:function(a){var b=h.ec;if(!b){b=h.ec=doc.createDocumentFragment();b.namespaces.add("css3vml","urn:schemas-microsoft-com:vml")}return b.createElement("css3vml:"+a)},
|
||||
oa:function(a){return a&&a._pieId||(a._pieId=+new Date+Math.random())},$a:function(a){var b,c,g,e,d=arguments;b=1;for(c=d.length;b<c;b++){e=d[b];for(g in e)if(e.hasOwnProperty(g))a[g]=e[g]}return a},Hb:function(a,b,c){var g=h.Yb||(h.Yb={}),e=g[a],d;if(e)b.call(c,e);else{d=new Image;d.onload=function(){e=g[a]={g:d.width,e:d.height};b.call(c,e);d.onload=null};d.src=a}}};h.ea=function(){this.ab=[];this.vb={}};h.ea.prototype={W:function(a){var b=h.n.oa(a),c=this.vb,g=this.ab;if(!(b in c)){c[b]=g.length;
|
||||
g.push(a)}},Ga:function(a){a=h.n.oa(a);var b=this.vb;if(a&&a in b){delete this.ab[b[a]];delete b[a]}},Ca:function(){for(var a=this.ab,b=a.length;b--;)a[b]&&a[b]()}};if(h.Wa===8){h.La=new h.ea;setInterval(function(){h.La.Ca()},250)}h.F=new h.ea;window.attachEvent("onbeforeunload",function(){h.F.Ca()});h.F.ya=function(a,b,c){a.attachEvent(b,c);this.W(function(){a.detachEvent(b,c)})};(function(){function a(){h.ta.Ca()}h.ta=new h.ea;h.F.ya(window,"onresize",a)})();(function(){function a(){h.Ma.Ca()}h.Ma=
|
||||
new h.ea;h.F.ya(window,"onscroll",a);h.ta.W(a)})();(function(){function a(){c=h.Ka.rc()}function b(){if(c){for(var g=0,e=c.length;g<e;g++)h.attach(c[g]);c=0}}var c;h.F.ya(window,"onbeforeprint",a);h.F.ya(window,"onafterprint",b)})();h.i=function(){function a(d){this.w=d}var b=doc.createElement("length-calc"),c=b.style,g={},e={};c.position="absolute";c.top=c.left=-9999;a.prototype={bb:/(px|em|ex|mm|cm|in|pt|pc|%)$/,qb:function(){var d=g[this.w];if(d===void 0)d=g[this.w]=parseFloat(this.w);return d},
|
||||
Ua:function(){var d=e[this.w];if(!d){d=this.w.match(this.bb);d=e[this.w]=d&&d[0]||"px"}return d},a:function(d,f){var i=this.qb(),j=this.Ua();switch(j){case "px":return i;case "%":return i*(typeof f==="function"?f():f)/100;case "em":return i*this.ob(d);case "ex":return i*this.ob(d)/2;default:return i*a.oc[j]}},ob:function(d){var f=d.currentStyle.fontSize;if(f.indexOf("px")>0)return parseFloat(f);else{b.style.width="1em";d.appendChild(b);f=b.offsetWidth;b.parentNode!==d&&d.removeChild(b);return f}}};
|
||||
a.oc=function(){var d=["mm","cm","in","pt","pc"],f={},i=doc.documentElement,j=d.length,k;for(i.appendChild(b);j--;){k=d[j];b.style.width="100"+k;f[k]=b.offsetWidth/100}i.removeChild(b);return f}();a.kb=new a("0");return a}();h.Ha=function(){function a(e){this.Q=e}var b=new h.i("50%"),c={top:1,center:1,bottom:1},g={left:1,center:1,right:1};a.prototype={yc:function(){if(!this.nb){var e=this.Q,d=e.length,f=h.i.kb,i=h.q.fa.ba;f=["left",f,"top",f];if(d===1){e.push({type:i,value:"center"});d++}if(d===2){i&
|
||||
(e[0].type|e[1].type)&&e[0].value in c&&e[1].value in g&&e.push(e.shift());if(e[0].type&i)if(e[0].value==="center")f[1]=b;else f[0]=e[0].value;else if(e[0].T())f[1]=new h.i(e[0].value);if(e[1].type&i)if(e[1].value==="center")f[3]=b;else f[2]=e[1].value;else if(e[1].T())f[3]=new h.i(e[1].value)}this.nb=f}return this.nb},coords:function(e,d,f){var i=this.yc(),j=i[1].a(e,d);e=i[3].a(e,f);return{x:i[0]==="right"?d-j:j,y:i[2]==="bottom"?f-e:e}}};return a}();h.Jb=function(){function a(b){this.w=b}a.prototype=
|
||||
{bb:/[a-z]+$/i,Ua:function(){return this.dc||(this.dc=this.w.match(this.bb)[0].toLowerCase())},qc:function(){var b=this.Xb,c;if(b===undefined){b=this.Ua();c=parseFloat(this.w,10);b=this.Xb=b==="deg"?c:b==="rad"?c/Math.PI*180:b==="grad"?c/400*360:b==="turn"?c*360:0}return b}};return a}();h.aa=function(){function a(b){this.w=b}a.Mc=/\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d+|\d*\.\d+)\s*\)\s*/;a.prototype={parse:function(){if(!this.wa){var b=this.w,c=b.match(a.Mc);if(c){this.wa=
|
||||
"rgb("+c[1]+","+c[2]+","+c[3]+")";this.lb=parseFloat(c[4])}else{this.wa=b;this.lb=b==="transparent"?0:1}}},value:function(b){this.parse();return this.wa==="currentColor"?b.currentStyle.color:this.wa},ha:function(){this.parse();return this.lb}};return a}();h.q=function(){function a(c){this.Ba=c;this.ch=0;this.Q=[];this.ra=0}var b=a.fa={sa:1,hb:2,$:4,Sb:8,ib:16,ba:32,z:64,ca:128,da:256,ua:512,Vb:1024,URL:2048};a.jb=function(c,g){this.type=c;this.value=g};a.jb.prototype={Ya:function(){return this.type&
|
||||
b.z||this.type&b.ca&&this.value==="0"},T:function(){return this.Ya()||this.type&b.ua}};a.prototype={Vc:/\s/,Gc:/^[\+\-]?(\d*\.)?\d+/,url:/^url\(\s*("([^"]*)"|'([^']*)'|([!#$%&*-~]*))\s*\)/i,ub:/^\-?[_a-z][\w-]*/i,Qc:/^("([^"]*)"|'([^']*)')/,Ac:/^#([\da-f]{6}|[\da-f]{3})/i,Tc:{px:b.z,em:b.z,ex:b.z,mm:b.z,cm:b.z,"in":b.z,pt:b.z,pc:b.z,deg:b.sa,rad:b.sa,grad:b.sa},lc:{aqua:1,black:1,blue:1,fuchsia:1,gray:1,green:1,lime:1,maroon:1,navy:1,olive:1,purple:1,red:1,silver:1,teal:1,white:1,yellow:1,currentColor:1},
|
||||
kc:{rgb:1,rgba:1,hsl:1,hsla:1},next:function(c){function g(u,n){u=new a.jb(u,n);if(!c){k.Q.push(u);k.ra++}return u}function e(){k.ra++;return null}var d,f,i,j,k=this;if(this.ra<this.Q.length)return this.Q[this.ra++];for(;this.Vc.test(this.Ba.charAt(this.ch));)this.ch++;if(this.ch>=this.Ba.length)return e();f=this.ch;d=this.Ba.substring(this.ch);i=d.charAt(0);switch(i){case "#":if(j=d.match(this.Ac)){this.ch+=j[0].length;return g(b.$,j[0])}break;case '"':case "'":if(j=d.match(this.Qc)){this.ch+=j[0].length;
|
||||
return g(b.Vb,j[2]||j[3]||"")}break;case "/":case ",":this.ch++;return g(b.da,i);case "u":if(j=d.match(this.url)){this.ch+=j[0].length;return g(b.URL,j[2]||j[3]||j[4]||"")}}if(j=d.match(this.Gc)){i=j[0];this.ch+=i.length;if(d.charAt(i.length)==="%"){this.ch++;return g(b.ua,i+"%")}if(j=d.substring(i.length).match(this.ub)){i+=j[0];this.ch+=j[0].length;return g(this.Tc[j[0].toLowerCase()]||b.Sb,i)}return g(b.ca,i)}if(j=d.match(this.ub)){i=j[0];this.ch+=i.length;if(i.toLowerCase()in this.lc)return g(b.$,
|
||||
i);if(d.charAt(i.length)==="("){this.ch++;if(i.toLowerCase()in this.kc){d=function(u){return u&&u.type&b.ca};j=function(u){return u&&u.type&(b.ca|b.ua)};var m=function(u,n){return u&&u.value===n},l=function(){return k.next(1)};if((i.charAt(0)==="r"?j(l()):d(l()))&&m(l(),",")&&j(l())&&m(l(),",")&&j(l())&&(i==="rgb"||i==="hsa"||m(l(),",")&&d(l()))&&m(l(),")"))return g(b.$,this.Ba.substring(f,this.ch));return e()}return g(b.ib,i+"(")}return g(b.ba,i)}this.ch++;return g(b.hb,i)},v:function(){return this.Q[this.ra-- -
|
||||
2]},all:function(){for(;this.next(););return this.Q},Z:function(c,g){for(var e=[],d,f;d=this.next();){if(c(d)){f=true;this.v();break}e.push(d)}return g&&!f?null:e}};return a}();var K=function(a){this.d=a};K.prototype={J:0,Kc:function(){var a=this.Oa,b;return!a||(b=this.m())&&(a.x!==b.x||a.y!==b.y)},Nc:function(){var a=this.Oa,b;return!a||(b=this.m())&&(a.g!==b.g||a.e!==b.e)},pb:function(){var a=this.d.getBoundingClientRect();return{x:a.left,y:a.top,g:a.right-a.left,e:a.bottom-a.top}},m:function(){return this.J?
|
||||
this.xa||(this.xa=this.pb()):this.pb()},zc:function(){return!!this.Oa},Da:function(){++this.J},Fa:function(){if(!--this.J){if(this.xa)this.Oa=this.xa;this.xa=null}}};(function(){function a(b){var c=h.n.oa(b);return function(){if(this.J){var g=this.mb||(this.mb={});return c in g?g[c]:(g[c]=b.call(this))}else return b.call(this)}}h.p={J:0,V:function(b){function c(g){this.d=g}h.n.$a(c.prototype,h.p,b);c.cc={};return c},j:function(){var b=this.la(),c=this.constructor.cc;return b?b in c?c[b]:(c[b]=this.X(b)):
|
||||
null},la:a(function(){var b=this.d,c=this.constructor,g=b.style;b=b.currentStyle;var e=this.ja,d=this.qa,f=c.ac||(c.ac=h.I+e);c=c.bc||(c.bc=h.Na+d.charAt(0).toUpperCase()+d.substring(1));return g[c]||b.getAttribute(f)||g[d]||b.getAttribute(e)}),f:a(function(){return!!this.j()}),C:a(function(){var b=this.la(),c=b!==this.Zb;this.Zb=b;return c}),ia:a,Da:function(){++this.J},Fa:function(){--this.J||delete this.mb}}})();h.Lb=h.p.V({ja:h.I+"background",qa:h.Na+"Background",gc:{scroll:1,fixed:1,local:1},
|
||||
Ea:{"repeat-x":1,"repeat-y":1,repeat:1,"no-repeat":1},Hc:{"padding-box":1,"border-box":1,"content-box":1},jc:{"padding-box":1,"border-box":1},Lc:{top:1,right:1,bottom:1,left:1,center:1},Oc:{contain:1,cover:1},X:function(a){function b(v){return v.T()||v.type&j&&v.value in u}function c(v){return v.T()&&new h.i(v.value)||v.value==="auto"&&"auto"}var g=this.d.currentStyle,e,d,f=h.q.fa,i=f.da,j=f.ba,k=f.$,m,l,u=this.Lc,n,q,t=null;if(this.Ta()){a=new h.q(a);t={images:[]};for(d={};e=a.next();){m=e.type;
|
||||
l=e.value;if(!d.type&&m&f.ib&&l==="linear-gradient("){n={Y:[],type:"linear-gradient"};for(q={};e=a.next();){m=e.type;l=e.value;if(m&f.hb&&l===")"){q.color&&n.Y.push(q);n.Y.length>1&&h.n.$a(d,n);break}if(m&k){if(n.Ra||n.Va){e=a.v();if(e.type!==i)break;a.next()}q={color:new h.aa(l)};e=a.next();if(e.T())q.xb=new h.i(e.value);else a.v()}else if(m&f.sa&&!n.Ra&&!q.color&&!n.Y.length)n.Ra=new h.Jb(e.value);else if(b(e)&&!n.Va&&!q.color&&!n.Y.length){a.v();n.Va=new h.Ha(a.Z(function(v){return!b(v)},false))}else if(m&
|
||||
i&&l===","){if(q.color){n.Y.push(q);q={}}}else break}}else if(!d.type&&m&f.URL){d.url=l;d.type="image"}else if(b(e)&&!d.size){a.v();d.position=new h.Ha(a.Z(function(v){return!b(v)},false))}else if(m&j)if(l in this.Ea)d.repeat=l;else if(l in this.Hc){d.origin=l;if(l in this.jc)d.clip=l}else{if(l in this.gc)d.Zc=l}else if(m&k&&!t.color)t.color=new h.aa(l);else if(m&i)if(l==="/"){e=a.next();m=e.type;l=e.value;if(m&j&&l in this.Oc)d.size=l;else if(l=c(e))d.size={g:l,e:c(a.next())||a.v()&&l}}else{if(l===
|
||||
","&&d.type){t.images.push(d);d={}}}else return null}d.type&&t.images.push(d)}else this.Fb(function(){var v=g.backgroundPositionX,x=g.backgroundPositionY,r=g.backgroundImage,o=g.backgroundColor;t={};if(o!=="transparent")t.color=new h.aa(o);if(r!=="none")t.images=[{type:"image",url:(new h.q(r)).next().value,repeat:g.backgroundRepeat,position:new h.Ha((new h.q(v+" "+x)).all())}]});return t&&(t.color||t.images&&t.images[0])?t:null},Fb:function(a){var b=this.d.runtimeStyle,c=b.backgroundImage,g=b.backgroundColor;
|
||||
if(c)b.backgroundImage="";if(g)b.backgroundColor="";a=a.call(this);if(c)b.backgroundImage=c;if(g)b.backgroundColor=g;return a},la:h.p.ia(function(){return this.Ta()||this.Fb(function(){var a=this.d.currentStyle;return a.backgroundColor+" "+a.backgroundImage+" "+a.backgroundRepeat+" "+a.backgroundPositionX+" "+a.backgroundPositionY})}),Ta:h.p.ia(function(){var a=this.d;return a.style[this.qa]||a.currentStyle.getAttribute(this.ja)}),wb:function(){var a=0;if(h.D<7){a=this.d;a=""+(a.style[h.Na+"PngFix"]||
|
||||
a.currentStyle.getAttribute(h.I+"png-fix"))==="true"}return a},f:h.p.ia(function(){return(this.Ta()||this.wb())&&!!this.j()})});h.Pb=h.p.V({Ab:["Top","Right","Bottom","Left"],Fc:{bd:"1px",$c:"3px",ad:"5px"},X:function(){var a={},b={},c={},g=false,e=true,d=true,f=true;this.Gb(function(){for(var i=this.d.currentStyle,j=0,k,m,l,u,n,q,t;j<4;j++){l=this.Ab[j];t=l.charAt(0).toLowerCase();k=b[t]=i["border"+l+"Style"];m=i["border"+l+"Color"];l=i["border"+l+"Width"];if(j>0){if(k!==u)d=false;if(m!==n)e=false;
|
||||
if(l!==q)f=false}u=k;n=m;q=l;c[t]=new h.aa(m);l=a[t]=new h.i(b[t]==="none"?"0":this.Fc[l]||l);if(l.a(this.d)>0)g=true}});return g?{gb:a,Rc:b,mc:c,Wc:f,nc:e,Sc:d}:null},la:h.p.ia(function(){var a=this.d,b=a.currentStyle,c;a.tagName in h.Bb&&a.offsetParent.currentStyle.borderCollapse==="collapse"||this.Gb(function(){c=b.borderWidth+"|"+b.borderStyle+"|"+b.borderColor});return c}),Gb:function(a){var b=this.d.runtimeStyle,c=b.borderWidth,g=b.borderColor;if(c)b.borderWidth="";if(g)b.borderColor="";a=a.call(this);
|
||||
if(c)b.borderWidth=c;if(g)b.borderColor=g;return a}});(function(){h.Ia=h.p.V({ja:"border-radius",qa:"borderRadius",X:function(b){var c=null,g,e,d,f,i=false;if(b){e=new h.q(b);var j=function(){for(var k=[],m;(d=e.next())&&d.T();){f=new h.i(d.value);m=f.qb();if(m<0)return null;if(m>0)i=true;k.push(f)}return k.length>0&&k.length<5?{tl:k[0],tr:k[1]||k[0],br:k[2]||k[0],bl:k[3]||k[1]||k[0]}:null};if(b=j()){if(d){if(d.type&h.q.fa.da&&d.value==="/")g=j()}else g=b;if(i&&b&&g)c={x:b,y:g}}}return c}});var a=
|
||||
h.i.kb;a={tl:a,tr:a,br:a,bl:a};h.Ia.Ib={x:a,y:a}})();h.Nb=h.p.V({ja:"border-image",qa:"borderImage",Ea:{stretch:1,round:1,repeat:1,space:1},X:function(a){var b=null,c,g,e,d,f,i,j=0,k,m=h.q.fa,l=m.ba,u=m.ca,n=m.z,q=m.ua;if(a){c=new h.q(a);b={};for(var t=function(r){return r&&r.type&m.da&&r.value==="/"},v=function(r){return r&&r.type&l&&r.value==="fill"},x=function(){d=c.Z(function(r){return!(r.type&(u|q))});if(v(c.next())&&!b.fill)b.fill=true;else c.v();if(t(c.next())){j++;f=c.Z(function(){return!(g.type&
|
||||
(u|q|n))&&!(g.type&l&&g.value==="auto")});if(t(c.next())){j++;i=c.Z(function(){return!(g.type&(u|n))})}}else c.v()};g=c.next();){a=g.type;e=g.value;if(a&(u|q)&&!d){c.v();x()}else if(v(g)&&!b.fill){b.fill=true;x()}else if(a&l&&this.Ea[e]&&!b.repeat){b.repeat={e:e};if(g=c.next())if(g.type&l&&this.Ea[g.value])b.repeat.db=g.value;else c.v()}else if(a&m.URL&&!b.src)b.src=e;else return null}if(!b.src||!d||d.length<1||d.length>4||f&&f.length>4||j===1&&f.length<1||i&&i.length>4||j===2&&i.length<1)return null;
|
||||
if(!b.repeat)b.repeat={e:"stretch"};if(!b.repeat.db)b.repeat.db=b.repeat.e;a=function(r,o){return{P:o(r[0]),O:o(r[1]||r[0]),K:o(r[2]||r[0]),M:o(r[3]||r[1]||r[0])}};b.slice=a(d,function(r){return new h.i(r.type&u?r.value+"px":r.value)});b.width=f&&f.length>0?a(f,function(r){return r.type&(n|q)?new h.i(r.value):r.value}):(k=this.d.currentStyle)&&{P:new h.i(k.borderTopWidth),O:new h.i(k.borderRightWidth),K:new h.i(k.borderBottomWidth),M:new h.i(k.borderLeftWidth)};b.pa=a(i||[0],function(r){return r.type&
|
||||
n?new h.i(r.value):r.value})}return b}});h.Rb=h.p.V({ja:"box-shadow",qa:"boxShadow",X:function(a){var b,c=h.i,g=h.q.fa,e;if(a){e=new h.q(a);b={pa:[],Xa:[]};for(a=function(){for(var d,f,i,j,k,m;d=e.next();){i=d.value;f=d.type;if(f&g.da&&i===",")break;else if(d.Ya()&&!k){e.v();k=e.Z(function(l){return!l.Ya()})}else if(f&g.$&&!j)j=i;else if(f&g.ba&&i==="inset"&&!m)m=true;else return false}d=k&&k.length;if(d>1&&d<5){(m?b.Xa:b.pa).push({Xc:new c(k[0].value),Yc:new c(k[1].value),blur:new c(k[2]?k[2].value:
|
||||
"0"),Pc:new c(k[3]?k[3].value:"0"),color:new h.aa(j||"currentColor")});return true}return false};a(););}return b&&(b.Xa.length||b.pa.length)?b:null}});h.Wb=h.p.V({la:h.p.ia(function(){var a=this.d.currentStyle;return a.visibility+"|"+a.display}),X:function(){var a=this.d,b=a.runtimeStyle;a=a.currentStyle;var c=b.visibility,g;b.visibility="";g=a.visibility;b.visibility=c;return{Uc:g!=="hidden",sc:a.display!=="none"}},f:function(){return false}});h.A={U:function(a){function b(c,g,e,d){this.d=c;this.o=
|
||||
g;this.h=e;this.parent=d}h.n.$a(b.prototype,h.A,a);return b},Za:false,N:function(){return false},Cb:function(){this.k();this.f()&&this.S()},cb:function(){this.Za=true},Db:function(){this.f()?this.S():this.k()},Qa:function(a,b){this.zb(a);for(var c=this.ga||(this.ga=[]),g=a+1,e=c.length,d;g<e;g++)if(d=c[g])break;c[a]=b;this.u().insertBefore(b,d||null)},ma:function(a){var b=this.ga;return b&&b[a]||null},zb:function(a){var b=this.ma(a),c=this.va;if(b&&c){c.removeChild(b);this.ga[a]=null}},na:function(a,
|
||||
b,c,g){var e=this.Pa||(this.Pa={}),d=e[a];if(!d){d=e[a]=h.n.Aa("shape");if(b)d.appendChild(d[b]=h.n.Aa(b));if(g){c=this.ma(g);if(!c){this.Qa(g,doc.createElement("group"+g));c=this.ma(g)}}c.appendChild(d);a=d.style;a.position="absolute";a.left=a.top=0;a.behavior="url(#default#VML)"}return d},Sa:function(a){var b=this.Pa,c=b&&b[a];if(c){c.parentNode.removeChild(c);delete b[a]}return!!c},sb:function(a){var b=this.d,c=this.o.m(),g=c.g,e=c.e,d,f,i,j,k,m;c=a.x.tl.a(b,g);d=a.y.tl.a(b,e);f=a.x.tr.a(b,g);
|
||||
i=a.y.tr.a(b,e);j=a.x.br.a(b,g);k=a.y.br.a(b,e);m=a.x.bl.a(b,g);a=a.y.bl.a(b,e);g=Math.min(g/(c+f),e/(i+k),g/(m+j),e/(d+a));if(g<1){c*=g;d*=g;f*=g;i*=g;j*=g;k*=g;m*=g;a*=g}return{x:{tl:c,tr:f,br:j,bl:m},y:{tl:d,tr:i,br:k,bl:a}}},ka:function(a,b,c){b=b||1;var g,e,d=this.o.m();e=d.g*b;d=d.e*b;var f=this.h.s,i=Math.floor,j=Math.ceil,k=a?a.P*b:0,m=a?a.O*b:0,l=a?a.K*b:0;a=a?a.M*b:0;var u,n,q,t,v;if(c||f.f()){g=this.sb(c||f.j());c=g.x.tl*b;f=g.y.tl*b;u=g.x.tr*b;n=g.y.tr*b;q=g.x.br*b;t=g.y.br*b;v=g.x.bl*
|
||||
b;b=g.y.bl*b;e="m"+i(a)+","+i(f)+"qy"+i(c)+","+i(k)+"l"+j(e-u)+","+i(k)+"qx"+j(e-m)+","+i(n)+"l"+j(e-m)+","+j(d-t)+"qy"+j(e-q)+","+j(d-l)+"l"+i(v)+","+j(d-l)+"qx"+i(a)+","+j(d-b)+" x e"}else e="m"+i(a)+","+i(k)+"l"+j(e-m)+","+i(k)+"l"+j(e-m)+","+j(d-l)+"l"+i(a)+","+j(d-l)+"xe";return e},u:function(){var a=this.parent.ma(this.B),b;if(!a){a=doc.createElement(this.za);b=a.style;b.position="absolute";b.top=b.left=0;this.parent.Qa(this.B,a)}return a},k:function(){this.parent.zb(this.B);delete this.Pa;
|
||||
delete this.ga}};h.Ub=h.A.U({f:function(){var a=this.hc;for(var b in a)if(a.hasOwnProperty(b)&&a[b].f())return true;return false},N:function(){return this.h.eb.C()},cb:function(){if(this.f()){var a=this.rb(),b=a,c;a=a.currentStyle;var g=a.position,e=this.u().style,d=0,f=0;f=this.o.m();if(g==="fixed"&&h.D>6){d=f.x;f=f.y;b=g}else{do b=b.offsetParent;while(b&&b.currentStyle.position==="static");if(b){c=b.getBoundingClientRect();b=b.currentStyle;d=f.x-c.left-(parseFloat(b.borderLeftWidth)||0);f=f.y-c.top-
|
||||
(parseFloat(b.borderTopWidth)||0)}else{b=doc.documentElement;d=f.x+b.scrollLeft-b.clientLeft;f=f.y+b.scrollTop-b.clientTop}b="absolute"}e.position=b;e.left=d;e.top=f;e.zIndex=g==="static"?-1:a.zIndex;this.Za=true}},Db:function(){},Eb:function(){var a=this.h.eb.j();this.u().style.display=a.Uc&&a.sc?"":"none"},Cb:function(){this.f()?this.Eb():this.k()},rb:function(){var a=this.d;return a.tagName in h.Bb?a.offsetParent:a},u:function(){var a=this.va,b;if(!a){b=this.rb();a=this.va=doc.createElement("css3-container");
|
||||
this.Eb();b.parentNode.insertBefore(a,b)}return a},k:function(){var a=this.va,b;if(a&&(b=a.parentNode))b.removeChild(a);delete this.va;delete this.ga}});h.Kb=h.A.U({B:2,za:"background",N:function(){var a=this.h;return a.G.C()||a.s.C()},f:function(){var a=this.h;return a.L.f()||a.s.f()||a.G.f()||a.R.f()&&a.R.j().Xa},S:function(){var a=this.o.m();if(a.g&&a.e){this.tc();this.uc()}},tc:function(){var a=this.h.G.j(),b=this.o.m(),c=this.d,g=a&&a.color,e,d;if(g&&g.ha()>0){this.tb();a=this.na("bgColor","fill",
|
||||
this.u(),1);e=b.g;b=b.e;a.stroked=false;a.coordsize=e*2+","+b*2;a.coordorigin="1,1";a.path=this.ka(null,2);d=a.style;d.width=e;d.height=b;a.fill.color=g.value(c);c=g.ha();if(c<1)a.fill.opacity=c}else this.Sa("bgColor")},uc:function(){var a=this.h.G.j(),b=this.o.m();a=a&&a.images;var c,g,e,d,f;if(a){this.tb();g=b.g;e=b.e;for(f=a.length;f--;){b=a[f];c=this.na("bgImage"+f,"fill",this.u(),2);c.stroked=false;c.fill.type="tile";c.fillcolor="none";c.coordsize=g*2+","+e*2;c.coordorigin="1,1";c.path=this.ka(0,
|
||||
2);d=c.style;d.width=g;d.height=e;if(b.type==="linear-gradient")this.fc(c,b);else{c.fill.src=b.url;this.Jc(c,f)}}}for(f=a?a.length:0;this.Sa("bgImage"+f++););},Jc:function(a,b){h.n.Hb(a.fill.src,function(c){var g=a.fill,e=this.d,d=this.o.m(),f=d.g;d=d.e;var i=this.h,j=i.H.j(),k=j&&j.gb;j=k?k.t.a(e):0;var m=k?k.r.a(e):0,l=k?k.b.a(e):0;k=k?k.l.a(e):0;i=i.G.j().images[b];e=i.position?i.position.coords(e,f-c.g-k-m,d-c.e-j-l):{x:0,y:0};i=i.repeat;l=m=0;var u=f+1,n=d+1,q=h.D===8?0:1;k=Math.round(e.x)+k+
|
||||
0.5;j=Math.round(e.y)+j+0.5;g.position=k/f+","+j/d;if(i&&i!=="repeat"){if(i==="repeat-x"||i==="no-repeat"){m=j+1;n=j+c.e+q}if(i==="repeat-y"||i==="no-repeat"){l=k+1;u=k+c.g+q}a.style.clip="rect("+m+"px,"+u+"px,"+n+"px,"+l+"px)"}},this)},fc:function(a,b){function c(A,B,y,G,H){if(y===0||y===180)return[G,B];else if(y===90||y===270)return[A,H];else{y=Math.tan(-y*u/180);A=y*A-B;B=-1/y;G=B*G-H;H=B-y;return[(G-A)/H,(y*G-B*A)/H]}}function g(){x=m>=90&&m<270?j:0;r=m<180?k:0;o=j-x;s=k-r}function e(){for(;m<
|
||||
0;)m+=360;m%=360}function d(A,B){var y=B[0]-A[0];A=B[1]-A[1];return Math.abs(y===0?A:A===0?y:Math.sqrt(y*y+A*A))}var f=this.d,i=this.o.m(),j=i.g,k=i.e;a=a.fill;var m=b.Ra,l=b.Va;b=b.Y;i=b.length;var u=Math.PI,n,q,t,v,x,r,o,s,p,z,E,C;if(l){l=l.coords(f,j,k);n=l.x;q=l.y}if(m){m=m.qc();e();g();if(!l){n=x;q=r}l=c(n,q,m,o,s);t=l[0];v=l[1]}else if(l){t=j-n;v=k-q}else{n=q=t=0;v=k}l=t-n;p=v-q;if(m===void 0){m=!l?p<0?90:270:!p?l<0?180:0:-Math.atan2(p,l)/u*180;e();g()}l=m%90?Math.atan2(l*j/k,p)/u*180:m+90;
|
||||
l+=180;l%=360;z=d([n,q],[t,v]);t=d([x,r],c(x,r,m,o,s));v=[];q=d([n,q],c(n,q,m,x,r))/t*100;n=[];for(p=0;p<i;p++)n.push(b[p].xb?b[p].xb.a(f,z):p===0?0:p===i-1?z:null);for(p=1;p<i;p++){if(n[p]===null){E=n[p-1];z=p;do C=n[++z];while(C===null);n[p]=E+(C-E)/(z-p+1)}n[p]=Math.max(n[p],n[p-1])}for(p=0;p<i;p++)v.push(q+n[p]/t*100+"% "+b[p].color.value(f));a.angle=l;a.type="gradient";a.method="sigma";a.color=b[0].color.value(f);a.color2=b[i-1].color.value(f);a.colors.value=v.join(",")},tb:function(){var a=
|
||||
this.d.runtimeStyle;a.backgroundImage="url(about:blank)";a.backgroundColor="transparent"},k:function(){h.A.k.call(this);var a=this.d.runtimeStyle;a.backgroundImage=a.backgroundColor=""}});h.Ob=h.A.U({B:4,za:"border",ic:{TABLE:1,INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,IMG:1,HR:1,FIELDSET:1},Ec:{submit:1,button:1,reset:1},N:function(){var a=this.h;return a.H.C()||a.s.C()},f:function(){var a=this.h;return(a.L.f()||a.s.f()||a.G.f())&&a.H.f()},S:function(){var a=this.d,b=this.h.H.j(),c=this.o.m(),g=c.g;c=
|
||||
c.e;var e,d,f,i,j;if(b){this.Cc();b=this.wc(2);i=0;for(j=b.length;i<j;i++){f=b[i];e=this.na("borderPiece"+i,f.stroke?"stroke":"fill",this.u());e.coordsize=g*2+","+c*2;e.coordorigin="1,1";e.path=f.path;d=e.style;d.width=g;d.height=c;e.filled=!!f.fill;e.stroked=!!f.stroke;if(f.stroke){e=e.stroke;e.weight=f.fb+"px";e.color=f.color.value(a);e.dashstyle=f.stroke==="dashed"?"2 2":f.stroke==="dotted"?"1 1":"solid";e.linestyle=f.stroke==="double"&&f.fb>2?"ThinThin":"Single"}else e.fill.color=f.fill.value(a)}for(;this.Sa("borderPiece"+
|
||||
i++););}},Cc:function(){var a=this.d,b=a.currentStyle,c=a.runtimeStyle,g=a.tagName,e=h.D===6,d;if(e&&g in this.ic||g==="BUTTON"||g==="INPUT"&&a.type in this.Ec){c.borderWidth="";g=this.h.H.Ab;for(d=g.length;d--;){e=g[d];c["padding"+e]="";c["padding"+e]=(new h.i(b["padding"+e])).a(a)+(new h.i(b["border"+e+"Width"])).a(a)+(!h.D===8&&d%2?1:0)}c.borderWidth=0}else if(e){if(a.childNodes.length!==1||a.firstChild.tagName!=="ie6-mask"){b=doc.createElement("ie6-mask");g=b.style;g.visibility="visible";for(g.zoom=
|
||||
1;g=a.firstChild;)b.appendChild(g);a.appendChild(b);c.visibility="hidden"}}else c.borderColor="transparent"},wc:function(a){var b=this.d,c,g,e,d=this.h.H,f=[],i,j,k,m,l=Math.round,u,n,q;if(d.f()){c=d.j();d=c.gb;n=c.Rc;q=c.mc;if(c.Wc&&c.Sc&&c.nc){if(q.t.ha()>0){c=d.t.a(b);k=c/2;f.push({path:this.ka({P:k,O:k,K:k,M:k},a),stroke:n.t,color:q.t,fb:c})}}else{a=a||1;c=this.o.m();g=c.g;e=c.e;c=l(d.t.a(b));k=l(d.r.a(b));m=l(d.b.a(b));b=l(d.l.a(b));var t={t:c,r:k,b:m,l:b};b=this.h.s;if(b.f())u=this.sb(b.j());
|
||||
i=Math.floor;j=Math.ceil;var v=function(o,s){return u?u[o][s]:0},x=function(o,s,p,z,E,C){var A=v("x",o),B=v("y",o),y=o.charAt(1)==="r";o=o.charAt(0)==="b";return A>0&&B>0?(C?"al":"ae")+(y?j(g-A):i(A))*a+","+(o?j(e-B):i(B))*a+","+(i(A)-s)*a+","+(i(B)-p)*a+","+z*65535+","+2949075*(E?1:-1):(C?"m":"l")+(y?g-s:s)*a+","+(o?e-p:p)*a},r=function(o,s,p,z){var E=o==="t"?i(v("x","tl"))*a+","+j(s)*a:o==="r"?j(g-s)*a+","+i(v("y","tr"))*a:o==="b"?j(g-v("x","br"))*a+","+i(e-s)*a:i(s)*a+","+j(e-v("y","bl"))*a;o=
|
||||
o==="t"?j(g-v("x","tr"))*a+","+j(s)*a:o==="r"?j(g-s)*a+","+j(e-v("y","br"))*a:o==="b"?i(v("x","bl"))*a+","+i(e-s)*a:i(s)*a+","+i(v("y","tl"))*a;return p?(z?"m"+o:"")+"l"+E:(z?"m"+E:"")+"l"+o};b=function(o,s,p,z,E,C){var A=o==="l"||o==="r",B=t[o],y,G;if(B>0&&n[o]!=="none"&&q[o].ha()>0){y=t[A?o:s];s=t[A?s:o];G=t[A?o:p];p=t[A?p:o];if(n[o]==="dashed"||n[o]==="dotted"){f.push({path:x(z,y,s,C+45,0,1)+x(z,0,0,C,1,0),fill:q[o]});f.push({path:r(o,B/2,0,1),stroke:n[o],fb:B,color:q[o]});f.push({path:x(E,G,p,
|
||||
C,0,1)+x(E,0,0,C-45,1,0),fill:q[o]})}else f.push({path:x(z,y,s,C+45,0,1)+r(o,B,0,0)+x(E,G,p,C,0,0)+(n[o]==="double"&&B>2?x(E,G-i(G/3),p-i(p/3),C-45,1,0)+r(o,j(B/3*2),1,0)+x(z,y-i(y/3),s-i(s/3),C,1,0)+"x "+x(z,i(y/3),i(s/3),C+45,0,1)+r(o,i(B/3),1,0)+x(E,i(G/3),i(p/3),C,0,0):"")+x(E,0,0,C-45,1,0)+r(o,0,1,0)+x(z,0,0,C,1,0),fill:q[o]})}};b("t","l","r","tl","tr",90);b("r","t","b","tr","br",0);b("b","r","l","br","bl",-90);b("l","b","t","bl","tl",-180)}}return f},k:function(){h.A.k.call(this);this.d.runtimeStyle.borderColor=
|
||||
""}});h.Mb=h.A.U({B:5,Ic:["t","tr","r","br","b","bl","l","tl","c"],N:function(){return this.h.L.C()},f:function(){return this.h.L.f()},S:function(){var a=this.h.L.j(),b=this.o.m();this.u();var c=this.d,g=this.yb;h.n.Hb(a.src,function(e){function d(x,r,o,s,p){x=g[x].style;x.width=r;x.height=o;x.left=s;x.top=p}function f(x,r,o){for(var s=0,p=x.length;s<p;s++)g[x[s]].imagedata[r]=o}var i=b.g,j=b.e,k=a.width,m=k.P.a(c),l=k.O.a(c),u=k.K.a(c);k=k.M.a(c);var n=a.slice,q=n.P.a(c),t=n.O.a(c),v=n.K.a(c);n=
|
||||
n.M.a(c);d("tl",k,m,0,0);d("t",i-k-l,m,k,0);d("tr",l,m,i-l,0);d("r",l,j-m-u,i-l,m);d("br",l,u,i-l,j-u);d("b",i-k-l,u,k,j-u);d("bl",k,u,0,j-u);d("l",k,j-m-u,0,m);d("c",i-k-l,j-m-u,k,m);f(["tl","t","tr"],"cropBottom",(e.e-q)/e.e);f(["tl","l","bl"],"cropRight",(e.g-n)/e.g);f(["bl","b","br"],"cropTop",(e.e-v)/e.e);f(["tr","r","br"],"cropLeft",(e.g-t)/e.g);if(a.repeat.db==="stretch"){f(["l","r","c"],"cropTop",q/e.e);f(["l","r","c"],"cropBottom",v/e.e)}if(a.repeat.e==="stretch"){f(["t","b","c"],"cropLeft",
|
||||
n/e.g);f(["t","b","c"],"cropRight",t/e.g)}g.c.style.display=a.fill?"":"none"},this)},u:function(){var a=this.parent.ma(this.B),b,c,g,e=this.Ic,d=e.length;if(!a){a=doc.createElement("border-image");b=a.style;b.position="absolute";this.yb={};for(g=0;g<d;g++){c=this.yb[e[g]]=h.n.Aa("rect");c.appendChild(h.n.Aa("imagedata"));b=c.style;b.behavior="url(#default#VML)";b.position="absolute";b.top=b.left=0;c.imagedata.src=this.h.L.j().src;c.stroked=false;c.filled=false;a.appendChild(c)}this.parent.Qa(this.B,
|
||||
a)}return a}});h.Qb=h.A.U({B:1,za:"outset-box-shadow",N:function(){var a=this.h;return a.R.C()||a.s.C()},f:function(){var a=this.h.R;return a.f()&&a.j().pa[0]},S:function(){function a(y,G,H,w,D,F,I){y=b.na("shadow"+y+G,"fill",g,f-y);G=y.fill;y.coordsize=m*2+","+l*2;y.coordorigin="1,1";y.stroked=false;y.filled=true;G.color=D.value(c);if(F){G.type="gradienttitle";G.color2=G.color;G.opacity=0}y.path=I;v=y.style;v.left=H;v.top=w;v.width=m;v.height=l;return y}var b=this,c=this.d,g=this.u(),e=this.h,d=
|
||||
e.R.j().pa;e=e.s.j();var f=d.length,i=f,j,k=this.o.m(),m=k.g,l=k.e;k=h.D===8?1:0;for(var u=["tl","tr","br","bl"],n,q,t,v,x,r,o,s,p,z,E,C,A,B;i--;){q=d[i];x=q.Xc.a(c);r=q.Yc.a(c);j=q.Pc.a(c);o=q.blur.a(c);q=q.color;s=-j-o;if(!e&&o)e=h.Ia.Ib;s=this.ka({P:s,O:s,K:s,M:s},2,e);if(o){p=(j+o)*2+m;z=(j+o)*2+l;E=o*2/p;C=o*2/z;if(o-j>m/2||o-j>l/2)for(j=4;j--;){n=u[j];A=n.charAt(0)==="b";B=n.charAt(1)==="r";n=a(i,n,x,r,q,o,s);t=n.fill;t.focusposition=(B?1-E:E)+","+(A?1-C:C);t.focussize="0,0";n.style.clip="rect("+
|
||||
((A?z/2:0)+k)+"px,"+(B?p:p/2)+"px,"+(A?z:z/2)+"px,"+((B?p/2:0)+k)+"px)"}else{n=a(i,"",x,r,q,o,s);t=n.fill;t.focusposition=E+","+C;t.focussize=1-E*2+","+(1-C*2)}}else{n=a(i,"",x,r,q,o,s);x=q.ha();if(x<1)n.fill.opacity=x}}}});h.Tb=h.A.U({B:6,za:"imgEl",N:function(){var a=this.h;return this.d.src!==this.$b||a.s.C()},f:function(){var a=this.h;return a.s.f()||a.G.wb()},S:function(){this.Bc();var a=this.na("img","fill",this.u()),b=a.fill,c=this.o.m(),g=c.g;c=c.e;var e=this.h.H.j(),d=e&&e.gb,f=this.d;e=
|
||||
f.src;var i=Math.round;a.stroked=false;b.type="frame";b.src=e;b.position=0.5/g+","+0.5/c;a.coordsize=g*2+","+c*2;a.coordorigin="1,1";a.path=this.ka(d?{P:i(d.t.a(f)),O:i(d.r.a(f)),K:i(d.b.a(f)),M:i(d.l.a(f))}:0,2);a=a.style;a.width=g;a.height=c;this.$b=e},Bc:function(){this.d.runtimeStyle.filter="alpha(opacity=0)"},k:function(){h.A.k.call(this);this.d.runtimeStyle.filter=""}});h.Ka=function(){function a(f){function i(){if(!B){var w,D,F=f.currentStyle.getAttribute(c)==="true";if(!A){A=1;f.runtimeStyle.zoom=
|
||||
1;for(var I=f,M=1;I=I.previousSibling;)if(I.nodeType===1){M=0;break}if(M)f.className+=" "+h.Ja+"first-child"}p.Da();if(F&&(D=p.m())&&(w=doc.documentElement||doc.body)&&(D.y>w.clientHeight||D.x>w.clientWidth||D.y+D.e<0||D.x+D.g<0)){if(!G){G=1;h.Ma.W(i)}}else{B=1;G=A=0;h.Ma.Ga(i);z={G:new h.Lb(f),H:new h.Pb(f),L:new h.Nb(f),s:new h.Ia(f),R:new h.Rb(f),eb:new h.Wb(f)};E=[z.G,z.H,z.L,z.s,z.R,z.eb];w=new h.Ub(f,p,z);D=[new h.Qb(f,p,z,w),new h.Kb(f,p,z,w),new h.Ob(f,p,z,w),new h.Mb(f,p,z,w)];f.tagName===
|
||||
"IMG"&&D.push(new h.Tb(f,p,z,w));w.hc=D;s=[w].concat(D);if(w=f.currentStyle.getAttribute(h.I+"watch-ancestors")){C=[];w=parseInt(w,10);D=0;for(F=f.parentNode;F&&(w==="NaN"||D++<w);){C.push(F);F.attachEvent("onpropertychange",t);F.attachEvent("onmouseenter",n);F.attachEvent("onmouseleave",q);F=F.parentNode}}h.Wa===8&&h.La.W(k);k(1)}if(!y){y=1;f.attachEvent("onmove",j);f.attachEvent("onresize",j);f.attachEvent("onpropertychange",m);f.attachEvent("onmouseenter",n);f.attachEvent("onmouseleave",q);h.ta.W(j);
|
||||
h.F.W(r)}p.Fa()}}function j(){p&&p.zc()&&k()}function k(w){if(!H)if(B){var D,F;v();if(w||p.Kc()){D=0;for(F=s.length;D<F;D++)s[D].cb()}if(w||p.Nc()){D=0;for(F=s.length;D<F;D++)s[D].Db()}x()}else A||i()}function m(){var w,D,F;w=event;if(!H&&!(w&&w.propertyName in d))if(B){v();w=0;for(D=s.length;w<D;w++){F=s[w];F.Za||F.cb();F.N()&&F.Cb()}x()}else A||i()}function l(){f.className+=g}function u(){f.className=f.className.replace(e,"")}function n(){setTimeout(l,0)}function q(){setTimeout(u,0)}function t(){var w=
|
||||
event.propertyName;if(w==="className"||w==="id")m()}function v(){p.Da();for(var w=E.length;w--;)E[w].Da()}function x(){for(var w=E.length;w--;)E[w].Fa();p.Fa()}function r(){if(y){if(C)for(var w=0,D=C.length,F;w<D;w++){F=C[w];F.detachEvent("onpropertychange",t);F.detachEvent("onmouseenter",n);F.detachEvent("onmouseleave",q)}f.detachEvent("onmove",k);f.detachEvent("onresize",k);f.detachEvent("onpropertychange",m);f.detachEvent("onmouseenter",n);f.detachEvent("onmouseleave",q);h.F.Ga(r);y=0}}function o(){if(!H){var w,
|
||||
D;r();H=1;if(s){w=0;for(D=s.length;w<D;w++)s[w].k()}h.Wa===8&&h.La.Ga(k);h.ta.Ga(k);s=p=z=E=C=f=null}}var s,p=new K(f),z,E,C,A,B,y,G,H;this.Dc=i;this.update=k;this.k=o;this.vc=f}var b={},c=h.I+"lazy-init",g=" "+h.Ja+"hover",e=new RegExp("\\b"+h.Ja+"hover\\b","g"),d={background:1,bgColor:1,display:1};a.xc=function(f){var i=h.n.oa(f);return b[i]||(b[i]=new a(f))};a.k=function(f){f=h.n.oa(f);var i=b[f];if(i){i.k();delete b[f]}};a.rc=function(){var f=[],i;if(b){for(var j in b)if(b.hasOwnProperty(j)){i=
|
||||
b[j];f.push(i.vc);i.k()}b={}}return f};return a}();h.attach=function(a){h.D<9&&h.Ka.xc(a).Dc()};h.detach=function(a){h.Ka.k(a)}};
|
||||
var L=window.PIE,N=element;function init(){doc.media!=="print"&&L.attach(N)}function cleanup(){L.detach(N);L=N=0}N.readyState==="complete"&&init();
|
||||
var doc = element.document;var f=window.PIE;
|
||||
if(!f){f=window.PIE={Q:"-pie-",nb:"Pie",La:"pie_",Ac:{TD:1,TH:1},cc:{TABLE:1,THEAD:1,TBODY:1,TFOOT:1,TR:1,INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,IMG:1,HR:1},fc:{A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},Gd:{submit:1,button:1,reset:1},aa:function(){}};try{doc.execCommand("BackgroundImageCache",false,true)}catch(aa){}for(var X=4,Y=doc.createElement("div"),ca=Y.getElementsByTagName("i"),Z;Y.innerHTML="<!--[if gt IE "+ ++X+"]><i></i><![endif]--\>",ca[0];);f.V=X;if(X===6)f.Q=f.Q.replace(/^-/,"");f.Ba=doc.documentMode||
|
||||
f.V;Y.innerHTML='<v:shape adj="1"/>';Z=Y.firstChild;Z.style.behavior="url(#default#VML)";f.zc=typeof Z.adj==="object";(function(){var a,b=0,c={};f.p={Za:function(d){if(!a){a=doc.createDocumentFragment();a.namespaces.add("css3vml","urn:schemas-microsoft-com:vml")}return a.createElement("css3vml:"+d)},Aa:function(d){return d&&d._pieId||(d._pieId="_"+ ++b)},Eb:function(d){var e,g,i,j,h=arguments;e=1;for(g=h.length;e<g;e++){j=h[e];for(i in j)if(j.hasOwnProperty(i))d[i]=j[i]}return d},Rb:function(d,e,
|
||||
g){var i=c[d],j,h;if(i)Object.prototype.toString.call(i)==="[object Array]"?i.push([e,g]):e.call(g,i);else{h=c[d]=[[e,g]];j=new Image;j.onload=function(){i=c[d]={i:j.width,f:j.height};for(var k=0,n=h.length;k<n;k++)h[k][0].call(h[k][1],i);j.onload=null};j.src=d}}}})();f.Na={gc:function(a,b,c,d){function e(){k=i>=90&&i<270?b:0;n=i<180?c:0;l=b-k;q=c-n}function g(){for(;i<0;)i+=360;i%=360}var i=d.ra;d=d.zb;var j,h,k,n,l,q,s,m;if(d){d=d.coords(a,b,c);j=d.x;h=d.y}if(i){i=i.jd();g();e();if(!d){j=k;h=n}d=
|
||||
f.Na.tc(j,h,i,l,q);a=d[0];d=d[1]}else if(d){a=b-j;d=c-h}else{j=h=a=0;d=c}s=a-j;m=d-h;if(i===void 0){i=!s?m<0?90:270:!m?s<0?180:0:-Math.atan2(m,s)/Math.PI*180;g();e()}return{ra:i,xc:j,yc:h,td:a,ud:d,Vd:k,Wd:n,rd:l,sd:q,kd:s,ld:m,rc:f.Na.dc(j,h,a,d)}},tc:function(a,b,c,d,e){if(c===0||c===180)return[d,b];else if(c===90||c===270)return[a,e];else{c=Math.tan(-c*Math.PI/180);a=c*a-b;b=-1/c;d=b*d-e;e=b-c;return[(d-a)/e,(c*d-b*a)/e]}},dc:function(a,b,c,d){a=c-a;b=d-b;return Math.abs(a===0?b:b===0?a:Math.sqrt(a*
|
||||
a+b*b))}};f.ea=function(){this.Gb=[];this.oc={}};f.ea.prototype={ba:function(a){var b=f.p.Aa(a),c=this.oc,d=this.Gb;if(!(b in c)){c[b]=d.length;d.push(a)}},Ha:function(a){a=f.p.Aa(a);var b=this.oc;if(a&&a in b){delete this.Gb[b[a]];delete b[a]}},wa:function(){for(var a=this.Gb,b=a.length;b--;)a[b]&&a[b]()}};f.Oa=new f.ea;f.Oa.Qd=function(){var a=this;if(!a.Rd){setInterval(function(){a.wa()},250);a.Rd=1}};(function(){function a(){f.K.wa();window.detachEvent("onunload",a);window.PIE=null}f.K=new f.ea;
|
||||
window.attachEvent("onunload",a);f.K.sa=function(b,c,d){b.attachEvent(c,d);this.ba(function(){b.detachEvent(c,d)})}})();f.Qa=new f.ea;f.K.sa(window,"onresize",function(){f.Qa.wa()});(function(){function a(){f.mb.wa()}f.mb=new f.ea;f.K.sa(window,"onscroll",a);f.Qa.ba(a)})();(function(){function a(){c=f.kb.md()}function b(){if(c){for(var d=0,e=c.length;d<e;d++)f.attach(c[d]);c=0}}var c;f.K.sa(window,"onbeforeprint",a);f.K.sa(window,"onafterprint",b)})();f.lb=new f.ea;f.K.sa(doc,"onmouseup",function(){f.lb.wa()});
|
||||
f.ge=function(){function a(h){this.Y=h}var b=doc.createElement("length-calc"),c=doc.documentElement,d=b.style,e={},g=["mm","cm","in","pt","pc"],i=g.length,j={};d.position="absolute";d.top=d.left="-9999px";for(c.appendChild(b);i--;){b.style.width="100"+g[i];e[g[i]]=b.offsetWidth/100}c.removeChild(b);b.style.width="1em";a.prototype={Kb:/(px|em|ex|mm|cm|in|pt|pc|%)$/,ic:function(){var h=this.Id;if(h===void 0)h=this.Id=parseFloat(this.Y);return h},yb:function(){var h=this.$d;if(!h)h=this.$d=(h=this.Y.match(this.Kb))&&
|
||||
h[0]||"px";return h},a:function(h,k){var n=this.ic(),l=this.yb();switch(l){case "px":return n;case "%":return n*(typeof k==="function"?k():k)/100;case "em":return n*this.xb(h);case "ex":return n*this.xb(h)/2;default:return n*e[l]}},xb:function(h){var k=h.currentStyle.fontSize,n,l;if(k.indexOf("px")>0)return parseFloat(k);else if(h.tagName in f.cc){l=this;n=h.parentNode;return f.n(k).a(n,function(){return l.xb(n)})}else{h.appendChild(b);k=b.offsetWidth;b.parentNode===h&&h.removeChild(b);return k}}};
|
||||
f.n=function(h){return j[h]||(j[h]=new a(h))};return a}();f.Ja=function(){function a(e){this.X=e}var b=f.n("50%"),c={top:1,center:1,bottom:1},d={left:1,center:1,right:1};a.prototype={zd:function(){if(!this.ac){var e=this.X,g=e.length,i=f.v,j=i.pa,h=f.n("0");j=j.ma;h=["left",h,"top",h];if(g===1){e.push(new i.ob(j,"center"));g++}if(g===2){j&(e[0].k|e[1].k)&&e[0].d in c&&e[1].d in d&&e.push(e.shift());if(e[0].k&j)if(e[0].d==="center")h[1]=b;else h[0]=e[0].d;else if(e[0].W())h[1]=f.n(e[0].d);if(e[1].k&
|
||||
j)if(e[1].d==="center")h[3]=b;else h[2]=e[1].d;else if(e[1].W())h[3]=f.n(e[1].d)}this.ac=h}return this.ac},coords:function(e,g,i){var j=this.zd(),h=j[1].a(e,g);e=j[3].a(e,i);return{x:j[0]==="right"?g-h:h,y:j[2]==="bottom"?i-e:e}}};return a}();f.Ka=function(){function a(b,c){this.i=b;this.f=c}a.prototype={a:function(b,c,d,e,g){var i=this.i,j=this.f,h=c/d;e=e/g;if(i==="contain"){i=e>h?c:d*e;j=e>h?c/e:d}else if(i==="cover"){i=e<h?c:d*e;j=e<h?c/e:d}else if(i==="auto"){j=j==="auto"?g:j.a(b,d);i=j*e}else{i=
|
||||
i.a(b,c);j=j==="auto"?i/e:j.a(b,d)}return{i:i,f:j}}};a.Kc=new a("auto","auto");return a}();f.Ec=function(){function a(b){this.Y=b}a.prototype={Kb:/[a-z]+$/i,yb:function(){return this.ad||(this.ad=this.Y.match(this.Kb)[0].toLowerCase())},jd:function(){var b=this.Vc,c;if(b===undefined){b=this.yb();c=parseFloat(this.Y,10);b=this.Vc=b==="deg"?c:b==="rad"?c/Math.PI*180:b==="grad"?c/400*360:b==="turn"?c*360:0}return b}};return a}();f.Jc=function(){function a(c){this.Y=c}var b={};a.Pd=/\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d+|\d*\.\d+)\s*\)\s*/;
|
||||
a.Fb={aliceblue:"F0F8FF",antiquewhite:"FAEBD7",aqua:"0FF",aquamarine:"7FFFD4",azure:"F0FFFF",beige:"F5F5DC",bisque:"FFE4C4",black:"000",blanchedalmond:"FFEBCD",blue:"00F",blueviolet:"8A2BE2",brown:"A52A2A",burlywood:"DEB887",cadetblue:"5F9EA0",chartreuse:"7FFF00",chocolate:"D2691E",coral:"FF7F50",cornflowerblue:"6495ED",cornsilk:"FFF8DC",crimson:"DC143C",cyan:"0FF",darkblue:"00008B",darkcyan:"008B8B",darkgoldenrod:"B8860B",darkgray:"A9A9A9",darkgreen:"006400",darkkhaki:"BDB76B",darkmagenta:"8B008B",
|
||||
darkolivegreen:"556B2F",darkorange:"FF8C00",darkorchid:"9932CC",darkred:"8B0000",darksalmon:"E9967A",darkseagreen:"8FBC8F",darkslateblue:"483D8B",darkslategray:"2F4F4F",darkturquoise:"00CED1",darkviolet:"9400D3",deeppink:"FF1493",deepskyblue:"00BFFF",dimgray:"696969",dodgerblue:"1E90FF",firebrick:"B22222",floralwhite:"FFFAF0",forestgreen:"228B22",fuchsia:"F0F",gainsboro:"DCDCDC",ghostwhite:"F8F8FF",gold:"FFD700",goldenrod:"DAA520",gray:"808080",green:"008000",greenyellow:"ADFF2F",honeydew:"F0FFF0",
|
||||
hotpink:"FF69B4",indianred:"CD5C5C",indigo:"4B0082",ivory:"FFFFF0",khaki:"F0E68C",lavender:"E6E6FA",lavenderblush:"FFF0F5",lawngreen:"7CFC00",lemonchiffon:"FFFACD",lightblue:"ADD8E6",lightcoral:"F08080",lightcyan:"E0FFFF",lightgoldenrodyellow:"FAFAD2",lightgreen:"90EE90",lightgrey:"D3D3D3",lightpink:"FFB6C1",lightsalmon:"FFA07A",lightseagreen:"20B2AA",lightskyblue:"87CEFA",lightslategray:"789",lightsteelblue:"B0C4DE",lightyellow:"FFFFE0",lime:"0F0",limegreen:"32CD32",linen:"FAF0E6",magenta:"F0F",
|
||||
maroon:"800000",mediumauqamarine:"66CDAA",mediumblue:"0000CD",mediumorchid:"BA55D3",mediumpurple:"9370D8",mediumseagreen:"3CB371",mediumslateblue:"7B68EE",mediumspringgreen:"00FA9A",mediumturquoise:"48D1CC",mediumvioletred:"C71585",midnightblue:"191970",mintcream:"F5FFFA",mistyrose:"FFE4E1",moccasin:"FFE4B5",navajowhite:"FFDEAD",navy:"000080",oldlace:"FDF5E6",olive:"808000",olivedrab:"688E23",orange:"FFA500",orangered:"FF4500",orchid:"DA70D6",palegoldenrod:"EEE8AA",palegreen:"98FB98",paleturquoise:"AFEEEE",
|
||||
palevioletred:"D87093",papayawhip:"FFEFD5",peachpuff:"FFDAB9",peru:"CD853F",pink:"FFC0CB",plum:"DDA0DD",powderblue:"B0E0E6",purple:"800080",red:"F00",rosybrown:"BC8F8F",royalblue:"4169E1",saddlebrown:"8B4513",salmon:"FA8072",sandybrown:"F4A460",seagreen:"2E8B57",seashell:"FFF5EE",sienna:"A0522D",silver:"C0C0C0",skyblue:"87CEEB",slateblue:"6A5ACD",slategray:"708090",snow:"FFFAFA",springgreen:"00FF7F",steelblue:"4682B4",tan:"D2B48C",teal:"008080",thistle:"D8BFD8",tomato:"FF6347",turquoise:"40E0D0",
|
||||
violet:"EE82EE",wheat:"F5DEB3",white:"FFF",whitesmoke:"F5F5F5",yellow:"FF0",yellowgreen:"9ACD32"};a.prototype={parse:function(){if(!this.Ua){var c=this.Y,d;if(d=c.match(a.Pd)){this.Ua="rgb("+d[1]+","+d[2]+","+d[3]+")";this.Yb=parseFloat(d[4])}else{if((d=c.toLowerCase())in a.Fb)c="#"+a.Fb[d];this.Ua=c;this.Yb=c==="transparent"?0:1}}},T:function(c){this.parse();return this.Ua==="currentColor"?c.currentStyle.color:this.Ua},fa:function(){this.parse();return this.Yb}};f.ha=function(c){return b[c]||(b[c]=
|
||||
new a(c))};return a}();f.v=function(){function a(c){this.$a=c;this.ch=0;this.X=[];this.Ga=0}var b=a.pa={Ia:1,Wb:2,B:4,Lc:8,Xb:16,ma:32,J:64,na:128,oa:256,Ra:512,Tc:1024,URL:2048};a.ob=function(c,d){this.k=c;this.d=d};a.ob.prototype={Ca:function(){return this.k&b.J||this.k&b.na&&this.d==="0"},W:function(){return this.Ca()||this.k&b.Ra}};a.prototype={ce:/\s/,Jd:/^[\+\-]?(\d*\.)?\d+/,url:/^url\(\s*("([^"]*)"|'([^']*)'|([!#$%&*-~]*))\s*\)/i,nc:/^\-?[_a-z][\w-]*/i,Xd:/^("([^"]*)"|'([^']*)')/,Bd:/^#([\da-f]{6}|[\da-f]{3})/i,
|
||||
ae:{px:b.J,em:b.J,ex:b.J,mm:b.J,cm:b.J,"in":b.J,pt:b.J,pc:b.J,deg:b.Ia,rad:b.Ia,grad:b.Ia},fd:{rgb:1,rgba:1,hsl:1,hsla:1},next:function(c){function d(q,s){q=new a.ob(q,s);if(!c){k.X.push(q);k.Ga++}return q}function e(){k.Ga++;return null}var g,i,j,h,k=this;if(this.Ga<this.X.length)return this.X[this.Ga++];for(;this.ce.test(this.$a.charAt(this.ch));)this.ch++;if(this.ch>=this.$a.length)return e();i=this.ch;g=this.$a.substring(this.ch);j=g.charAt(0);switch(j){case "#":if(h=g.match(this.Bd)){this.ch+=
|
||||
h[0].length;return d(b.B,h[0])}break;case '"':case "'":if(h=g.match(this.Xd)){this.ch+=h[0].length;return d(b.Tc,h[2]||h[3]||"")}break;case "/":case ",":this.ch++;return d(b.oa,j);case "u":if(h=g.match(this.url)){this.ch+=h[0].length;return d(b.URL,h[2]||h[3]||h[4]||"")}}if(h=g.match(this.Jd)){j=h[0];this.ch+=j.length;if(g.charAt(j.length)==="%"){this.ch++;return d(b.Ra,j+"%")}if(h=g.substring(j.length).match(this.nc)){j+=h[0];this.ch+=h[0].length;return d(this.ae[h[0].toLowerCase()]||b.Lc,j)}return d(b.na,
|
||||
j)}if(h=g.match(this.nc)){j=h[0];this.ch+=j.length;if(j.toLowerCase()in f.Jc.Fb||j==="currentColor"||j==="transparent")return d(b.B,j);if(g.charAt(j.length)==="("){this.ch++;if(j.toLowerCase()in this.fd){g=function(q){return q&&q.k&b.na};h=function(q){return q&&q.k&(b.na|b.Ra)};var n=function(q,s){return q&&q.d===s},l=function(){return k.next(1)};if((j.charAt(0)==="r"?h(l()):g(l()))&&n(l(),",")&&h(l())&&n(l(),",")&&h(l())&&(j==="rgb"||j==="hsa"||n(l(),",")&&g(l()))&&n(l(),")"))return d(b.B,this.$a.substring(i,
|
||||
this.ch));return e()}return d(b.Xb,j)}return d(b.ma,j)}this.ch++;return d(b.Wb,j)},D:function(){return this.X[this.Ga-- -2]},all:function(){for(;this.next(););return this.X},la:function(c,d){for(var e=[],g,i;g=this.next();){if(c(g)){i=true;this.D();break}e.push(g)}return d&&!i?null:e}};return a}();var da=function(a){this.e=a};da.prototype={Z:0,Nd:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.x!==b.x||a.y!==b.y)},Sd:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.i!==b.i||a.f!==b.f)},
|
||||
hc:function(){var a=this.e,b=a.getBoundingClientRect(),c=f.Ba===9;return{x:b.left,y:b.top,i:c?a.offsetWidth:b.right-b.left,f:c?a.offsetHeight:b.bottom-b.top}},o:function(){return this.Z?this.Va||(this.Va=this.hc()):this.hc()},Ad:function(){return!!this.qb},cb:function(){++this.Z},hb:function(){if(!--this.Z){if(this.Va)this.qb=this.Va;this.Va=null}}};(function(){function a(b){var c=f.p.Aa(b);return function(){if(this.Z){var d=this.$b||(this.$b={});return c in d?d[c]:(d[c]=b.call(this))}else return b.call(this)}}
|
||||
f.C={Z:0,ja:function(b){function c(d){this.e=d;this.Zb=this.ia()}f.p.Eb(c.prototype,f.C,b);c.$c={};return c},j:function(){var b=this.ia(),c=this.constructor.$c;return b?b in c?c[b]:(c[b]=this.ka(b)):null},ia:a(function(){var b=this.e,c=this.constructor,d=b.style;b=b.currentStyle;var e=this.va,g=this.Fa,i=c.Yc||(c.Yc=f.Q+e);c=c.Zc||(c.Zc=f.nb+g.charAt(0).toUpperCase()+g.substring(1));return d[c]||b.getAttribute(i)||d[g]||b.getAttribute(e)}),h:a(function(){return!!this.j()}),G:a(function(){var b=this.ia(),
|
||||
c=b!==this.Zb;this.Zb=b;return c}),ua:a,cb:function(){++this.Z},hb:function(){--this.Z||delete this.$b}}})();f.Sb=f.C.ja({va:f.Q+"background",Fa:f.nb+"Background",cd:{scroll:1,fixed:1,local:1},fb:{"repeat-x":1,"repeat-y":1,repeat:1,"no-repeat":1},sc:{"padding-box":1,"border-box":1,"content-box":1},Od:{top:1,right:1,bottom:1,left:1,center:1},Td:{contain:1,cover:1},eb:{Ma:"backgroundClip",B:"backgroundColor",da:"backgroundImage",Pa:"backgroundOrigin",R:"backgroundPosition",S:"backgroundRepeat",Sa:"backgroundSize"},
|
||||
ka:function(a){function b(v){return v&&v.W()||v.k&k&&v.d in m}function c(v){return v&&(v.W()&&f.n(v.d)||v.d==="auto"&&"auto")}var d=this.e.currentStyle,e,g,i,j=f.v.pa,h=j.oa,k=j.ma,n=j.B,l,q,s=0,m=this.Od,r,p,t={L:[]};if(this.wb()){e=new f.v(a);for(i={};g=e.next();){l=g.k;q=g.d;if(!i.N&&l&j.Xb&&q==="linear-gradient"){r={ca:[],N:q};for(p={};g=e.next();){l=g.k;q=g.d;if(l&j.Wb&&q===")"){p.color&&r.ca.push(p);r.ca.length>1&&f.p.Eb(i,r);break}if(l&n){if(r.ra||r.zb){g=e.D();if(g.k!==h)break;e.next()}p=
|
||||
{color:f.ha(q)};g=e.next();if(g.W())p.db=f.n(g.d);else e.D()}else if(l&j.Ia&&!r.ra&&!p.color&&!r.ca.length)r.ra=new f.Ec(g.d);else if(b(g)&&!r.zb&&!p.color&&!r.ca.length){e.D();r.zb=new f.Ja(e.la(function(v){return!b(v)},false))}else if(l&h&&q===","){if(p.color){r.ca.push(p);p={}}}else break}}else if(!i.N&&l&j.URL){i.Ab=q;i.N="image"}else if(b(g)&&!i.$){e.D();i.$=new f.Ja(e.la(function(v){return!b(v)},false))}else if(l&k)if(q in this.fb&&!i.bb)i.bb=q;else if(q in this.sc&&!i.Wa){i.Wa=q;if((g=e.next())&&
|
||||
g.k&k&&g.d in this.sc)i.ub=g.d;else{i.ub=q;e.D()}}else if(q in this.cd&&!i.bc)i.bc=q;else return null;else if(l&n&&!t.color)t.color=f.ha(q);else if(l&h&&q==="/"&&!i.Xa&&i.$){g=e.next();if(g.k&k&&g.d in this.Td)i.Xa=new f.Ka(g.d);else if(g=c(g)){l=c(e.next());if(!l){l=g;e.D()}i.Xa=new f.Ka(g,l)}else return null}else if(l&h&&q===","&&i.N){i.Hb=a.substring(s,e.ch-1);s=e.ch;t.L.push(i);i={}}else return null}if(i.N){i.Hb=a.substring(s);t.L.push(i)}}else this.Bc(f.Ba<9?function(){var v=this.eb,o=d[v.R+
|
||||
"X"],u=d[v.R+"Y"],x=d[v.da],y=d[v.B];if(y!=="transparent")t.color=f.ha(y);if(x!=="none")t.L=[{N:"image",Ab:(new f.v(x)).next().d,bb:d[v.S],$:new f.Ja((new f.v(o+" "+u)).all())}]}:function(){var v=this.eb,o=/\s*,\s*/,u=d[v.da].split(o),x=d[v.B],y,z,D,G,E,B;if(x!=="transparent")t.color=f.ha(x);if((G=u.length)&&u[0]!=="none"){x=d[v.S].split(o);y=d[v.R].split(o);z=d[v.Pa].split(o);D=d[v.Ma].split(o);v=d[v.Sa].split(o);t.L=[];for(o=0;o<G;o++)if((E=u[o])&&E!=="none"){B=v[o].split(" ");t.L.push({Hb:E+" "+
|
||||
x[o]+" "+y[o]+" / "+v[o]+" "+z[o]+" "+D[o],N:"image",Ab:(new f.v(E)).next().d,bb:x[o],$:new f.Ja((new f.v(y[o])).all()),Wa:z[o],ub:D[o],Xa:new f.Ka(B[0],B[1])})}}});return t.color||t.L[0]?t:null},Bc:function(a){var b=f.Ba>8,c=this.eb,d=this.e.runtimeStyle,e=d[c.da],g=d[c.B],i=d[c.S],j,h,k,n;if(e)d[c.da]="";if(g)d[c.B]="";if(i)d[c.S]="";if(b){j=d[c.Ma];h=d[c.Pa];n=d[c.R];k=d[c.Sa];if(j)d[c.Ma]="";if(h)d[c.Pa]="";if(n)d[c.R]="";if(k)d[c.Sa]=""}a=a.call(this);if(e)d[c.da]=e;if(g)d[c.B]=g;if(i)d[c.S]=
|
||||
i;if(b){if(j)d[c.Ma]=j;if(h)d[c.Pa]=h;if(n)d[c.R]=n;if(k)d[c.Sa]=k}return a},ia:f.C.ua(function(){return this.wb()||this.Bc(function(){var a=this.e.currentStyle,b=this.eb;return a[b.B]+" "+a[b.da]+" "+a[b.S]+" "+a[b.R+"X"]+" "+a[b.R+"Y"]})}),wb:f.C.ua(function(){var a=this.e;return a.style[this.Fa]||a.currentStyle.getAttribute(this.va)}),qc:function(){var a=0;if(f.V<7){a=this.e;a=""+(a.style[f.nb+"PngFix"]||a.currentStyle.getAttribute(f.Q+"png-fix"))==="true"}return a},h:f.C.ua(function(){return(this.wb()||
|
||||
this.qc())&&!!this.j()})});f.Vb=f.C.ja({wc:["Top","Right","Bottom","Left"],Hd:{thin:"1px",medium:"3px",thick:"5px"},ka:function(){var a={},b={},c={},d=false,e=true,g=true,i=true;this.Cc(function(){for(var j=this.e.currentStyle,h=0,k,n,l,q,s,m,r;h<4;h++){l=this.wc[h];r=l.charAt(0).toLowerCase();k=b[r]=j["border"+l+"Style"];n=j["border"+l+"Color"];l=j["border"+l+"Width"];if(h>0){if(k!==q)g=false;if(n!==s)e=false;if(l!==m)i=false}q=k;s=n;m=l;c[r]=f.ha(n);l=a[r]=f.n(b[r]==="none"?"0":this.Hd[l]||l);if(l.a(this.e)>
|
||||
0)d=true}});return d?{I:a,Yd:b,gd:c,de:i,hd:e,Zd:g}:null},ia:f.C.ua(function(){var a=this.e,b=a.currentStyle,c;a.tagName in f.Ac&&a.offsetParent.currentStyle.borderCollapse==="collapse"||this.Cc(function(){c=b.borderWidth+"|"+b.borderStyle+"|"+b.borderColor});return c}),Cc:function(a){var b=this.e.runtimeStyle,c=b.borderWidth,d=b.borderColor;if(c)b.borderWidth="";if(d)b.borderColor="";a=a.call(this);if(c)b.borderWidth=c;if(d)b.borderColor=d;return a}});(function(){f.jb=f.C.ja({va:"border-radius",
|
||||
Fa:"borderRadius",ka:function(b){var c=null,d,e,g,i,j=false;if(b){e=new f.v(b);var h=function(){for(var k=[],n;(g=e.next())&&g.W();){i=f.n(g.d);n=i.ic();if(n<0)return null;if(n>0)j=true;k.push(i)}return k.length>0&&k.length<5?{tl:k[0],tr:k[1]||k[0],br:k[2]||k[0],bl:k[3]||k[1]||k[0]}:null};if(b=h()){if(g){if(g.k&f.v.pa.oa&&g.d==="/")d=h()}else d=b;if(j&&b&&d)c={x:b,y:d}}}return c}});var a=f.n("0");a={tl:a,tr:a,br:a,bl:a};f.jb.Dc={x:a,y:a}})();f.Ub=f.C.ja({va:"border-image",Fa:"borderImage",fb:{stretch:1,
|
||||
round:1,repeat:1,space:1},ka:function(a){var b=null,c,d,e,g,i,j,h=0,k=f.v.pa,n=k.ma,l=k.na,q=k.Ra;if(a){c=new f.v(a);b={};for(var s=function(p){return p&&p.k&k.oa&&p.d==="/"},m=function(p){return p&&p.k&n&&p.d==="fill"},r=function(){g=c.la(function(p){return!(p.k&(l|q))});if(m(c.next())&&!b.fill)b.fill=true;else c.D();if(s(c.next())){h++;i=c.la(function(p){return!p.W()&&!(p.k&n&&p.d==="auto")});if(s(c.next())){h++;j=c.la(function(p){return!p.Ca()})}}else c.D()};a=c.next();){d=a.k;e=a.d;if(d&(l|q)&&
|
||||
!g){c.D();r()}else if(m(a)&&!b.fill){b.fill=true;r()}else if(d&n&&this.fb[e]&&!b.repeat){b.repeat={f:e};if(a=c.next())if(a.k&n&&this.fb[a.d])b.repeat.Ob=a.d;else c.D()}else if(d&k.URL&&!b.src)b.src=e;else return null}if(!b.src||!g||g.length<1||g.length>4||i&&i.length>4||h===1&&i.length<1||j&&j.length>4||h===2&&j.length<1)return null;if(!b.repeat)b.repeat={f:"stretch"};if(!b.repeat.Ob)b.repeat.Ob=b.repeat.f;a=function(p,t){return{t:t(p[0]),r:t(p[1]||p[0]),b:t(p[2]||p[0]),l:t(p[3]||p[1]||p[0])}};b.slice=
|
||||
a(g,function(p){return f.n(p.k&l?p.d+"px":p.d)});if(i&&i[0])b.I=a(i,function(p){return p.W()?f.n(p.d):p.d});if(j&&j[0])b.Da=a(j,function(p){return p.Ca()?f.n(p.d):p.d})}return b}});f.Ic=f.C.ja({va:"box-shadow",Fa:"boxShadow",ka:function(a){var b,c=f.n,d=f.v.pa,e;if(a){e=new f.v(a);b={Da:[],Bb:[]};for(a=function(){for(var g,i,j,h,k,n;g=e.next();){j=g.d;i=g.k;if(i&d.oa&&j===",")break;else if(g.Ca()&&!k){e.D();k=e.la(function(l){return!l.Ca()})}else if(i&d.B&&!h)h=j;else if(i&d.ma&&j==="inset"&&!n)n=
|
||||
true;else return false}g=k&&k.length;if(g>1&&g<5){(n?b.Bb:b.Da).push({ee:c(k[0].d),fe:c(k[1].d),blur:c(k[2]?k[2].d:"0"),Ud:c(k[3]?k[3].d:"0"),color:f.ha(h||"currentColor")});return true}return false};a(););}return b&&(b.Bb.length||b.Da.length)?b:null}});f.Uc=f.C.ja({ia:f.C.ua(function(){var a=this.e.currentStyle;return a.visibility+"|"+a.display}),ka:function(){var a=this.e,b=a.runtimeStyle;a=a.currentStyle;var c=b.visibility,d;b.visibility="";d=a.visibility;b.visibility=c;return{be:d!=="hidden",
|
||||
nd:a.display!=="none"}},h:function(){return false}});f.u={P:function(a){function b(c,d,e,g){this.e=c;this.s=d;this.g=e;this.parent=g}f.p.Eb(b.prototype,f.u,a);return b},Cb:false,O:function(){return false},Ea:f.aa,Lb:function(){this.m();this.h()&&this.U()},ib:function(){this.Cb=true},Mb:function(){this.h()?this.U():this.m()},sb:function(a,b){this.vc(a);for(var c=this.qa||(this.qa=[]),d=a+1,e=c.length,g;d<e;d++)if(g=c[d])break;c[a]=b;this.H().insertBefore(b,g||null)},ya:function(a){var b=this.qa;return b&&
|
||||
b[a]||null},vc:function(a){var b=this.ya(a),c=this.Ta;if(b&&c){c.removeChild(b);this.qa[a]=null}},za:function(a,b,c,d){var e=this.rb||(this.rb={}),g=e[a];if(!g){g=e[a]=f.p.Za("shape");if(b)g.appendChild(g[b]=f.p.Za(b));if(d){c=this.ya(d);if(!c){this.sb(d,doc.createElement("group"+d));c=this.ya(d)}}c.appendChild(g);a=g.style;a.position="absolute";a.left=a.top=0;a.behavior="url(#default#VML)"}return g},vb:function(a){var b=this.rb,c=b&&b[a];if(c){c.parentNode.removeChild(c);delete b[a]}return!!c},kc:function(a){var b=
|
||||
this.e,c=this.s.o(),d=c.i,e=c.f,g,i,j,h,k,n;c=a.x.tl.a(b,d);g=a.y.tl.a(b,e);i=a.x.tr.a(b,d);j=a.y.tr.a(b,e);h=a.x.br.a(b,d);k=a.y.br.a(b,e);n=a.x.bl.a(b,d);a=a.y.bl.a(b,e);d=Math.min(d/(c+i),e/(j+k),d/(n+h),e/(g+a));if(d<1){c*=d;g*=d;i*=d;j*=d;h*=d;k*=d;n*=d;a*=d}return{x:{tl:c,tr:i,br:h,bl:n},y:{tl:g,tr:j,br:k,bl:a}}},xa:function(a,b,c){b=b||1;var d,e,g=this.s.o();e=g.i*b;g=g.f*b;var i=this.g.F,j=Math.floor,h=Math.ceil,k=a?a.Jb*b:0,n=a?a.Ib*b:0,l=a?a.tb*b:0;a=a?a.Db*b:0;var q,s,m,r,p;if(c||i.h()){d=
|
||||
this.kc(c||i.j());c=d.x.tl*b;i=d.y.tl*b;q=d.x.tr*b;s=d.y.tr*b;m=d.x.br*b;r=d.y.br*b;p=d.x.bl*b;b=d.y.bl*b;e="m"+j(a)+","+j(i)+"qy"+j(c)+","+j(k)+"l"+h(e-q)+","+j(k)+"qx"+h(e-n)+","+j(s)+"l"+h(e-n)+","+h(g-r)+"qy"+h(e-m)+","+h(g-l)+"l"+j(p)+","+h(g-l)+"qx"+j(a)+","+h(g-b)+" x e"}else e="m"+j(a)+","+j(k)+"l"+h(e-n)+","+j(k)+"l"+h(e-n)+","+h(g-l)+"l"+j(a)+","+h(g-l)+"xe";return e},H:function(){var a=this.parent.ya(this.M),b;if(!a){a=doc.createElement(this.Ya);b=a.style;b.position="absolute";b.top=b.left=
|
||||
0;this.parent.sb(this.M,a)}return a},mc:function(){var a=this.e,b=a.currentStyle,c=a.runtimeStyle,d=a.tagName,e=f.V===6,g;if(e&&(d in f.cc||d==="FIELDSET")||d==="BUTTON"||d==="INPUT"&&a.type in f.Gd){c.borderWidth="";d=this.g.z.wc;for(g=d.length;g--;){e=d[g];c["padding"+e]="";c["padding"+e]=f.n(b["padding"+e]).a(a)+f.n(b["border"+e+"Width"]).a(a)+(f.V!==8&&g%2?1:0)}c.borderWidth=0}else if(e){if(a.childNodes.length!==1||a.firstChild.tagName!=="ie6-mask"){b=doc.createElement("ie6-mask");d=b.style;d.visibility=
|
||||
"visible";for(d.zoom=1;d=a.firstChild;)b.appendChild(d);a.appendChild(b);c.visibility="hidden"}}else c.borderColor="transparent"},he:function(){},m:function(){this.parent.vc(this.M);delete this.rb;delete this.qa}};f.Rc=f.u.P({h:function(){var a=this.ed;for(var b in a)if(a.hasOwnProperty(b)&&a[b].h())return true;return false},O:function(){return this.g.Pb.G()},ib:function(){if(this.h()){var a=this.jc(),b=a,c;a=a.currentStyle;var d=a.position,e=this.H().style,g=0,i=0;i=this.s.o();if(d==="fixed"&&f.V>
|
||||
6){g=i.x;i=i.y;b=d}else{do b=b.offsetParent;while(b&&b.currentStyle.position==="static");if(b){c=b.getBoundingClientRect();b=b.currentStyle;g=i.x-c.left-(parseFloat(b.borderLeftWidth)||0);i=i.y-c.top-(parseFloat(b.borderTopWidth)||0)}else{b=doc.documentElement;g=i.x+b.scrollLeft-b.clientLeft;i=i.y+b.scrollTop-b.clientTop}b="absolute"}e.position=b;e.left=g;e.top=i;e.zIndex=d==="static"?-1:a.zIndex;this.Cb=true}},Mb:f.aa,Nb:function(){var a=this.g.Pb.j();this.H().style.display=a.be&&a.nd?"":"none"},
|
||||
Lb:function(){this.h()?this.Nb():this.m()},jc:function(){var a=this.e;return a.tagName in f.Ac?a.offsetParent:a},H:function(){var a=this.Ta,b;if(!a){b=this.jc();a=this.Ta=doc.createElement("css3-container");a.style.direction="ltr";this.Nb();b.parentNode.insertBefore(a,b)}return a},ab:f.aa,m:function(){var a=this.Ta,b;if(a&&(b=a.parentNode))b.removeChild(a);delete this.Ta;delete this.qa}});f.Fc=f.u.P({M:2,Ya:"background",O:function(){var a=this.g;return a.w.G()||a.F.G()},h:function(){var a=this.g;
|
||||
return a.q.h()||a.F.h()||a.w.h()||a.ga.h()&&a.ga.j().Bb},U:function(){var a=this.s.o();if(a.i&&a.f){this.od();this.pd()}},od:function(){var a=this.g.w.j(),b=this.s.o(),c=this.e,d=a&&a.color,e,g;if(d&&d.fa()>0){this.lc();a=this.za("bgColor","fill",this.H(),1);e=b.i;b=b.f;a.stroked=false;a.coordsize=e*2+","+b*2;a.coordorigin="1,1";a.path=this.xa(null,2);g=a.style;g.width=e;g.height=b;a.fill.color=d.T(c);c=d.fa();if(c<1)a.fill.opacity=c}else this.vb("bgColor")},pd:function(){var a=this.g.w.j(),b=this.s.o();
|
||||
a=a&&a.L;var c,d,e,g,i;if(a){this.lc();d=b.i;e=b.f;for(i=a.length;i--;){b=a[i];c=this.za("bgImage"+i,"fill",this.H(),2);c.stroked=false;c.fill.type="tile";c.fillcolor="none";c.coordsize=d*2+","+e*2;c.coordorigin="1,1";c.path=this.xa(0,2);g=c.style;g.width=d;g.height=e;if(b.N==="linear-gradient")this.bd(c,b);else{c.fill.src=b.Ab;this.Md(c,i)}}}for(i=a?a.length:0;this.vb("bgImage"+i++););},Md:function(a,b){var c=this;f.p.Rb(a.fill.src,function(d){var e=c.e,g=c.s.o(),i=g.i;g=g.f;if(i&&g){var j=a.fill,
|
||||
h=c.g,k=h.z.j(),n=k&&k.I;k=n?n.t.a(e):0;var l=n?n.r.a(e):0,q=n?n.b.a(e):0;n=n?n.l.a(e):0;h=h.w.j().L[b];e=h.$?h.$.coords(e,i-d.i-n-l,g-d.f-k-q):{x:0,y:0};h=h.bb;q=l=0;var s=i+1,m=g+1,r=f.V===8?0:1;n=Math.round(e.x)+n+0.5;k=Math.round(e.y)+k+0.5;j.position=n/i+","+k/g;if(h&&h!=="repeat"){if(h==="repeat-x"||h==="no-repeat"){l=k+1;m=k+d.f+r}if(h==="repeat-y"||h==="no-repeat"){q=n+1;s=n+d.i+r}a.style.clip="rect("+l+"px,"+s+"px,"+m+"px,"+q+"px)"}}})},bd:function(a,b){var c=this.e,d=this.s.o(),e=d.i,g=
|
||||
d.f;a=a.fill;d=b.ca;var i=d.length,j=Math.PI,h=f.Na,k=h.tc,n=h.dc;b=h.gc(c,e,g,b);h=b.ra;var l=b.xc,q=b.yc,s=b.Vd,m=b.Wd,r=b.rd,p=b.sd,t=b.kd,v=b.ld;b=b.rc;e=h%90?Math.atan2(t*e/g,v)/j*180:h+90;e+=180;e%=360;r=k(s,m,h,r,p);g=n(s,m,r[0],r[1]);j=[];r=k(l,q,h,s,m);n=n(l,q,r[0],r[1])/g*100;k=[];for(h=0;h<i;h++)k.push(d[h].db?d[h].db.a(c,b):h===0?0:h===i-1?b:null);for(h=1;h<i;h++){if(k[h]===null){l=k[h-1];b=h;do q=k[++b];while(q===null);k[h]=l+(q-l)/(b-h+1)}k[h]=Math.max(k[h],k[h-1])}for(h=0;h<i;h++)j.push(n+
|
||||
k[h]/g*100+"% "+d[h].color.T(c));a.angle=e;a.type="gradient";a.method="sigma";a.color=d[0].color.T(c);a.color2=d[i-1].color.T(c);if(a.colors)a.colors.value=j.join(",");else a.colors=j.join(",")},lc:function(){var a=this.e.runtimeStyle;a.backgroundImage="url(about:blank)";a.backgroundColor="transparent"},m:function(){f.u.m.call(this);var a=this.e.runtimeStyle;a.backgroundImage=a.backgroundColor=""}});f.Gc=f.u.P({M:4,Ya:"border",O:function(){var a=this.g;return a.z.G()||a.F.G()},h:function(){var a=
|
||||
this.g;return(a.F.h()||a.w.h())&&!a.q.h()&&a.z.h()},U:function(){var a=this.e,b=this.g.z.j(),c=this.s.o(),d=c.i;c=c.f;var e,g,i,j,h;if(b){this.mc();b=this.wd(2);j=0;for(h=b.length;j<h;j++){i=b[j];e=this.za("borderPiece"+j,i.stroke?"stroke":"fill",this.H());e.coordsize=d*2+","+c*2;e.coordorigin="1,1";e.path=i.path;g=e.style;g.width=d;g.height=c;e.filled=!!i.fill;e.stroked=!!i.stroke;if(i.stroke){e=e.stroke;e.weight=i.Qb+"px";e.color=i.color.T(a);e.dashstyle=i.stroke==="dashed"?"2 2":i.stroke==="dotted"?
|
||||
"1 1":"solid";e.linestyle=i.stroke==="double"&&i.Qb>2?"ThinThin":"Single"}else e.fill.color=i.fill.T(a)}for(;this.vb("borderPiece"+j++););}},wd:function(a){var b=this.e,c,d,e,g=this.g.z,i=[],j,h,k,n,l=Math.round,q,s,m;if(g.h()){c=g.j();g=c.I;s=c.Yd;m=c.gd;if(c.de&&c.Zd&&c.hd){if(m.t.fa()>0){c=g.t.a(b);k=c/2;i.push({path:this.xa({Jb:k,Ib:k,tb:k,Db:k},a),stroke:s.t,color:m.t,Qb:c})}}else{a=a||1;c=this.s.o();d=c.i;e=c.f;c=l(g.t.a(b));k=l(g.r.a(b));n=l(g.b.a(b));b=l(g.l.a(b));var r={t:c,r:k,b:n,l:b};
|
||||
b=this.g.F;if(b.h())q=this.kc(b.j());j=Math.floor;h=Math.ceil;var p=function(o,u){return q?q[o][u]:0},t=function(o,u,x,y,z,D){var G=p("x",o),E=p("y",o),B=o.charAt(1)==="r";o=o.charAt(0)==="b";return G>0&&E>0?(D?"al":"ae")+(B?h(d-G):j(G))*a+","+(o?h(e-E):j(E))*a+","+(j(G)-u)*a+","+(j(E)-x)*a+","+y*65535+","+2949075*(z?1:-1):(D?"m":"l")+(B?d-u:u)*a+","+(o?e-x:x)*a},v=function(o,u,x,y){var z=o==="t"?j(p("x","tl"))*a+","+h(u)*a:o==="r"?h(d-u)*a+","+j(p("y","tr"))*a:o==="b"?h(d-p("x","br"))*a+","+j(e-
|
||||
u)*a:j(u)*a+","+h(e-p("y","bl"))*a;o=o==="t"?h(d-p("x","tr"))*a+","+h(u)*a:o==="r"?h(d-u)*a+","+h(e-p("y","br"))*a:o==="b"?j(p("x","bl"))*a+","+j(e-u)*a:j(u)*a+","+j(p("y","tl"))*a;return x?(y?"m"+o:"")+"l"+z:(y?"m"+z:"")+"l"+o};b=function(o,u,x,y,z,D){var G=o==="l"||o==="r",E=r[o],B,A;if(E>0&&s[o]!=="none"&&m[o].fa()>0){B=r[G?o:u];u=r[G?u:o];A=r[G?o:x];x=r[G?x:o];if(s[o]==="dashed"||s[o]==="dotted"){i.push({path:t(y,B,u,D+45,0,1)+t(y,0,0,D,1,0),fill:m[o]});i.push({path:v(o,E/2,0,1),stroke:s[o],Qb:E,
|
||||
color:m[o]});i.push({path:t(z,A,x,D,0,1)+t(z,0,0,D-45,1,0),fill:m[o]})}else i.push({path:t(y,B,u,D+45,0,1)+v(o,E,0,0)+t(z,A,x,D,0,0)+(s[o]==="double"&&E>2?t(z,A-j(A/3),x-j(x/3),D-45,1,0)+v(o,h(E/3*2),1,0)+t(y,B-j(B/3),u-j(u/3),D,1,0)+"x "+t(y,j(B/3),j(u/3),D+45,0,1)+v(o,j(E/3),1,0)+t(z,j(A/3),j(x/3),D,0,0):"")+t(z,0,0,D-45,1,0)+v(o,0,1,0)+t(y,0,0,D,1,0),fill:m[o]})}};b("t","l","r","tl","tr",90);b("r","t","b","tr","br",0);b("b","r","l","br","bl",-90);b("l","b","t","bl","tl",-180)}}return i},m:function(){if(this.ec||
|
||||
!this.g.q.h())this.e.runtimeStyle.borderColor="";f.u.m.call(this)}});f.Tb=f.u.P({M:5,Ld:["t","tr","r","br","b","bl","l","tl","c"],O:function(){return this.g.q.G()},h:function(){return this.g.q.h()},U:function(){this.H();var a=this.g.q.j(),b=this.g.z.j(),c=this.s.o(),d=this.e,e=this.uc;f.p.Rb(a.src,function(g){function i(v,o,u,x,y){v=e[v].style;var z=Math.max;v.width=z(o,0);v.height=z(u,0);v.left=x;v.top=y}function j(v,o,u){for(var x=0,y=v.length;x<y;x++)e[v[x]].imagedata[o]=u}var h=c.i,k=c.f,n=f.n("0"),
|
||||
l=a.I||(b?b.I:{t:n,r:n,b:n,l:n});n=l.t.a(d);var q=l.r.a(d),s=l.b.a(d);l=l.l.a(d);var m=a.slice,r=m.t.a(d),p=m.r.a(d),t=m.b.a(d);m=m.l.a(d);i("tl",l,n,0,0);i("t",h-l-q,n,l,0);i("tr",q,n,h-q,0);i("r",q,k-n-s,h-q,n);i("br",q,s,h-q,k-s);i("b",h-l-q,s,l,k-s);i("bl",l,s,0,k-s);i("l",l,k-n-s,0,n);i("c",h-l-q,k-n-s,l,n);j(["tl","t","tr"],"cropBottom",(g.f-r)/g.f);j(["tl","l","bl"],"cropRight",(g.i-m)/g.i);j(["bl","b","br"],"cropTop",(g.f-t)/g.f);j(["tr","r","br"],"cropLeft",(g.i-p)/g.i);j(["l","r","c"],"cropTop",
|
||||
r/g.f);j(["l","r","c"],"cropBottom",t/g.f);j(["t","b","c"],"cropLeft",m/g.i);j(["t","b","c"],"cropRight",p/g.i);e.c.style.display=a.fill?"":"none"},this)},H:function(){var a=this.parent.ya(this.M),b,c,d,e=this.Ld,g=e.length;if(!a){a=doc.createElement("border-image");b=a.style;b.position="absolute";this.uc={};for(d=0;d<g;d++){c=this.uc[e[d]]=f.p.Za("rect");c.appendChild(f.p.Za("imagedata"));b=c.style;b.behavior="url(#default#VML)";b.position="absolute";b.top=b.left=0;c.imagedata.src=this.g.q.j().src;
|
||||
c.stroked=false;c.filled=false;a.appendChild(c)}this.parent.sb(this.M,a)}return a},Ea:function(){if(this.h()){var a=this.e,b=a.runtimeStyle,c=this.g.q.j().I;b.borderStyle="solid";if(c){b.borderTopWidth=c.t.a(a)+"px";b.borderRightWidth=c.r.a(a)+"px";b.borderBottomWidth=c.b.a(a)+"px";b.borderLeftWidth=c.l.a(a)+"px"}this.mc()}},m:function(){var a=this.e.runtimeStyle;a.borderStyle="";if(this.ec||!this.g.z.h())a.borderColor=a.borderWidth="";f.u.m.call(this)}});f.Hc=f.u.P({M:1,Ya:"outset-box-shadow",O:function(){var a=
|
||||
this.g;return a.ga.G()||a.F.G()},h:function(){var a=this.g.ga;return a.h()&&a.j().Da[0]},U:function(){function a(B,A,L,N,H,I,F){B=b.za("shadow"+B+A,"fill",d,i-B);A=B.fill;B.coordsize=n*2+","+l*2;B.coordorigin="1,1";B.stroked=false;B.filled=true;A.color=H.T(c);if(I){A.type="gradienttitle";A.color2=A.color;A.opacity=0}B.path=F;p=B.style;p.left=L;p.top=N;p.width=n;p.height=l;return B}var b=this,c=this.e,d=this.H(),e=this.g,g=e.ga.j().Da;e=e.F.j();var i=g.length,j=i,h,k=this.s.o(),n=k.i,l=k.f;k=f.V===
|
||||
8?1:0;for(var q=["tl","tr","br","bl"],s,m,r,p,t,v,o,u,x,y,z,D,G,E;j--;){m=g[j];t=m.ee.a(c);v=m.fe.a(c);h=m.Ud.a(c);o=m.blur.a(c);m=m.color;u=-h-o;if(!e&&o)e=f.jb.Dc;u=this.xa({Jb:u,Ib:u,tb:u,Db:u},2,e);if(o){x=(h+o)*2+n;y=(h+o)*2+l;z=o*2/x;D=o*2/y;if(o-h>n/2||o-h>l/2)for(h=4;h--;){s=q[h];G=s.charAt(0)==="b";E=s.charAt(1)==="r";s=a(j,s,t,v,m,o,u);r=s.fill;r.focusposition=(E?1-z:z)+","+(G?1-D:D);r.focussize="0,0";s.style.clip="rect("+((G?y/2:0)+k)+"px,"+(E?x:x/2)+"px,"+(G?y:y/2)+"px,"+((E?x/2:0)+k)+
|
||||
"px)"}else{s=a(j,"",t,v,m,o,u);r=s.fill;r.focusposition=z+","+D;r.focussize=1-z*2+","+(1-D*2)}}else{s=a(j,"",t,v,m,o,u);t=m.fa();if(t<1)s.fill.opacity=t}}}});f.Pc=f.u.P({M:6,Ya:"imgEl",O:function(){var a=this.g;return this.e.src!==this.Xc||a.F.G()},h:function(){var a=this.g;return a.F.h()||a.w.qc()},U:function(){this.Xc=i;this.Cd();var a=this.za("img","fill",this.H()),b=a.fill,c=this.s.o(),d=c.i;c=c.f;var e=this.g.z.j(),g=e&&e.I;e=this.e;var i=e.src,j=Math.round,h=e.currentStyle,k=f.n;if(!g||f.V<
|
||||
7){g=f.n("0");g={t:g,r:g,b:g,l:g}}a.stroked=false;b.type="frame";b.src=i;b.position=(d?0.5/d:0)+","+(c?0.5/c:0);a.coordsize=d*2+","+c*2;a.coordorigin="1,1";a.path=this.xa({Jb:j(g.t.a(e)+k(h.paddingTop).a(e)),Ib:j(g.r.a(e)+k(h.paddingRight).a(e)),tb:j(g.b.a(e)+k(h.paddingBottom).a(e)),Db:j(g.l.a(e)+k(h.paddingLeft).a(e))},2);a=a.style;a.width=d;a.height=c},Cd:function(){this.e.runtimeStyle.filter="alpha(opacity=0)"},m:function(){f.u.m.call(this);this.e.runtimeStyle.filter=""}});f.Oc=f.u.P({ib:f.aa,
|
||||
Mb:f.aa,Nb:f.aa,Lb:f.aa,Kd:/^,+|,+$/g,Fd:/,+/g,gb:function(a,b){(this.pb||(this.pb=[]))[a]=b||void 0},ab:function(){var a=this.pb,b;if(a&&(b=a.join(",").replace(this.Kd,"").replace(this.Fd,","))!==this.Wc)this.Wc=this.e.runtimeStyle.background=b},m:function(){this.e.runtimeStyle.background="";delete this.pb}});f.Mc=f.u.P({ta:1,O:function(){return this.g.w.G()},h:function(){var a=this.g;return a.w.h()||a.q.h()},U:function(){var a=this.g.w.j(),b,c,d=0,e,g;if(a){b=[];if(c=a.L)for(;e=c[d++];)if(e.N===
|
||||
"linear-gradient"){g=this.vd(e.Wa);g=(e.Xa||f.Ka.Kc).a(this.e,g.i,g.f,g.i,g.f);b.push("url(data:image/svg+xml,"+escape(this.xd(e,g.i,g.f))+") "+this.dd(e.$)+" / "+g.i+"px "+g.f+"px "+(e.bc||"")+" "+(e.Wa||"")+" "+(e.ub||""))}else b.push(e.Hb);a.color&&b.push(a.color.Y);this.parent.gb(this.ta,b.join(","))}},dd:function(a){return a?a.X.map(function(b){return b.d}).join(" "):"0 0"},vd:function(a){var b=this.e,c=this.s.o(),d=c.i;c=c.f;var e;if(a!=="border-box")if((e=this.g.z.j())&&(e=e.I)){d-=e.l.a(b)+
|
||||
e.l.a(b);c-=e.t.a(b)+e.b.a(b)}if(a==="content-box"){a=f.n;e=b.currentStyle;d-=a(e.paddingLeft).a(b)+a(e.paddingRight).a(b);c-=a(e.paddingTop).a(b)+a(e.paddingBottom).a(b)}return{i:d,f:c}},xd:function(a,b,c){var d=this.e,e=a.ca,g=e.length,i=f.Na.gc(d,b,c,a);a=i.xc;var j=i.yc,h=i.td,k=i.ud;i=i.rc;var n,l,q,s,m;n=[];for(l=0;l<g;l++)n.push(e[l].db?e[l].db.a(d,i):l===0?0:l===g-1?i:null);for(l=1;l<g;l++)if(n[l]===null){s=n[l-1];q=l;do m=n[++q];while(m===null);n[l]=s+(m-s)/(q-l+1)}b=['<svg width="'+b+'" height="'+
|
||||
c+'" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="'+a/b*100+'%" y1="'+j/c*100+'%" x2="'+h/b*100+'%" y2="'+k/c*100+'%">'];for(l=0;l<g;l++)b.push('<stop offset="'+n[l]/i+'" stop-color="'+e[l].color.T(d)+'" stop-opacity="'+e[l].color.fa()+'"/>');b.push('</linearGradient></defs><rect width="100%" height="100%" fill="url(#g)"/></svg>');return b.join("")},m:function(){this.parent.gb(this.ta)}});f.Nc=f.u.P({S:"repeat",Sc:"stretch",Qc:"round",ta:0,O:function(){return this.g.q.G()},
|
||||
h:function(){return this.g.q.h()},U:function(){var a=this,b=a.g.q.j(),c=a.g.z.j(),d=a.s.o(),e=b.repeat,g=e.f,i=e.Ob,j=a.e,h=0;f.p.Rb(b.src,function(k){function n(R,S,U,V,W,T,w,C,K,O){J.push('<pattern patternUnits="userSpaceOnUse" id="pattern'+Q+'" x="'+(g===p?R+U/2-K/2:R)+'" y="'+(i===p?S+V/2-O/2:S)+'" width="'+K+'" height="'+O+'"><svg width="'+K+'" height="'+O+'" viewBox="'+W+" "+T+" "+w+" "+C+'" preserveAspectRatio="none"><image xlink:href="'+r+'" x="0" y="0" width="'+s+'" height="'+m+'" /></svg></pattern>');
|
||||
P.push('<rect x="'+R+'" y="'+S+'" width="'+U+'" height="'+V+'" fill="url(#pattern'+Q+')" />');Q++}var l=d.i,q=d.f,s=k.i,m=k.f,r=a.Dd(b.src,s,m),p=a.S,t=a.Sc;k=a.Qc;var v=Math.ceil,o=f.n("0"),u=b.I||(c?c.I:{t:o,r:o,b:o,l:o});o=u.t.a(j);var x=u.r.a(j),y=u.b.a(j);u=u.l.a(j);var z=b.slice,D=z.t.a(j),G=z.r.a(j),E=z.b.a(j);z=z.l.a(j);var B=l-u-x,A=q-o-y,L=s-z-G,N=m-D-E,H=g===t?B:L*o/D,I=i===t?A:N*x/G,F=g===t?B:L*y/E;t=i===t?A:N*u/z;var J=[],P=[],Q=0;if(g===k){H-=(H-(B%H||H))/v(B/H);F-=(F-(B%F||F))/v(B/
|
||||
F)}if(i===k){I-=(I-(A%I||I))/v(A/I);t-=(t-(A%t||t))/v(A/t)}k=['<svg width="'+l+'" height="'+q+'" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">'];n(0,0,u,o,0,0,z,D,u,o);n(u,0,B,o,z,0,L,D,H,o);n(l-x,0,x,o,s-G,0,G,D,x,o);n(0,o,u,A,0,D,z,N,u,t);if(b.fill)n(u,o,B,A,z,D,L,N,H||F||L,t||I||N);n(l-x,o,x,A,s-G,D,G,N,x,I);n(0,q-y,u,y,0,m-E,z,E,u,y);n(u,q-y,B,y,z,m-E,L,E,F,y);n(l-x,q-y,x,y,s-G,m-E,G,E,x,y);k.push("<defs>"+J.join("\n")+"</defs>"+P.join("\n")+"</svg>");a.parent.gb(a.ta,
|
||||
"url(data:image/svg+xml,"+escape(k.join(""))+") no-repeat border-box border-box");h&&a.parent.ab()},a);h=1},Dd:function(){var a={};return function(b,c,d){var e=a[b],g;if(!e){e=new Image;g=doc.createElement("canvas");e.src=b;g.width=c;g.height=d;g.getContext("2d").drawImage(e,0,0);e=a[b]=g.toDataURL()}return e}}(),Ea:f.Tb.prototype.Ea,m:function(){var a=this.e.runtimeStyle;this.parent.gb(this.ta);a.borderColor=a.borderStyle=a.borderWidth=""}});f.kb=function(){function a(m,r){m.className+=" "+r}function b(m){var r=
|
||||
s.slice.call(arguments,1),p=r.length;setTimeout(function(){for(;p--;)a(m,r[p])},0)}function c(m){var r=s.slice.call(arguments,1),p=r.length;setTimeout(function(){for(;p--;){var t=r[p];t=q[t]||(q[t]=new RegExp("\\b"+t+"\\b","g"));m.className=m.className.replace(t,"")}},0)}function d(m){function r(){if(!R){var w,C,K=f.Ba,O=m.currentStyle,M=O.getAttribute(g)==="true";T=O.getAttribute(i);T=K>7?T!=="false":T==="true";if(!Q){Q=1;m.runtimeStyle.zoom=1;O=m;for(var ba=1;O=O.previousSibling;)if(O.nodeType===
|
||||
1){ba=0;break}ba&&a(m,n)}F.cb();if(M&&(C=F.o())&&(w=doc.documentElement||doc.body)&&(C.y>w.clientHeight||C.x>w.clientWidth||C.y+C.f<0||C.x+C.i<0)){if(!V){V=1;f.mb.ba(r)}}else{R=1;V=Q=0;f.mb.Ha(r);if(K===9){J={w:new f.Sb(m),q:new f.Ub(m),z:new f.Vb(m)};P=[J.w,J.q];I=new f.Oc(m,F,J);w=[new f.Mc(m,F,J,I),new f.Nc(m,F,J,I)]}else{J={w:new f.Sb(m),z:new f.Vb(m),q:new f.Ub(m),F:new f.jb(m),ga:new f.Ic(m),Pb:new f.Uc(m)};P=[J.w,J.z,J.q,J.F,J.ga,J.Pb];I=new f.Rc(m,F,J);w=[new f.Hc(m,F,J,I),new f.Fc(m,F,J,
|
||||
I),new f.Gc(m,F,J,I),new f.Tb(m,F,J,I)];m.tagName==="IMG"&&w.push(new f.Pc(m,F,J,I));I.ed=w}H=[I].concat(w);if(w=m.currentStyle.getAttribute(f.Q+"watch-ancestors")){w=parseInt(w,10);C=0;for(M=m.parentNode;M&&(w==="NaN"||C++<w);){A(M,"onpropertychange",G);A(M,"onmouseenter",o);A(M,"onmouseleave",u);A(M,"onmousedown",x);if(M.tagName in f.fc){A(M,"onfocus",z);A(M,"onblur",D)}M=M.parentNode}}if(T){f.Oa.ba(t);f.Oa.Qd()}t(1)}if(!S){S=1;K<9&&A(m,"onmove",p);A(m,"onresize",p);A(m,"onpropertychange",v);A(m,
|
||||
"onmouseenter",o);A(m,"onmouseleave",u);A(m,"onmousedown",x);if(m.tagName in f.fc){A(m,"onfocus",z);A(m,"onblur",D)}f.Qa.ba(p);f.K.ba(L)}F.hb()}}function p(){F&&F.Ad()&&t()}function t(w){if(!W)if(R){var C,K=H.length;E();for(C=0;C<K;C++)H[C].Ea();if(w||F.Nd())for(C=0;C<K;C++)H[C].ib();if(w||F.Sd())for(C=0;C<K;C++)H[C].Mb();I.ab();B()}else Q||r()}function v(){var w,C=H.length,K;w=event;if(!W&&!(w&&w.propertyName in l))if(R){E();for(w=0;w<C;w++)H[w].Ea();for(w=0;w<C;w++){K=H[w];K.Cb||K.ib();K.O()&&K.Lb()}I.ab();
|
||||
B()}else Q||r()}function o(){b(m,j)}function u(){c(m,j,h)}function x(){b(m,h);f.lb.ba(y)}function y(){c(m,h);f.lb.Ha(y)}function z(){b(m,k)}function D(){c(m,k)}function G(){var w=event.propertyName;if(w==="className"||w==="id")v()}function E(){F.cb();for(var w=P.length;w--;)P[w].cb()}function B(){for(var w=P.length;w--;)P[w].hb();F.hb()}function A(w,C,K){w.attachEvent(C,K);U.push([w,C,K])}function L(){if(S){for(var w=U.length,C;w--;){C=U[w];C[0].detachEvent(C[1],C[2])}f.K.Ha(L);S=0;U=[]}}function N(){if(!W){var w,
|
||||
C;L();W=1;if(H){w=0;for(C=H.length;w<C;w++){H[w].ec=1;H[w].m()}}T&&f.Oa.Ha(t);f.Qa.Ha(t);H=F=J=P=m=null}}var H,I,F=new da(m),J,P,Q,R,S,U=[],V,W,T;this.Ed=r;this.update=t;this.m=N;this.qd=m}var e={},g=f.Q+"lazy-init",i=f.Q+"poll",j=f.La+"hover",h=f.La+"active",k=f.La+"focus",n=f.La+"first-child",l={background:1,bgColor:1,display:1},q={},s=[];d.yd=function(m){var r=f.p.Aa(m);return e[r]||(e[r]=new d(m))};d.m=function(m){m=f.p.Aa(m);var r=e[m];if(r){r.m();delete e[m]}};d.md=function(){var m=[],r;if(e){for(var p in e)if(e.hasOwnProperty(p)){r=
|
||||
e[p];m.push(r.qd);r.m()}e={}}return m};return d}();f.supportsVML=f.zc;f.attach=function(a){f.Ba<10&&f.zc&&f.kb.yd(a).Ed()};f.detach=function(a){f.kb.m(a)}};
|
||||
var $=element;function init(){var a=window.PIE;a&&doc.media!=="print"&&a.attach($)}function cleanup(){var a=window.PIE;if(a){a.detach($);$=0}}$.readyState==="complete"&&init();
|
||||
</script>
|
||||
</PUBLIC:COMPONENT>
|
||||
|
@ -1,7 +1,7 @@
|
||||
module Compass
|
||||
end
|
||||
|
||||
%w(dependencies util browser_support sass_extensions version errors quick_cache).each do |lib|
|
||||
%w(dependencies util browser_support sass_extensions version errors quick_cache logger).each do |lib|
|
||||
require "compass/#{lib}"
|
||||
end
|
||||
|
||||
|
@ -65,7 +65,10 @@ module Compass
|
||||
end
|
||||
|
||||
def remove(file_name)
|
||||
if File.exists?(file_name)
|
||||
if File.directory?(file_name)
|
||||
FileUtils.rm_rf file_name
|
||||
log_action :remove, basename(file_name)+"/", options
|
||||
elsif File.exists?(file_name)
|
||||
File.unlink file_name
|
||||
log_action :remove, basename(file_name), options
|
||||
end
|
||||
|
@ -4,7 +4,7 @@ end
|
||||
require 'compass/commands/registry'
|
||||
|
||||
%w(base generate_grid_background default help list_frameworks project_base
|
||||
update_project watch_project create_project imports installer_command
|
||||
update_project watch_project create_project clean_project imports installer_command
|
||||
print_version project_stats stamp_pattern sprite validate_project
|
||||
write_configuration interactive unpack_extension).each do |lib|
|
||||
require "compass/commands/#{lib}"
|
||||
|
@ -10,7 +10,7 @@ module Compass
|
||||
attr_accessor :working_path, :options
|
||||
|
||||
def initialize(working_path, options)
|
||||
self.working_path = working_path
|
||||
self.working_path = working_path.to_s
|
||||
self.options = options
|
||||
end
|
||||
|
||||
@ -22,6 +22,14 @@ module Compass
|
||||
raise StandardError.new("Not Implemented")
|
||||
end
|
||||
|
||||
def successful?
|
||||
!@failed
|
||||
end
|
||||
|
||||
def failed!
|
||||
@failed = true
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def framework
|
||||
|
79
lib/compass/commands/clean_project.rb
Normal file
@ -0,0 +1,79 @@
|
||||
require 'compass/commands/project_base'
|
||||
require 'compass/compiler'
|
||||
|
||||
module Compass
|
||||
module Commands
|
||||
module CleanProjectOptionsParser
|
||||
def set_options(opts)
|
||||
opts.banner = %Q{
|
||||
Usage: compass clean [path/to/project] [options]
|
||||
|
||||
Description:
|
||||
Remove generated files and the sass cache.
|
||||
|
||||
Options:
|
||||
}.split("\n").map{|l| l.gsub(/^ */,'')}.join("\n")
|
||||
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
class CleanProject < UpdateProject
|
||||
|
||||
register :clean
|
||||
|
||||
def initialize(working_path, options)
|
||||
super
|
||||
assert_project_directory_exists!
|
||||
end
|
||||
|
||||
def perform
|
||||
compiler = new_compiler_instance
|
||||
compiler.clean!
|
||||
Compass::SpriteImporter.find_all_sprite_map_files(Compass.configuration.images_path).each do |sprite|
|
||||
remove sprite
|
||||
end
|
||||
end
|
||||
|
||||
def determine_cache_location
|
||||
Compass.configuration.cache_path || Sass::Plugin.options[:cache_location] || File.join(working_path, ".sass-cache")
|
||||
end
|
||||
|
||||
class << self
|
||||
def option_parser(arguments)
|
||||
parser = Compass::Exec::CommandOptionParser.new(arguments)
|
||||
parser.extend(Compass::Exec::GlobalOptionsParser)
|
||||
parser.extend(Compass::Exec::ProjectOptionsParser)
|
||||
parser.extend(CleanProjectOptionsParser)
|
||||
end
|
||||
|
||||
def usage
|
||||
option_parser([]).to_s
|
||||
end
|
||||
|
||||
def primary; true; end
|
||||
|
||||
def description(command)
|
||||
"Remove generated files and the sass cache"
|
||||
end
|
||||
|
||||
def parse!(arguments)
|
||||
parser = option_parser(arguments)
|
||||
parser.parse!
|
||||
parse_arguments!(parser, arguments)
|
||||
parser.options
|
||||
end
|
||||
|
||||
def parse_arguments!(parser, arguments)
|
||||
if arguments.size > 0
|
||||
parser.options[:project_name] = arguments.shift if File.directory?(arguments.first)
|
||||
unless arguments.empty?
|
||||
parser.options[:sass_files] = arguments.dup
|
||||
parser.options[:force] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -84,8 +84,8 @@ module Compass
|
||||
end
|
||||
|
||||
def absolute_path?(path)
|
||||
# This is only going to work on unix, gonna need a better implementation.
|
||||
path.index(File::SEPARATOR) == 0
|
||||
# Pretty basic implementation
|
||||
path.index(File::SEPARATOR) == 0 || path.index(':') == 1
|
||||
end
|
||||
|
||||
def skip_extension_discovery?
|
||||
|
@ -16,8 +16,10 @@ module Compass::Commands
|
||||
matching.first
|
||||
elsif name =~ /^-/
|
||||
nil
|
||||
else
|
||||
elsif matching.size > 1
|
||||
raise Compass::Error, "Ambiguous abbreviation '#{name}'. Did you mean one of: #{matching.join(", ")}"
|
||||
else
|
||||
raise Compass::Error, "Command not found: #{name}"
|
||||
end
|
||||
end
|
||||
def abbreviation?(name)
|
||||
|
@ -39,7 +39,7 @@ module Compass
|
||||
|
||||
def perform
|
||||
relative_uri = options[:uri].gsub(/^#{Compass.configuration.images_dir}\//, '')
|
||||
sprites = Compass::SpriteImporter.new(relative_uri, Compass.sass_engine_options)
|
||||
sprites = Compass::SpriteImporter.new(:uri => relative_uri, :options => Compass.sass_engine_options)
|
||||
options[:output_file] ||= File.join(Compass.configuration.sass_path, "sprites", "_#{sprites.name}.#{Compass.configuration.preferred_syntax}")
|
||||
options[:skip_overrides] ||= false
|
||||
contents = sprites.content_for_images(options[:skip_overrides])
|
||||
|
@ -34,7 +34,8 @@ module Compass
|
||||
compiler = new_compiler_instance
|
||||
check_for_sass_files!(compiler)
|
||||
compiler.clean! if compiler.new_config?
|
||||
compiler.run
|
||||
error_count = compiler.run
|
||||
failed! if error_count > 0
|
||||
end
|
||||
|
||||
def check_for_sass_files!(compiler)
|
||||
@ -51,12 +52,10 @@ module Compass
|
||||
|
||||
def new_compiler_instance(additional_options = {})
|
||||
@compiler_opts ||= begin
|
||||
compiler_opts = Compass.sass_engine_options
|
||||
compiler_opts.merge!(:force => options[:force],
|
||||
:sass_files => explicit_sass_files,
|
||||
:dry_run => options[:dry_run])
|
||||
compiler_opts[:quiet] = options[:quiet] if options[:quiet]
|
||||
compiler_opts[:time] = options[:time] if options[:time]
|
||||
compiler_opts = {:sass => Compass.sass_engine_options}
|
||||
compiler_opts.merge!(options)
|
||||
compiler_opts[:sass_files] = explicit_sass_files
|
||||
compiler_opts[:cache_location] = determine_cache_location
|
||||
compiler_opts
|
||||
end
|
||||
|
||||
|
@ -3,16 +3,19 @@ module Compass
|
||||
|
||||
include Actions
|
||||
|
||||
attr_accessor :working_path, :from, :to, :options, :staleness_checker, :importer
|
||||
attr_accessor :working_path, :from, :to, :options, :sass_options, :staleness_checker, :importer
|
||||
|
||||
def initialize(working_path, from, to, options)
|
||||
self.working_path = working_path
|
||||
self.from, self.to = from.gsub('./', ''), to
|
||||
self.working_path = working_path.to_s
|
||||
self.from, self.to = File.expand_path(from), to
|
||||
self.logger = options.delete(:logger)
|
||||
sass_opts = options.delete(:sass) || {}
|
||||
self.options = options
|
||||
self.options[:cache_location] ||= determine_cache_location
|
||||
options[:importer] = self.importer = Sass::Importers::Filesystem.new(from)
|
||||
self.staleness_checker = Sass::Plugin::StalenessChecker.new(options)
|
||||
self.sass_options = options.dup
|
||||
self.sass_options.update(sass_opts)
|
||||
self.sass_options[:cache_location] ||= determine_cache_location
|
||||
self.sass_options[:importer] = self.importer = Sass::Importers::Filesystem.new(from)
|
||||
self.staleness_checker = Sass::Plugin::StalenessChecker.new(sass_options)
|
||||
end
|
||||
|
||||
def determine_cache_location
|
||||
@ -72,16 +75,17 @@ module Compass
|
||||
end
|
||||
|
||||
def clean!
|
||||
FileUtils.rm_rf options[:cache_location]
|
||||
remove options[:cache_location]
|
||||
css_files.each do |css_file|
|
||||
FileUtils.rm_f css_file
|
||||
remove css_file
|
||||
end
|
||||
end
|
||||
|
||||
def run
|
||||
failure_count = 0
|
||||
if new_config?
|
||||
# Wipe out the cache and force compilation if the configuration has changed.
|
||||
FileUtils.rm_rf options[:cache_location]
|
||||
remove options[:cache_location] if options[:cache_location]
|
||||
options[:force] = true
|
||||
end
|
||||
|
||||
@ -94,6 +98,7 @@ module Compass
|
||||
begin
|
||||
compile_if_required sass_filename, css_filename
|
||||
rescue Sass::SyntaxError => e
|
||||
failure_count += 1
|
||||
handle_exception(sass_filename, css_filename, e)
|
||||
end
|
||||
end
|
||||
@ -101,6 +106,7 @@ module Compass
|
||||
if options[:time]
|
||||
puts "Compilation took #{(result.__duration * 1000).round / 1000.0}s"
|
||||
end
|
||||
return failure_count
|
||||
end
|
||||
|
||||
def compile_if_required(sass_filename, css_filename)
|
||||
@ -142,7 +148,7 @@ module Compass
|
||||
# A sass engine for compiling a single file.
|
||||
def engine(sass_filename, css_filename)
|
||||
syntax = (sass_filename =~ /\.(s[ac]ss)$/) && $1.to_sym || :sass
|
||||
opts = options.merge :filename => sass_filename, :css_filename => css_filename, :syntax => syntax
|
||||
opts = sass_options.merge(:filename => sass_filename, :css_filename => css_filename, :syntax => syntax)
|
||||
Sass::Engine.new(open(sass_filename).read, opts)
|
||||
end
|
||||
|
||||
|
@ -38,7 +38,8 @@ module Compass
|
||||
:color_output,
|
||||
:preferred_syntax,
|
||||
:disable_warnings,
|
||||
:sprite_engine
|
||||
:sprite_engine,
|
||||
:chunky_png_options
|
||||
].flatten
|
||||
|
||||
# Registers a new configuration property.
|
||||
|
@ -38,8 +38,8 @@ module Compass
|
||||
end
|
||||
|
||||
def absolute_path?(path)
|
||||
# This is only going to work on unix, gonna need a better implementation.
|
||||
path.index(File::SEPARATOR) == 0
|
||||
# Pretty basic implementation
|
||||
path.index(File::SEPARATOR) == 0 || path.index(':') == 1
|
||||
end
|
||||
|
||||
def to_sass_engine_options
|
||||
|
@ -71,8 +71,10 @@ module Compass
|
||||
end
|
||||
|
||||
# When called with a block, defines the cache buster strategy to be used.
|
||||
# The block must return nil or a string that can be appended to a url as a query parameter.
|
||||
# The returned string must not include the starting '?'.
|
||||
# If the block returns nil or a string, then it is appended to the url as a query parameter.
|
||||
# In this case, the returned string must not include the starting '?'.
|
||||
# The block may also return a hash with :path and/or :query values and it
|
||||
# will replace the original path and query string with the busted values returned.
|
||||
# The block will be passed the root-relative url of the asset.
|
||||
# If the block accepts two arguments, it will also be passed a File object
|
||||
# that points to the asset on disk -- which may or may not exist.
|
||||
|
@ -133,6 +133,10 @@ module Compass
|
||||
:chunky_png
|
||||
end
|
||||
|
||||
def default_chunky_png_options
|
||||
{:compression => Zlib::BEST_COMPRESSION}
|
||||
end
|
||||
|
||||
# helper functions
|
||||
|
||||
def http_join(*segments)
|
||||
|
@ -12,7 +12,7 @@ module Compass::Exec
|
||||
|
||||
def run!
|
||||
begin
|
||||
perform!
|
||||
return perform!
|
||||
rescue Exception => e
|
||||
raise e if e.is_a? SystemExit
|
||||
if e.is_a?(::Compass::Error) || e.is_a?(OptionParser::ParseError)
|
||||
@ -22,7 +22,6 @@ module Compass::Exec
|
||||
end
|
||||
return 1
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
protected
|
||||
@ -40,7 +39,9 @@ module Compass::Exec
|
||||
else
|
||||
command_class.parse!(args)
|
||||
end
|
||||
command_class.new(Dir.getwd, @options).execute
|
||||
cmd = command_class.new(Dir.getwd, @options)
|
||||
cmd.execute
|
||||
cmd.successful? ? 0 : 1
|
||||
rescue OptionParser::ParseError => e
|
||||
puts "Error: #{e.message}"
|
||||
puts command_class.usage if command_class.respond_to?(:usage)
|
||||
|
@ -1,12 +1,12 @@
|
||||
module Compass::SassExtensions::Functions::Display
|
||||
DEFAULT_DISPLAY = {
|
||||
:block => %w{address blockquote center dir div dd dl dt fieldset form
|
||||
frameset h1 h2 h3 h4 h5 h6 hr isindex menu noframes
|
||||
noscript ol p pre ul
|
||||
article aside dialog figure footer header hgroup nav section},
|
||||
:inline => %w{a abbr acronym b basefont bdo big br cite code dfn em
|
||||
font i img input kbd label q s samp select small span
|
||||
strike strong sub sup textarea tt u var},
|
||||
:block => %w{address article aside blockquote center dir div dd details dl dt fieldset
|
||||
figcaption figure form footer frameset h1 h2 h3 h4 h5 h6 hr header hgroup
|
||||
isindex menu nav noframes noscript ol p pre section summary ul},
|
||||
:inline => %w{a abbr acronym audio b basefont bdo big br canvas cite code command
|
||||
datalist dfn em embed font i img input keygen kbd label mark meter output
|
||||
progress q rp rt ruby s samp select small span strike strong sub
|
||||
sup textarea time tt u var video wbr},
|
||||
:table => %w{table},
|
||||
:"list-item" => %w{li},
|
||||
:"table-row-group" => %w{tbody},
|
||||
@ -14,9 +14,10 @@ module Compass::SassExtensions::Functions::Display
|
||||
:"table-footer-group" => %w{tfoot},
|
||||
:"table-row" => %w{tr},
|
||||
:"table-cell" => %w{th td},
|
||||
:html5 => %w{article aside dialog figure footer header hgroup nav section}
|
||||
:"html5-block" => %w{article aside details figcaption figure footer header hgroup menu nav section summary},
|
||||
:"html5-inline" => %w{audio canvas command datalist embed keygen mark meter output progress rp rt ruby time video wbr},
|
||||
}
|
||||
|
||||
DEFAULT_DISPLAY[:html5] = (DEFAULT_DISPLAY[:"html5-block"] + DEFAULT_DISPLAY[:"html5-inline"]).sort
|
||||
# returns a comma delimited string for all the
|
||||
# elements according to their default css3 display value.
|
||||
def elements_of_type(display)
|
||||
|
@ -35,6 +35,8 @@ private
|
||||
'image/jpeg'
|
||||
when /\.gif$/i
|
||||
'image/gif'
|
||||
when /\.svg$/i
|
||||
'image/svg+xml'
|
||||
when /\.otf$/i
|
||||
'font/opentype'
|
||||
when /\.ttf$/i
|
||||
|
@ -96,7 +96,7 @@ module Compass::SassExtensions::Functions::Sprites
|
||||
def sprite_url(map)
|
||||
verify_map(map, "sprite-url")
|
||||
map.generate
|
||||
image_url(Sass::Script::String.new("#{map.path}-#{map.uniqueness_hash}.png"),
|
||||
image_url(Sass::Script::String.new("#{map.path}-s#{map.uniqueness_hash}.png"),
|
||||
Sass::Script::Bool.new(false),
|
||||
Sass::Script::Bool.new(false))
|
||||
end
|
||||
|
@ -91,9 +91,7 @@ module Compass::SassExtensions::Functions::Urls
|
||||
if cache_buster.is_a?(Sass::Script::String)
|
||||
path += "?#{cache_buster.value}"
|
||||
else
|
||||
if buster = compute_cache_buster(path, real_path)
|
||||
path += "?#{buster}"
|
||||
end
|
||||
path = cache_busted_path(path, real_path)
|
||||
end
|
||||
end
|
||||
|
||||
@ -137,6 +135,23 @@ module Compass::SassExtensions::Functions::Urls
|
||||
end
|
||||
end
|
||||
|
||||
def cache_busted_path(path, real_path)
|
||||
cache_buster = compute_cache_buster(path, real_path)
|
||||
if cache_buster.nil?
|
||||
return path
|
||||
elsif cache_buster.is_a?(String)
|
||||
cache_buster = {:query => cache_buster}
|
||||
else
|
||||
path = cache_buster[:path] if cache_buster[:path]
|
||||
end
|
||||
|
||||
if cache_buster[:query]
|
||||
"%s?%s" % [path, cache_buster[:query]]
|
||||
else
|
||||
path
|
||||
end
|
||||
end
|
||||
|
||||
def compute_cache_buster(path, real_path)
|
||||
if Compass.configuration.asset_cache_buster
|
||||
args = [path]
|
||||
|
@ -9,6 +9,8 @@ module Compass
|
||||
end
|
||||
|
||||
require 'compass/sass_extensions/sprites/image'
|
||||
require 'compass/sass_extensions/sprites/sprite_methods'
|
||||
require 'compass/sass_extensions/sprites/image_methods'
|
||||
require 'compass/sass_extensions/sprites/sprite_map'
|
||||
require 'compass/sass_extensions/sprites/engines'
|
||||
|
||||
|
@ -1 +1,25 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
class Engine
|
||||
attr_accessor :width, :height, :images, :canvas
|
||||
def initialize(width, height, images)
|
||||
@width, @height, @images = width, height, images
|
||||
@canvas = nil
|
||||
end
|
||||
|
||||
def construct_sprite
|
||||
raise ::Compass::Error, "You must impliment construct_sprite"
|
||||
end
|
||||
|
||||
def save(filename)
|
||||
raise ::Compass::Error, "You must impliment save(filename)"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
require 'compass/sass_extensions/sprites/engines/chunky_png_engine'
|
@ -7,20 +7,19 @@ end
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module ChunkyPngEngine
|
||||
class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine
|
||||
|
||||
# Returns a PNG object
|
||||
def construct_sprite
|
||||
output_png = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
|
||||
@canvas = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
|
||||
images.each do |image|
|
||||
input_png = ChunkyPNG::Image.from_file(image.file)
|
||||
if image.repeat == "no-repeat"
|
||||
output_png.replace! input_png, image.left, image.top
|
||||
canvas.replace! input_png, image.left, image.top
|
||||
else
|
||||
x = image.left - (image.left / image.width).ceil * image.width
|
||||
while x < width do
|
||||
begin
|
||||
output_png.replace! input_png, x, image.top
|
||||
canvas.replace! input_png, x, image.top
|
||||
x += image.width
|
||||
rescue ChunkyPNG::OutOfBounds
|
||||
break;
|
||||
@ -28,8 +27,16 @@ module Compass
|
||||
end
|
||||
end
|
||||
end
|
||||
output_png
|
||||
end
|
||||
|
||||
def save(filename)
|
||||
if canvas.nil?
|
||||
construct_sprite
|
||||
end
|
||||
|
||||
canvas.save(filename, Compass.configuration.chunky_png_options)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
32
lib/compass/sass_extensions/sprites/image_methods.rb
Normal file
@ -0,0 +1,32 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module ImageMethods
|
||||
# Fetches the Sprite::Image object for the supplied name
|
||||
def image_for(name)
|
||||
@images.detect { |img| img.name == name}
|
||||
end
|
||||
|
||||
# Returns true if the image name has a hover selector image
|
||||
def has_hover?(name)
|
||||
!image_for("#{name}_hover").nil?
|
||||
end
|
||||
|
||||
# Returns true if the image name has a target selector image
|
||||
def has_target?(name)
|
||||
!image_for("#{name}_target").nil?
|
||||
end
|
||||
|
||||
# Returns true if the image name has an active selector image
|
||||
def has_active?(name)
|
||||
!image_for("#{name}_active").nil?
|
||||
end
|
||||
|
||||
# Return and array of image names that make up this sprite
|
||||
def sprite_names
|
||||
image_names.map { |f| File.basename(f, '.png') }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -2,6 +2,11 @@ module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
class SpriteMap < Sass::Script::Literal
|
||||
attr_accessor :image_names, :path, :name, :map, :kwargs
|
||||
attr_accessor :images, :width, :height, :engine
|
||||
|
||||
include SpriteMethods
|
||||
include ImageMethods
|
||||
|
||||
|
||||
# Initialize a new sprite object from a relative file path
|
||||
@ -14,21 +19,7 @@ module Compass
|
||||
new(sprites, importer.path, importer.name, context, kwargs)
|
||||
end
|
||||
|
||||
# Loads the sprite engine
|
||||
def require_engine!
|
||||
self.class.send(:include, eval("::Compass::SassExtensions::Sprites::#{modulize}Engine"))
|
||||
end
|
||||
|
||||
# Changing this string will invalidate all previously generated sprite images.
|
||||
# We should do so only when the packing algorithm changes
|
||||
SPRITE_VERSION = "1"
|
||||
|
||||
attr_accessor :image_names, :path, :name, :kwargs
|
||||
attr_accessor :images, :width, :height
|
||||
|
||||
|
||||
def initialize(sprites, path, name, context, kwargs)
|
||||
require_engine!
|
||||
@image_names = sprites
|
||||
@path = path
|
||||
@name = name
|
||||
@ -37,150 +28,12 @@ module Compass
|
||||
@images = nil
|
||||
@width = nil
|
||||
@height = nil
|
||||
@engine = nil
|
||||
@evaluation_context = context
|
||||
validate!
|
||||
compute_image_metadata!
|
||||
end
|
||||
|
||||
# Calculate the size of the sprite
|
||||
def size
|
||||
[width, height]
|
||||
end
|
||||
|
||||
# Calculates the overal image dimensions
|
||||
# collects image sizes and input parameters for each sprite
|
||||
# Calculates the height
|
||||
def compute_image_metadata!
|
||||
@width = 0
|
||||
init_images
|
||||
compute_image_positions!
|
||||
@height = @images.last.top + @images.last.height
|
||||
end
|
||||
|
||||
# Creates the Sprite::Image objects for each image and calculates the width
|
||||
def init_images
|
||||
@images = image_names.collect do |relative_file|
|
||||
image = Compass::SassExtensions::Sprites::Image.new(self, relative_file, kwargs)
|
||||
@width = [ @width, image.width + image.offset ].max
|
||||
image
|
||||
end
|
||||
end
|
||||
|
||||
# Calculates the overal image dimensions
|
||||
# collects image sizes and input parameters for each sprite
|
||||
def compute_image_positions!
|
||||
@images.each_with_index do |image, index|
|
||||
image.left = image.position.unit_str == "%" ? (@width - image.width) * (image.position.value / 100) : image.position.value
|
||||
next if index == 0
|
||||
last_image = @images[index-1]
|
||||
image.top = last_image.top + last_image.height + [image.spacing, last_image.spacing].max
|
||||
end
|
||||
end
|
||||
|
||||
# Fetches the Sprite::Image object for the supplied name
|
||||
def image_for(name)
|
||||
@images.detect { |img| img.name == name}
|
||||
end
|
||||
|
||||
# Returns true if the image name has a hover selector image
|
||||
def has_hover?(name)
|
||||
!image_for("#{name}_hover").nil?
|
||||
end
|
||||
|
||||
# Returns true if the image name has a target selector image
|
||||
def has_target?(name)
|
||||
!image_for("#{name}_target").nil?
|
||||
end
|
||||
|
||||
# Returns true if the image name has an active selector image
|
||||
def has_active?(name)
|
||||
!image_for("#{name}_active").nil?
|
||||
end
|
||||
|
||||
# Return and array of image names that make up this sprite
|
||||
def sprite_names
|
||||
image_names.map { |f| File.basename(f, '.png') }
|
||||
end
|
||||
|
||||
|
||||
# Validates that the sprite_names are valid sass
|
||||
def validate!
|
||||
for sprite_name in sprite_names
|
||||
unless sprite_name =~ /\A#{Sass::SCSS::RX::IDENT}\Z/
|
||||
raise Sass::SyntaxError, "#{sprite_name} must be a legal css identifier"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# The on-the-disk filename of the sprite
|
||||
def filename
|
||||
File.join(Compass.configuration.images_path, "#{path}-#{uniqueness_hash}.png")
|
||||
end
|
||||
|
||||
# Generate a sprite image if necessary
|
||||
def generate
|
||||
if generation_required?
|
||||
if kwargs.get_var('cleanup').value
|
||||
cleanup_old_sprites
|
||||
end
|
||||
sprite_data = construct_sprite
|
||||
save!(sprite_data)
|
||||
Compass.configuration.run_callback(:sprite_generated, sprite_data)
|
||||
end
|
||||
end
|
||||
|
||||
def cleanup_old_sprites
|
||||
Dir[File.join(Compass.configuration.images_path, "#{path}-*.png")].each do |file|
|
||||
FileUtils.rm file
|
||||
end
|
||||
end
|
||||
|
||||
# Does this sprite need to be generated
|
||||
def generation_required?
|
||||
!File.exists?(filename) || outdated?
|
||||
end
|
||||
|
||||
# Returns the uniqueness hash for this sprite object
|
||||
def uniqueness_hash
|
||||
@uniqueness_hash ||= begin
|
||||
sum = Digest::MD5.new
|
||||
sum << SPRITE_VERSION
|
||||
sum << path
|
||||
images.each do |image|
|
||||
[:relative_file, :height, :width, :repeat, :spacing, :position, :digest].each do |attr|
|
||||
sum << image.send(attr).to_s
|
||||
end
|
||||
end
|
||||
sum.hexdigest[0...10]
|
||||
end
|
||||
@uniqueness_hash
|
||||
end
|
||||
|
||||
# Saves the sprite engine
|
||||
def save!(output_png)
|
||||
saved = output_png.save filename
|
||||
Compass.configuration.run_callback(:sprite_saved, filename)
|
||||
saved
|
||||
end
|
||||
|
||||
# All the full-path filenames involved in this sprite
|
||||
def image_filenames
|
||||
@images.map(&:file)
|
||||
end
|
||||
|
||||
# Checks whether this sprite is outdated
|
||||
def outdated?
|
||||
if File.exists?(filename)
|
||||
return @images.map(&:mtime).any? { |imtime| imtime.to_i > self.mtime.to_i }
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
# Mtime of the sprite file
|
||||
def mtime
|
||||
@mtime ||= File.mtime(filename)
|
||||
end
|
||||
|
||||
def inspect
|
||||
to_s
|
||||
end
|
||||
|
134
lib/compass/sass_extensions/sprites/sprite_methods.rb
Normal file
@ -0,0 +1,134 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module SpriteMethods
|
||||
|
||||
# Changing this string will invalidate all previously generated sprite images.
|
||||
# We should do so only when the packing algorithm changes
|
||||
SPRITE_VERSION = "1"
|
||||
|
||||
# Calculates the overal image dimensions
|
||||
# collects image sizes and input parameters for each sprite
|
||||
# Calculates the height
|
||||
def compute_image_metadata!
|
||||
@width = 0
|
||||
init_images
|
||||
compute_image_positions!
|
||||
@height = @images.last.top + @images.last.height
|
||||
init_engine
|
||||
end
|
||||
|
||||
def init_engine
|
||||
@engine = eval("::Compass::SassExtensions::Sprites::#{modulize}Engine.new(nil, nil, nil)")
|
||||
@engine.width = @width
|
||||
@engine.height = @height
|
||||
@engine.images = @images
|
||||
end
|
||||
|
||||
# Creates the Sprite::Image objects for each image and calculates the width
|
||||
def init_images
|
||||
@images = image_names.collect do |relative_file|
|
||||
image = Compass::SassExtensions::Sprites::Image.new(self, relative_file, kwargs)
|
||||
@width = [ @width, image.width + image.offset ].max
|
||||
image
|
||||
end
|
||||
end
|
||||
|
||||
# Calculates the overal image dimensions
|
||||
# collects image sizes and input parameters for each sprite
|
||||
def compute_image_positions!
|
||||
@images.each_with_index do |image, index|
|
||||
image.left = image.position.unit_str == "%" ? (@width - image.width) * (image.position.value / 100) : image.position.value
|
||||
next if index == 0
|
||||
last_image = @images[index-1]
|
||||
image.top = last_image.top + last_image.height + [image.spacing, last_image.spacing].max
|
||||
end
|
||||
end
|
||||
|
||||
# Validates that the sprite_names are valid sass
|
||||
def validate!
|
||||
for sprite_name in sprite_names
|
||||
unless sprite_name =~ /\A#{Sass::SCSS::RX::IDENT}\Z/
|
||||
raise Sass::SyntaxError, "#{sprite_name} must be a legal css identifier"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# The on-the-disk filename of the sprite
|
||||
def filename
|
||||
File.join(Compass.configuration.images_path, "#{path}-s#{uniqueness_hash}.png")
|
||||
end
|
||||
|
||||
# Generate a sprite image if necessary
|
||||
def generate
|
||||
if generation_required?
|
||||
if kwargs.get_var('cleanup').value
|
||||
cleanup_old_sprites
|
||||
end
|
||||
engine.construct_sprite
|
||||
Compass.configuration.run_callback(:sprite_generated, engine.canvas)
|
||||
save!
|
||||
end
|
||||
end
|
||||
|
||||
def cleanup_old_sprites
|
||||
Dir[File.join(Compass.configuration.images_path, "#{path}-*.png")].each do |file|
|
||||
FileUtils.rm file
|
||||
end
|
||||
end
|
||||
|
||||
# Does this sprite need to be generated
|
||||
def generation_required?
|
||||
!File.exists?(filename) || outdated?
|
||||
end
|
||||
|
||||
# Returns the uniqueness hash for this sprite object
|
||||
def uniqueness_hash
|
||||
@uniqueness_hash ||= begin
|
||||
sum = Digest::MD5.new
|
||||
sum << SPRITE_VERSION
|
||||
sum << path
|
||||
images.each do |image|
|
||||
[:relative_file, :height, :width, :repeat, :spacing, :position, :digest].each do |attr|
|
||||
sum << image.send(attr).to_s
|
||||
end
|
||||
end
|
||||
sum.hexdigest[0...10]
|
||||
end
|
||||
@uniqueness_hash
|
||||
end
|
||||
|
||||
# Saves the sprite engine
|
||||
def save!
|
||||
saved = engine.save(filename)
|
||||
Compass.configuration.run_callback(:sprite_saved, filename)
|
||||
saved
|
||||
end
|
||||
|
||||
# All the full-path filenames involved in this sprite
|
||||
def image_filenames
|
||||
@images.map(&:file)
|
||||
end
|
||||
|
||||
# Checks whether this sprite is outdated
|
||||
def outdated?
|
||||
if File.exists?(filename)
|
||||
return @images.map(&:mtime).any? { |imtime| imtime.to_i > self.mtime.to_i }
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
# Mtime of the sprite file
|
||||
def mtime
|
||||
@mtime ||= File.mtime(filename)
|
||||
end
|
||||
|
||||
# Calculate the size of the sprite
|
||||
def size
|
||||
[width, height]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -5,6 +5,13 @@ module Compass
|
||||
SPRITE_IMPORTER_REGEX = %r{((.+/)?([^\*.]+))/(.+?)\.png}
|
||||
VALID_EXTENSIONS = ['.png']
|
||||
|
||||
# finds all sprite files
|
||||
def self.find_all_sprite_map_files(path)
|
||||
hex = "[0-9a-f]"
|
||||
glob = "*-{,s}#{hex*10}{#{VALID_EXTENSIONS.join(",")}}"
|
||||
Dir.glob(File.join(path, "**", glob))
|
||||
end
|
||||
|
||||
def self.load(uri, options)
|
||||
klass = Compass::SpriteImporter.new
|
||||
klass.uri, klass.options = uri, options
|
||||
@ -31,7 +38,7 @@ module Compass
|
||||
end
|
||||
|
||||
def to_s
|
||||
content_for_images
|
||||
self.class.name
|
||||
end
|
||||
|
||||
def hash
|
||||
|
@ -1,9 +1,16 @@
|
||||
begin
|
||||
require 'rubygems'
|
||||
require 'compass-validator'
|
||||
rescue LoadError
|
||||
raise Compass::MissingDependency, %Q{The Compass CSS Validator could not be loaded. Please install it:
|
||||
|
||||
rescue LoadError => e
|
||||
if e.message =~ /core_ext/
|
||||
raise Compass::MissingDependency, <<-ERRORMSG
|
||||
The Compass CSS Validator is out of date. Please upgrade it:
|
||||
sudo gem install compass-validator --version ">= 3.0.1"
|
||||
ERRORMSG
|
||||
else
|
||||
raise Compass::MissingDependency, <<-ERRORMSG
|
||||
The Compass CSS Validator could not be loaded. Please install it:
|
||||
sudo gem install compass-validator
|
||||
}
|
||||
ERRORMSG
|
||||
end
|
||||
end
|
||||
|
@ -1,57 +0,0 @@
|
||||
require 'spec_helper'
|
||||
describe Compass::SassExtensions::Sprites::Base do
|
||||
|
||||
before :each do
|
||||
@images_src_path = File.join(File.dirname(__FILE__), '..', '..', '..', 'test_project', 'public', 'images')
|
||||
@images_tmp_path = File.join(File.dirname(__FILE__), '..', '..', '..', 'test_project', 'public', 'images-tmp')
|
||||
FileUtils.cp_r @images_src_path, @images_tmp_path
|
||||
config = Compass::Configuration::Data.new('config')
|
||||
config.images_path = @images_tmp_path
|
||||
Compass.add_configuration(config)
|
||||
Compass.configure_sass_plugin!
|
||||
#fix this eww
|
||||
options = Compass.sass_engine_options.extend Compass::SassExtensions::Functions::Sprites::VariableReader
|
||||
@map = Compass::SpriteImporter.new("selectors/*.png", options)
|
||||
@base = Compass::SassExtensions::Sprites::Base.new(@map.sprite_names.map{|n| "selectors/#{n}.png"}, @map.path, 'selectors', @map.sass_engine, @map.options)
|
||||
end
|
||||
|
||||
after :each do
|
||||
FileUtils.rm_r @images_tmp_path
|
||||
end
|
||||
|
||||
subject { @base }
|
||||
|
||||
its(:size) { should == [10,40] }
|
||||
its(:sprite_names) { should == @map.sprite_names }
|
||||
its(:image_filenames) { should == Dir["#{@images_tmp_path}/selectors/*.png"].sort }
|
||||
its(:generation_required?) { should be_true }
|
||||
its(:uniqueness_hash) { should == 'ef52c5c63a'}
|
||||
its(:outdated?) { should be_true }
|
||||
its(:filename) { should == File.join(@images_tmp_path, "#{@base.path}-#{@base.uniqueness_hash}.png")}
|
||||
|
||||
it "should return the 'ten-by-ten' image" do
|
||||
subject.image_for('ten-by-ten').name.should == 'ten-by-ten'
|
||||
subject.image_for('ten-by-ten').should be_a Compass::SassExtensions::Sprites::Image
|
||||
end
|
||||
|
||||
%w(target hover active).each do |selector|
|
||||
it "should have a #{selector}" do
|
||||
subject.send(:"has_#{selector}?", 'ten-by-ten').should be_true
|
||||
end
|
||||
|
||||
it "should return #{selector} image class" do
|
||||
subject.image_for('ten-by-ten').send(:"#{selector}").name.should == "ten-by-ten_#{selector}"
|
||||
end
|
||||
|
||||
end
|
||||
context "#generate" do
|
||||
before { @base.generate }
|
||||
it "should generate sprite" do
|
||||
File.exists?(@base.filename).should be_true
|
||||
end
|
||||
|
||||
its(:generation_required?) { should be_false }
|
||||
its(:outdated?) { should be_false }
|
||||
end
|
||||
|
||||
end
|
@ -1,161 +0,0 @@
|
||||
require 'spec_helper'
|
||||
require 'compass/sass_extensions/sprites/image'
|
||||
|
||||
describe Compass::SassExtensions::Sprites::Image do
|
||||
let(:sprite_filename) { 'squares/ten-by-ten.png' }
|
||||
let(:sprite_path) { File.join(images_src_path, sprite_filename) }
|
||||
let(:sprite_name) { File.basename(sprite_filename, '.png') }
|
||||
let(:parent) do
|
||||
mock
|
||||
end
|
||||
before do
|
||||
parent.stubs(:image_for).with('ten-by-ten').returns(image)
|
||||
parent.stubs(:image_for).with('ten-by-ten_hover').returns(hover_image)
|
||||
end
|
||||
let(:image) { self.class.describes.new(parent, File.join(sprite_filename), options)}
|
||||
let(:hover_image) { self.class.describes.new(parent, File.join('selectors/ten-by-ten_hover.png'), options)}
|
||||
let(:digest) { Digest::MD5.file(sprite_path).hexdigest }
|
||||
subject { image }
|
||||
|
||||
before {
|
||||
file = StringIO.new("images_path = #{images_src_path.inspect}\n")
|
||||
Compass.add_configuration(file, "sprite_config")
|
||||
}
|
||||
|
||||
describe '#initialize' do
|
||||
its(:name) { should == sprite_name }
|
||||
its(:file) { should == sprite_path }
|
||||
its(:relative_file) { should == sprite_filename }
|
||||
its(:width) { should == 10 }
|
||||
its(:height) { should == 10 }
|
||||
its(:digest) { should == digest }
|
||||
its(:top) { should == 0 }
|
||||
its(:left) { should == 0 }
|
||||
end
|
||||
|
||||
let(:get_var_expects) { nil }
|
||||
let(:get_var_return) { nil }
|
||||
|
||||
let(:options) {
|
||||
options = mock
|
||||
options.stubs(:get_var).with(anything).returns(nil)
|
||||
options.stubs(:get_var).with(get_var_expects).returns(get_var_return)
|
||||
options
|
||||
}
|
||||
|
||||
describe '#parent' do
|
||||
context '_hover' do
|
||||
subject { hover_image }
|
||||
its(:parent) { should == image }
|
||||
end
|
||||
context 'no parent' do
|
||||
subject { image }
|
||||
its(:parent) { should be_nil }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#repeat' do
|
||||
let(:type) { nil }
|
||||
let(:get_var_return) { OpenStruct.new(:value => type) }
|
||||
|
||||
context 'specific image' do
|
||||
let(:type) { 'specific' }
|
||||
let(:get_var_expects) { "#{sprite_name}-repeat" }
|
||||
|
||||
its(:repeat) { should == type }
|
||||
end
|
||||
|
||||
context 'global' do
|
||||
let(:type) { 'global' }
|
||||
let(:get_var_expects) { 'repeat' }
|
||||
|
||||
its(:repeat) { should == type }
|
||||
end
|
||||
|
||||
context 'default' do
|
||||
let(:get_var_expects) { nil }
|
||||
|
||||
its(:repeat) { should == "no-repeat" }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#position' do
|
||||
let(:type) { nil }
|
||||
let(:get_var_return) { type }
|
||||
|
||||
context 'specific image' do
|
||||
let(:type) { 'specific' }
|
||||
let(:get_var_expects) { "#{sprite_name}-position" }
|
||||
|
||||
its(:position) { should == type }
|
||||
end
|
||||
|
||||
context 'global' do
|
||||
let(:type) { 'global' }
|
||||
let(:get_var_expects) { 'position' }
|
||||
|
||||
its(:position) { should == type }
|
||||
end
|
||||
|
||||
context 'default' do
|
||||
let(:get_var_expects) { nil }
|
||||
|
||||
its(:position) { should == Sass::Script::Number.new(0, ["px"]) }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#spacing' do
|
||||
let(:type) { nil }
|
||||
let(:get_var_return) { OpenStruct.new(:value => type) }
|
||||
|
||||
context 'specific image' do
|
||||
let(:type) { 'specific' }
|
||||
let(:get_var_expects) { "#{sprite_name}-spacing" }
|
||||
|
||||
its(:spacing) { should == type }
|
||||
end
|
||||
|
||||
context 'global' do
|
||||
let(:type) { 'global' }
|
||||
let(:get_var_expects) { 'spacing' }
|
||||
|
||||
its(:spacing) { should == type }
|
||||
end
|
||||
|
||||
context 'default' do
|
||||
let(:get_var_expects) { nil }
|
||||
|
||||
its(:spacing) { should == Sass::Script::Number.new(0).value }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#offset' do
|
||||
before { image.stubs(:position).returns(stub_position) }
|
||||
|
||||
let(:offset) { 100 }
|
||||
let(:stub_position) {
|
||||
stub(:value => offset)
|
||||
}
|
||||
|
||||
context 'unitless' do
|
||||
before { stub_position.stubs(:unitless?).returns(true) }
|
||||
before { stub_position.stubs(:unit_str).returns('em') }
|
||||
|
||||
its(:offset) { should == offset }
|
||||
end
|
||||
|
||||
context 'pixels' do
|
||||
before { stub_position.stubs(:unitless?).returns(false) }
|
||||
before { stub_position.stubs(:unit_str).returns('px') }
|
||||
|
||||
its(:offset) { should == offset }
|
||||
end
|
||||
|
||||
context 'neither, use 0' do
|
||||
before { stub_position.stubs(:unitless?).returns(false) }
|
||||
before { stub_position.stubs(:unit_str).returns('em') }
|
||||
|
||||
its(:offset) { should == 0 }
|
||||
end
|
||||
end
|
||||
end
|
@ -1,54 +0,0 @@
|
||||
require 'spec_helper'
|
||||
require 'fakefs/spec_helpers'
|
||||
require 'timecop'
|
||||
|
||||
describe Compass::SpriteImporter do
|
||||
include FakeFS::SpecHelpers
|
||||
|
||||
let(:sprite_map) { self.class.describes.new(uri, options) }
|
||||
let(:options) { { :test => :test2 } }
|
||||
|
||||
subject { sprite_map }
|
||||
|
||||
let(:path) { 'path' }
|
||||
let(:dir) { "dir/#{name}" }
|
||||
let(:name) { 'subdir' }
|
||||
|
||||
let(:sprite_path) { File.join(path, dir) }
|
||||
let(:files) { (1..3).collect { |i| File.join(sprite_path, "#{i}.png") } }
|
||||
let(:expanded_files) { files.collect { |file| File.expand_path(file) } }
|
||||
|
||||
let(:configuration) { stub(:images_path => path) }
|
||||
let(:mtime) { Time.now - 30 }
|
||||
|
||||
before {
|
||||
Compass.stubs(:configuration).returns(configuration)
|
||||
|
||||
FileUtils.mkdir_p(sprite_path)
|
||||
Timecop.freeze(mtime) do
|
||||
files.each { |file| File.open(file, 'w') }
|
||||
end
|
||||
Timecop.return
|
||||
}
|
||||
|
||||
describe '#initialize' do
|
||||
let(:uri) { 'dir/subdir/*.png' }
|
||||
|
||||
its(:uri) { should == uri }
|
||||
its(:path) { should == dir }
|
||||
its(:name) { should == name }
|
||||
|
||||
its(:files) { should == expanded_files }
|
||||
|
||||
its(:sass_options) { should == options.merge(:filename => name, :syntax => :scss, :importer => sprite_map) }
|
||||
|
||||
|
||||
it "should have a correct mtime" do
|
||||
sprite_map.mtime(uri, subject.sass_options).should == mtime
|
||||
end
|
||||
|
||||
it "should have a test for the sass engine" do
|
||||
pending 'sass'
|
||||
end
|
||||
end
|
||||
end
|
@ -1,5 +0,0 @@
|
||||
require 'spec_helper'
|
||||
require 'fakefs/spec_helpers'
|
||||
|
||||
describe Compass::Sprites do
|
||||
end
|
@ -1,37 +0,0 @@
|
||||
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
||||
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
||||
require 'rubygems'
|
||||
require 'compass'
|
||||
require 'rspec'
|
||||
require 'rspec/autorun'
|
||||
require 'mocha'
|
||||
|
||||
module CompassGlobalInclude
|
||||
class << self
|
||||
def included(klass)
|
||||
klass.instance_eval do
|
||||
let(:images_src_path) { File.join(File.dirname(__FILE__), 'test_project', 'public', 'images') }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module CompassSpriteHelpers
|
||||
def create_sprite_temp
|
||||
::FileUtils.cp_r @images_src_path, @images_tmp_path
|
||||
end
|
||||
|
||||
def clean_up_sprites
|
||||
::FileUtils.rm_r @images_tmp_path
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include(CompassGlobalInclude)
|
||||
config.include(CompassSpriteHelpers)
|
||||
config.before :each do
|
||||
@images_src_path = File.join(File.dirname(__FILE__), 'test_project', 'public', 'images')
|
||||
@images_tmp_path = File.join(File.dirname(__FILE__), 'test_project', 'public', 'images-tmp')
|
||||
end
|
||||
config.mock_with :mocha
|
||||
end
|
@ -1,571 +0,0 @@
|
||||
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
||||
require 'digest/md5'
|
||||
|
||||
describe Compass::Sprites do
|
||||
|
||||
before :each do
|
||||
create_sprite_temp
|
||||
file = StringIO.new("images_path = #{@images_tmp_path.inspect}\n")
|
||||
Compass.add_configuration(file, "sprite_config")
|
||||
Compass.configure_sass_plugin!
|
||||
end
|
||||
|
||||
after :each do
|
||||
clean_up_sprites
|
||||
end
|
||||
|
||||
def map_location(file)
|
||||
Dir.glob(File.join(@images_tmp_path, file)).first
|
||||
end
|
||||
|
||||
def image_size(file)
|
||||
IO.read(map_location(file))[0x10..0x18].unpack('NN')
|
||||
end
|
||||
|
||||
def image_md5(file)
|
||||
md5 = Digest::MD5.new
|
||||
md5.update IO.read(map_location(file))
|
||||
md5.hexdigest
|
||||
end
|
||||
|
||||
def render(scss)
|
||||
scss = %Q(@import "compass"; #{scss})
|
||||
options = Compass.sass_engine_options
|
||||
options[:line_comments] = false
|
||||
options[:style] = :expanded
|
||||
options[:syntax] = :scss
|
||||
css = Sass::Engine.new(scss, options).render
|
||||
# reformat to fit result of heredoc:
|
||||
" #{css.gsub('@charset "UTF-8";', '').gsub(/\n/, "\n ").strip}\n"
|
||||
end
|
||||
|
||||
#Callbacks
|
||||
describe 'callbacks' do
|
||||
it "should fire on_sprite_saved" do
|
||||
saved = false
|
||||
path = nil
|
||||
Compass.configuration.on_sprite_saved {|filepath| path = filepath; saved = true }
|
||||
render <<-SCSS
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
saved.should eq true
|
||||
path.should be_kind_of String
|
||||
end
|
||||
it "should fire on_sprite_generated" do
|
||||
saved = false
|
||||
sprite_data = nil
|
||||
Compass.configuration.on_sprite_generated {|data| sprite_data = data; saved = true }
|
||||
render <<-SCSS
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
sprite_data.should be_kind_of ChunkyPNG::Image
|
||||
saved.should eq true
|
||||
end
|
||||
end
|
||||
|
||||
# DEFAULT USAGE:
|
||||
it "should generate sprite classes" do
|
||||
css = render <<-SCSS
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-161c60ad78.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -10px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 30]
|
||||
image_md5('squares-*.png').should == 'fcc93d7b279c2ad6898fbca49cbd01e1'
|
||||
end
|
||||
|
||||
it "should generate sprite classes with dimensions" do
|
||||
css = render <<-SCSS
|
||||
$squares-sprite-dimensions: true;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-161c60ad78.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -10px;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 30]
|
||||
end
|
||||
|
||||
it "should provide sprite mixin" do
|
||||
css = render <<-SCSS
|
||||
@import "squares/*.png";
|
||||
|
||||
.cubicle {
|
||||
@include squares-sprite("ten-by-ten");
|
||||
}
|
||||
|
||||
.large-cube {
|
||||
@include squares-sprite("twenty-by-twenty", true);
|
||||
}
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .cubicle, .large-cube {
|
||||
background: url('/squares-161c60ad78.png') no-repeat;
|
||||
}
|
||||
|
||||
.cubicle {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.large-cube {
|
||||
background-position: 0 -10px;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 30]
|
||||
end
|
||||
|
||||
# CUSTOMIZATIONS:
|
||||
|
||||
it "should be possible to change the base class" do
|
||||
css = render <<-SCSS
|
||||
$squares-sprite-base-class: ".circles";
|
||||
@import "squares/*.png";
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.circles {
|
||||
background: url('/squares-161c60ad78.png') no-repeat;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 30]
|
||||
end
|
||||
|
||||
it "should calculate the spacing between images but not before first image" do
|
||||
css = render <<-SCSS
|
||||
$squares-ten-by-ten-spacing: 33px;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-89450808af.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -43px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 63]
|
||||
end
|
||||
|
||||
it "should calculate the spacing between images" do
|
||||
css = render <<-SCSS
|
||||
$squares-twenty-by-twenty-spacing: 33px;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-673837183a.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -43px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 63]
|
||||
end
|
||||
|
||||
it "should calculate the maximum spacing between images" do
|
||||
css = render <<-SCSS
|
||||
$squares-ten-by-ten-spacing: 44px;
|
||||
$squares-twenty-by-twenty-spacing: 33px;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-1cd84c9068.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -54px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 74]
|
||||
end
|
||||
|
||||
it "should calculate the maximum spacing between images in reversed order" do
|
||||
css = render <<-SCSS
|
||||
$squares-ten-by-ten-spacing: 33px;
|
||||
$squares-twenty-by-twenty-spacing: 44px;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-f25b7090ca.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -54px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 74]
|
||||
end
|
||||
|
||||
it "should calculate the default spacing between images" do
|
||||
css = render <<-SCSS
|
||||
$squares-spacing: 22px;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-d66bf24bab.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 52]
|
||||
end
|
||||
|
||||
it "should use position adjustments in functions" do
|
||||
css = render <<-SCSS
|
||||
$squares: sprite-map("squares/*.png", $position: 100%);
|
||||
.squares-sprite {
|
||||
background: $squares no-repeat;
|
||||
}
|
||||
|
||||
.adjusted-percentage {
|
||||
background-position: sprite-position($squares, ten-by-ten, 100%);
|
||||
}
|
||||
|
||||
.adjusted-px-1 {
|
||||
background-position: sprite-position($squares, ten-by-ten, 4px);
|
||||
}
|
||||
|
||||
.adjusted-px-2 {
|
||||
background-position: sprite-position($squares, twenty-by-twenty, -3px, 2px);
|
||||
}
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite {
|
||||
background: url('/squares-8e490168dd.png') no-repeat;
|
||||
}
|
||||
|
||||
.adjusted-percentage {
|
||||
background-position: 100% 0;
|
||||
}
|
||||
|
||||
.adjusted-px-1 {
|
||||
background-position: -6px 0;
|
||||
}
|
||||
|
||||
.adjusted-px-2 {
|
||||
background-position: -3px -8px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 30]
|
||||
image_md5('squares-*.png').should == '652b67f5e9092520d6f26caae7e18012'
|
||||
end
|
||||
|
||||
it "should use position adjustments in mixins" do
|
||||
css = render <<-SCSS
|
||||
$squares-position: 100%;
|
||||
@import "squares/*.png";
|
||||
|
||||
.adjusted-percentage {
|
||||
@include squares-sprite("ten-by-ten", $offset-x: 100%);
|
||||
}
|
||||
|
||||
.adjusted-px-1 {
|
||||
@include squares-sprite("ten-by-ten", $offset-x: 4px);
|
||||
}
|
||||
|
||||
.adjusted-px-2 {
|
||||
@include squares-sprite("twenty-by-twenty", $offset-x: -3px, $offset-y: 2px);
|
||||
}
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .adjusted-percentage, .adjusted-px-1, .adjusted-px-2 {
|
||||
background: url('/squares-8e490168dd.png') no-repeat;
|
||||
}
|
||||
|
||||
.adjusted-percentage {
|
||||
background-position: 100% 0;
|
||||
}
|
||||
|
||||
.adjusted-px-1 {
|
||||
background-position: -6px 0;
|
||||
}
|
||||
|
||||
.adjusted-px-2 {
|
||||
background-position: -3px -8px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 30]
|
||||
image_md5('squares-*.png').should == '652b67f5e9092520d6f26caae7e18012'
|
||||
end
|
||||
|
||||
it "should repeat the image" do
|
||||
css = render <<-SCSS
|
||||
$squares-repeat: repeat;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-a5550fd132.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: 0 -10px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [20, 30]
|
||||
image_md5('squares-*.png').should == '94abae8440f1b58617f52920b70aaed2'
|
||||
end
|
||||
|
||||
it "should allow the position of a sprite to be specified in absolute pixels" do
|
||||
css = render <<-SCSS
|
||||
$squares-ten-by-ten-position: 10px;
|
||||
$squares-twenty-by-twenty-position: 10px;
|
||||
@import "squares/*.png";
|
||||
@include all-squares-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
||||
background: url('/squares-89a274044e.png') no-repeat;
|
||||
}
|
||||
|
||||
.squares-ten-by-ten {
|
||||
background-position: -10px 0;
|
||||
}
|
||||
|
||||
.squares-twenty-by-twenty {
|
||||
background-position: -10px -10px;
|
||||
}
|
||||
CSS
|
||||
image_size('squares-*.png').should == [30, 30]
|
||||
image_md5('squares-*.png').should == '2fb19ef9c83018c93c6f147af3a56cb2'
|
||||
end
|
||||
|
||||
it "should provide a nice errors for lemonade's old users" do
|
||||
proc do
|
||||
render <<-SCSS
|
||||
.squares {
|
||||
background: sprite-url("squares/*.png") no-repeat;
|
||||
}
|
||||
SCSS
|
||||
end.should raise_error Sass::SyntaxError,
|
||||
%q(The first argument to sprite-url() must be a sprite map. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
|
||||
proc do
|
||||
render <<-SCSS
|
||||
.squares {
|
||||
background: sprite-image("squares/twenty-by-twenty.png") no-repeat;
|
||||
}
|
||||
SCSS
|
||||
end.should raise_error Sass::SyntaxError,
|
||||
%q(The sprite-image() function has been replaced by sprite(). See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
|
||||
proc do
|
||||
render <<-SCSS
|
||||
@import "squares/*.png";
|
||||
|
||||
.squares {
|
||||
background: sprite-position("squares/twenty-by-twenty.png") no-repeat;
|
||||
}
|
||||
SCSS
|
||||
end.should raise_error Sass::SyntaxError,
|
||||
%q(The first argument to sprite-position() must be a sprite map. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
|
||||
end
|
||||
|
||||
it "should work even if @import is missing" do
|
||||
actual_css = render <<-SCSS
|
||||
.squares {
|
||||
background: sprite(sprite-map("squares/*.png"), twenty-by-twenty) no-repeat;
|
||||
}
|
||||
SCSS
|
||||
actual_css.should == <<-CSS
|
||||
.squares {
|
||||
background: url('/squares-145869726f.png') 0 -10px no-repeat;
|
||||
}
|
||||
CSS
|
||||
end
|
||||
|
||||
it "should calculate corret sprite demsions when givin spacing via issue#253" do
|
||||
css = render <<-SCSS
|
||||
$squares-spacing: 10px;
|
||||
@import "squares/*.png";
|
||||
.foo {
|
||||
@include sprite-background-position($squares-sprites, "twenty-by-twenty");
|
||||
}
|
||||
.bar {
|
||||
@include sprite-background-position($squares-sprites, "ten-by-ten");
|
||||
}
|
||||
SCSS
|
||||
image_size('squares-*.png').should == [20, 40]
|
||||
css.should == <<-CSS
|
||||
.squares-sprite {
|
||||
background: url('/squares-e3c68372d9.png') no-repeat;
|
||||
}
|
||||
|
||||
.foo {
|
||||
background-position: 0 -20px;
|
||||
}
|
||||
|
||||
.bar {
|
||||
background-position: 0 0;
|
||||
}
|
||||
CSS
|
||||
end
|
||||
|
||||
it "should render corret sprite with css selectors via issue#248" do
|
||||
css = render <<-SCSS
|
||||
@import "selectors/*.png";
|
||||
@include all-selectors-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.selectors-sprite, .selectors-ten-by-ten {
|
||||
background: url('/selectors-edfef809e2.png') no-repeat;
|
||||
}
|
||||
|
||||
.selectors-ten-by-ten {
|
||||
background-position: 0 0;
|
||||
}
|
||||
.selectors-ten-by-ten:hover, .selectors-ten-by-ten.ten-by-ten_hover, .selectors-ten-by-ten.ten-by-ten-hover {
|
||||
background-position: 0 -20px;
|
||||
}
|
||||
.selectors-ten-by-ten:target, .selectors-ten-by-ten.ten-by-ten_target, .selectors-ten-by-ten.ten-by-ten-target {
|
||||
background-position: 0 -30px;
|
||||
}
|
||||
.selectors-ten-by-ten:active, .selectors-ten-by-ten.ten-by-ten_active, .selectors-ten-by-ten.ten-by-ten-active {
|
||||
background-position: 0 -10px;
|
||||
}
|
||||
CSS
|
||||
end
|
||||
|
||||
it "should render corret sprite with css selectors via magic mixin" do
|
||||
css = render <<-SCSS
|
||||
@import "selectors/*.png";
|
||||
a {
|
||||
@include selectors-sprite(ten-by-ten)
|
||||
}
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.selectors-sprite, a {
|
||||
background: url('/selectors-edfef809e2.png') no-repeat;
|
||||
}
|
||||
|
||||
a {
|
||||
background-position: 0 0;
|
||||
}
|
||||
a:hover, a.ten-by-ten_hover, a.ten-by-ten-hover {
|
||||
background-position: 0 -20px;
|
||||
}
|
||||
a:target, a.ten-by-ten_target, a.ten-by-ten-target {
|
||||
background-position: 0 -30px;
|
||||
}
|
||||
a:active, a.ten-by-ten_active, a.ten-by-ten-active {
|
||||
background-position: 0 -10px;
|
||||
}
|
||||
CSS
|
||||
end
|
||||
|
||||
it "should not render corret sprite with css selectors via magic mixin" do
|
||||
css = render <<-SCSS
|
||||
@import "selectors/*.png";
|
||||
a {
|
||||
$disable-magic-sprite-selectors:true;
|
||||
@include selectors-sprite(ten-by-ten)
|
||||
}
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.selectors-sprite, a {
|
||||
background: url('/selectors-edfef809e2.png') no-repeat;
|
||||
}
|
||||
|
||||
a {
|
||||
background-position: 0 0;
|
||||
}
|
||||
CSS
|
||||
end
|
||||
|
||||
it "should raise error on filenames that are not valid sass syntax" do
|
||||
lambda do
|
||||
render <<-SCSS
|
||||
@import "prefix/*.png";
|
||||
a {
|
||||
@include squares-sprite(20-by-20);
|
||||
}
|
||||
SCSS
|
||||
end.should raise_error Compass::Error
|
||||
end
|
||||
|
||||
it "should generate sprite with bad repeat-x dimensions" do
|
||||
css = render <<-SCSS
|
||||
$ko-starbg26x27-repeat: repeat-x;
|
||||
@import "ko/*.png";
|
||||
@include all-ko-sprites;
|
||||
SCSS
|
||||
css.should == <<-CSS
|
||||
.ko-sprite, .ko-default_background, .ko-starbg26x27 {
|
||||
background: url('/ko-cc3f80660d.png') no-repeat;
|
||||
}
|
||||
|
||||
.ko-default_background {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.ko-starbg26x27 {
|
||||
background-position: 0 -128px;
|
||||
}
|
||||
CSS
|
||||
end
|
||||
|
||||
end
|
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
@ -42,8 +42,7 @@ q, blockquote {
|
||||
a img {
|
||||
border: none; }
|
||||
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
||||
display: block; }
|
||||
|
||||
body {
|
||||
@ -672,10 +671,10 @@ input.span-24, textarea.span-24, select.span-24 {
|
||||
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -o-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -ms-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
-moz-background-size: 100% 20px, auto;
|
||||
-webkit-background-size: 100% 20px, auto;
|
||||
-o-background-size: 100% 20px, auto;
|
||||
background-size: 100% 20px, auto;
|
||||
-moz-background-size: 100% 18px, auto;
|
||||
-webkit-background-size: 100% 18px, auto;
|
||||
-o-background-size: 100% 18px, auto;
|
||||
background-size: 100% 18px, auto;
|
||||
background-position: left top; }
|
||||
|
||||
.feedback, .error, .alert, .notice, .success, .info {
|
||||
@ -759,7 +758,7 @@ textarea {
|
||||
border: 1px solid #bbbbbb; }
|
||||
input.text:focus, input.title:focus, input[type=email]:focus, input[type=text]:focus, input[type=password]:focus,
|
||||
textarea:focus {
|
||||
border: 1px solid #666666; }
|
||||
border-color: #666666; }
|
||||
|
||||
select {
|
||||
background-color: #fff;
|
||||
|
@ -5,8 +5,8 @@
|
||||
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -o-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -ms-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
-moz-background-size: 100% 20px, auto;
|
||||
-webkit-background-size: 100% 20px, auto;
|
||||
-o-background-size: 100% 20px, auto;
|
||||
background-size: 100% 20px, auto;
|
||||
-moz-background-size: 100% 18px, auto;
|
||||
-webkit-background-size: 100% 18px, auto;
|
||||
-o-background-size: 100% 18px, auto;
|
||||
background-size: 100% 18px, auto;
|
||||
background-position: left top; }
|
||||
|
@ -30,7 +30,7 @@ form.bp textarea {
|
||||
border: 1px solid #bbbbbb; }
|
||||
form.bp input.text:focus, form.bp input.title:focus, form.bp input[type=email]:focus, form.bp input[type=text]:focus, form.bp input[type=password]:focus,
|
||||
form.bp textarea:focus {
|
||||
border: 1px solid #666666; }
|
||||
border-color: #666666; }
|
||||
form.bp select {
|
||||
background-color: #fff;
|
||||
border-width: 1px;
|
||||
|
@ -3,7 +3,7 @@ html {
|
||||
padding: 0;
|
||||
border: 0; }
|
||||
|
||||
.bp-reset-element, body, h1, h2, h3, h4, h5, h6, article, aside, dialog, figure, footer, header, hgroup, nav, section, blockquote, q, th, td, caption, table, body.testing h1, body.testing h2, body.testing h3, body.testing h4, body.testing h5, body.testing h6, body.testing article, body.testing aside, body.testing dialog, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing nav, body.testing section, body.testing blockquote, body.testing q, body.testing th, body.testing td, body.testing caption, body.testing table, div, span, object, iframe, p, pre, a, abbr, acronym, address, code, del, dfn, em, img, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption, tbody, tfoot, thead, tr {
|
||||
.bp-reset-element, body, h1, h2, h3, h4, h5, h6, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, blockquote, q, th, td, caption, table, body.testing h1, body.testing h2, body.testing h3, body.testing h4, body.testing h5, body.testing h6, body.testing article, body.testing aside, body.testing details, body.testing figcaption, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing menu, body.testing nav, body.testing section, body.testing summary, body.testing blockquote, body.testing q, body.testing th, body.testing td, body.testing caption, body.testing table, div, span, object, iframe, p, pre, a, abbr, acronym, address, code, del, dfn, em, img, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption, tbody, tfoot, thead, tr {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
@ -13,7 +13,7 @@ html {
|
||||
font-family: inherit;
|
||||
vertical-align: baseline; }
|
||||
|
||||
article, aside, dialog, figure, footer, header, hgroup, nav, section {
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
||||
display: block; }
|
||||
|
||||
blockquote, q {
|
||||
@ -35,7 +35,7 @@ table {
|
||||
a img {
|
||||
border: none; }
|
||||
|
||||
body.testing .bp-reset-element, body.testing body, body.testing h1, body.testing h2, body.testing h3, body.testing h4, body.testing h5, body.testing h6, body.testing article, body.testing aside, body.testing dialog, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing nav, body.testing section, body.testing blockquote, body.testing q, body.testing th, body.testing td, body.testing caption, body.testing table, body.testing h1, body.testing h2, body.testing h3, body.testing h4, body.testing h5, body.testing h6, body.testing article, body.testing aside, body.testing dialog, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing nav, body.testing section, body.testing blockquote, body.testing q, body.testing th, body.testing td, body.testing caption, body.testing table,
|
||||
body.testing .bp-reset-element, body.testing body, body.testing h1, body.testing h2, body.testing h3, body.testing h4, body.testing h5, body.testing h6, body.testing article, body.testing aside, body.testing details, body.testing figcaption, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing menu, body.testing nav, body.testing section, body.testing summary, body.testing blockquote, body.testing q, body.testing th, body.testing td, body.testing caption, body.testing table, body.testing h1, body.testing h2, body.testing h3, body.testing h4, body.testing h5, body.testing h6, body.testing article, body.testing aside, body.testing details, body.testing figcaption, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing menu, body.testing nav, body.testing section, body.testing summary, body.testing blockquote, body.testing q, body.testing th, body.testing td, body.testing caption, body.testing table,
|
||||
body.testing div, body.testing span, body.testing object, body.testing iframe, body.testing p,
|
||||
body.testing pre, body.testing a, body.testing abbr, body.testing acronym, body.testing address,
|
||||
body.testing code, body.testing del, body.testing dfn, body.testing em, body.testing img,
|
||||
@ -50,7 +50,7 @@ body.testing caption, body.testing tbody, body.testing tfoot, body.testing thead
|
||||
font-size: 100%;
|
||||
font-family: inherit;
|
||||
vertical-align: baseline; }
|
||||
body.testing article, body.testing aside, body.testing dialog, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing nav, body.testing section {
|
||||
body.testing article, body.testing aside, body.testing details, body.testing figcaption, body.testing figure, body.testing footer, body.testing header, body.testing hgroup, body.testing menu, body.testing nav, body.testing section, body.testing summary {
|
||||
display: block; }
|
||||
body.testing blockquote, body.testing q {
|
||||
quotes: "" ""; }
|
||||
|
@ -3,7 +3,7 @@ html {
|
||||
padding: 0;
|
||||
border: 0; }
|
||||
|
||||
.bp-reset-element, body, h1, h2, h3, h4, h5, h6, article, aside, dialog, figure, footer, header, hgroup, nav, section, blockquote, q, th, td, caption, table,
|
||||
.bp-reset-element, body, h1, h2, h3, h4, h5, h6, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, blockquote, q, th, td, caption, table,
|
||||
div, span, object, iframe, p,
|
||||
pre, a, abbr, acronym, address,
|
||||
code, del, dfn, em, img,
|
||||
@ -19,7 +19,7 @@ caption, tbody, tfoot, thead, tr {
|
||||
font-family: inherit;
|
||||
vertical-align: baseline; }
|
||||
|
||||
article, aside, dialog, figure, footer, header, hgroup, nav, section {
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
||||
display: block; }
|
||||
|
||||
blockquote, q {
|
||||
|
29
test/fixtures/stylesheets/busted_image_urls/config.rb
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
# Require any additional compass plugins here.
|
||||
project_type = :stand_alone
|
||||
css_dir = "tmp"
|
||||
sass_dir = "sass"
|
||||
images_dir = "images"
|
||||
output_style = :compact
|
||||
# To enable relative image paths using the images_url() function:
|
||||
# http_images_path = :relative
|
||||
http_images_path = "/images"
|
||||
line_comments = false
|
||||
|
||||
asset_cache_buster do |path, file|
|
||||
pathname = Pathname.new(path)
|
||||
|
||||
case pathname.basename(pathname.extname).to_s
|
||||
when "grid"
|
||||
new_path = "%s/%s-BUSTED%s" % [pathname.dirname, pathname.basename(pathname.extname), pathname.extname]
|
||||
{:path => new_path, :query => nil}
|
||||
when "feed"
|
||||
"query_string"
|
||||
when "dk"
|
||||
{:query => "query_string"}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
asset_host do |path|
|
||||
"http://assets%d.example.com" % (path.size % 4)
|
||||
end
|
9
test/fixtures/stylesheets/busted_image_urls/css/screen.css
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
.showgrid { background-image: url('http://assets0.example.com/images/grid-BUSTED.png'); }
|
||||
|
||||
.inlinegrid { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUEAYAAACv1qP4AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAZ0lEQVRYw+3QwQ2AIBAFUTEUwI3+uzN7gDscsIgxEuO8An52J11X73OudfxMraXkzHfO3Y98nQEhA0IGhAwIGRAyIGRAyICQASEDQgaEDAgZEDIgZEDIgJABoZzSGK3tPuN9ERFP7Nw4fg+c5g8V1wAAAABJRU5ErkJggg=='); }
|
||||
|
||||
.no-buster { background-image: url('http://assets0.example.com/images/grid.png'); }
|
||||
|
||||
.feed { background-image: url('http://assets0.example.com/images/feed.png?query_string'); }
|
||||
|
||||
.dk { background-image: url('http://assets0.example.com/images/flags/dk.png?query_string'); }
|
BIN
test/fixtures/stylesheets/busted_image_urls/images/feed.png
vendored
Normal file
After Width: | Height: | Size: 691 B |
BIN
test/fixtures/stylesheets/busted_image_urls/images/flags/dk.png
vendored
Normal file
After Width: | Height: | Size: 808 B |
BIN
test/fixtures/stylesheets/busted_image_urls/images/grid.png
vendored
Normal file
After Width: | Height: | Size: 199 B |
14
test/fixtures/stylesheets/busted_image_urls/sass/screen.sass
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
.showgrid
|
||||
background-image: image-url("grid.png")
|
||||
|
||||
.inlinegrid
|
||||
background-image: inline-image("grid.png")
|
||||
|
||||
.no-buster
|
||||
background-image: image-url("grid.png", $only-path: false, $cache-buster: false)
|
||||
|
||||
.feed
|
||||
background-image: image-url("feed.png")
|
||||
|
||||
.dk
|
||||
background-image: image-url("flags/dk.png")
|
19
test/fixtures/stylesheets/compass/css/box.css
vendored
@ -1,84 +1,103 @@
|
||||
.hbox {
|
||||
display: -moz-box;
|
||||
display: -webkit-box;
|
||||
display: -ms-box;
|
||||
display: box;
|
||||
-moz-box-orient: horizontal;
|
||||
-webkit-box-orient: horizontal;
|
||||
-ms-box-orient: horizontal;
|
||||
box-orient: horizontal;
|
||||
-moz-box-align: stretch;
|
||||
-webkit-box-align: stretch;
|
||||
-ms-box-align: stretch;
|
||||
box-align: stretch; }
|
||||
.hbox > * {
|
||||
-moz-box-flex: 0;
|
||||
-webkit-box-flex: 0;
|
||||
-ms-box-flex: 0;
|
||||
box-flex: 0; }
|
||||
|
||||
.vbox {
|
||||
display: -moz-box;
|
||||
display: -webkit-box;
|
||||
display: -ms-box;
|
||||
display: box;
|
||||
-moz-box-orient: vertical;
|
||||
-webkit-box-orient: vertical;
|
||||
-ms-box-orient: vertical;
|
||||
box-orient: vertical;
|
||||
-moz-box-align: stretch;
|
||||
-webkit-box-align: stretch;
|
||||
-ms-box-align: stretch;
|
||||
box-align: stretch; }
|
||||
.vbox > * {
|
||||
-moz-box-flex: 0;
|
||||
-webkit-box-flex: 0;
|
||||
-ms-box-flex: 0;
|
||||
box-flex: 0; }
|
||||
|
||||
.spacer {
|
||||
-moz-box-flex: 1;
|
||||
-webkit-box-flex: 1;
|
||||
-ms-box-flex: 1;
|
||||
box-flex: 1; }
|
||||
|
||||
.reverse {
|
||||
-moz-box-direction: reverse;
|
||||
-webkit-box-direction: reverse;
|
||||
-ms-box-direction: reverse;
|
||||
box-direction: reverse; }
|
||||
|
||||
.box-flex-0 {
|
||||
-moz-box-flex: 0;
|
||||
-webkit-box-flex: 0;
|
||||
-ms-box-flex: 0;
|
||||
box-flex: 0; }
|
||||
|
||||
.box-flex-1 {
|
||||
-moz-box-flex: 1;
|
||||
-webkit-box-flex: 1;
|
||||
-ms-box-flex: 1;
|
||||
box-flex: 1; }
|
||||
|
||||
.box-flex-2 {
|
||||
-moz-box-flex: 2;
|
||||
-webkit-box-flex: 2;
|
||||
-ms-box-flex: 2;
|
||||
box-flex: 2; }
|
||||
|
||||
.box-flex-group-0 {
|
||||
-moz-box-flex-group: 0;
|
||||
-webkit-box-flex-group: 0;
|
||||
-ms-box-flex-group: 0;
|
||||
box-flex-group: 0; }
|
||||
|
||||
.box-flex-group-1 {
|
||||
-moz-box-flex-group: 1;
|
||||
-webkit-box-flex-group: 1;
|
||||
-ms-box-flex-group: 1;
|
||||
box-flex-group: 1; }
|
||||
|
||||
.box-flex-group-2 {
|
||||
-moz-box-flex-group: 2;
|
||||
-webkit-box-flex-group: 2;
|
||||
-ms-box-flex-group: 2;
|
||||
box-flex-group: 2; }
|
||||
|
||||
.start {
|
||||
-moz-box-pack: start;
|
||||
-webkit-box-pack: start;
|
||||
-ms-box-pack: start;
|
||||
box-pack: start; }
|
||||
|
||||
.end {
|
||||
-moz-box-pack: end;
|
||||
-webkit-box-pack: end;
|
||||
-ms-box-pack: end;
|
||||
box-pack: end; }
|
||||
|
||||
.center {
|
||||
-moz-box-pack: center;
|
||||
-webkit-box-pack: center;
|
||||
-ms-box-pack: center;
|
||||
box-pack: center; }
|
||||
|
9
test/fixtures/stylesheets/compass/css/force-wrap.css
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
pre {
|
||||
white-space: pre;
|
||||
white-space: pre-wrap;
|
||||
white-space: pre-line;
|
||||
white-space: -pre-wrap;
|
||||
white-space: -o-pre-wrap;
|
||||
white-space: -moz-pre-wrap;
|
||||
white-space: -hp-pre-wrap;
|
||||
word-wrap: break-word; }
|
@ -565,15 +565,12 @@
|
||||
|
||||
.ie-horizontal-filter {
|
||||
*zoom: 1;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#FFFFFFFF', endColorstr='#FF000000')";
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#FFFFFFFF', endColorstr='#FF000000'); }
|
||||
|
||||
.ie-vertical-filter {
|
||||
*zoom: 1;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#FF000000')";
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#FF000000'); }
|
||||
|
||||
.ie-alpha-filter {
|
||||
*zoom: 1;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#00FFFFFF')";
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#00FFFFFF'); }
|
||||
|