Compare commits
12 Commits
stable
...
better_spr
Author | SHA1 | Date | |
---|---|---|---|
|
cfd7dd3cf3 | ||
|
d1ec112b99 | ||
|
ba2b608f73 | ||
|
387bf3665a | ||
|
7794b7202f | ||
|
fc034092aa | ||
|
bf0662cf87 | ||
|
aa4999370f | ||
|
9eeff5a9fe | ||
|
370044ba77 | ||
|
cc26b98909 | ||
|
d9ca08f685 |
1
.gitignore
vendored
@ -28,4 +28,3 @@ devbin
|
||||
*.rbc
|
||||
vendor/ruby
|
||||
vendor
|
||||
Gemfile.lock
|
||||
|
@ -4,4 +4,4 @@ rvm:
|
||||
- jruby
|
||||
- rbx
|
||||
- ree
|
||||
script: "bundle exec rake test features"
|
||||
script: "bundle exec rake test"
|
||||
|
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.1"
|
||||
gem "compass-validator", "3.0.0"
|
||||
gem "css_parser", "~> 1.0.1"
|
||||
gem "sass", "~>3.1"
|
||||
gem "haml", "~> 3.1"
|
||||
@ -21,8 +21,6 @@ gem 'mocha'
|
||||
gem 'timecop'
|
||||
gem 'diff-lcs', '~> 1.1.2'
|
||||
|
||||
gem 'rake', '0.8.7'
|
||||
|
||||
group :mac do
|
||||
gem "rb-fsevent"
|
||||
end
|
||||
|
156
Gemfile.lock
Normal file
@ -0,0 +1,156 @@
|
||||
GIT
|
||||
remote: git://github.com/johnbintz/fakefs.git
|
||||
revision: 7363b6f13bfcd9f583bbf7cd1e0d65c2dc656db7
|
||||
specs:
|
||||
fakefs (0.3.1)
|
||||
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
compass (0.11.1.387bf36)
|
||||
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.9.rc3)
|
||||
actionpack (= 3.0.9.rc3)
|
||||
mail (~> 2.2.19)
|
||||
actionpack (3.0.9.rc3)
|
||||
activemodel (= 3.0.9.rc3)
|
||||
activesupport (= 3.0.9.rc3)
|
||||
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.9.rc3)
|
||||
activesupport (= 3.0.9.rc3)
|
||||
builder (~> 2.1.2)
|
||||
i18n (~> 0.5.0)
|
||||
activerecord (3.0.9.rc3)
|
||||
activemodel (= 3.0.9.rc3)
|
||||
activesupport (= 3.0.9.rc3)
|
||||
arel (~> 2.0.10)
|
||||
tzinfo (~> 0.3.23)
|
||||
activeresource (3.0.9.rc3)
|
||||
activemodel (= 3.0.9.rc3)
|
||||
activesupport (= 3.0.9.rc3)
|
||||
activesupport (3.0.9.rc3)
|
||||
addressable (2.2.6)
|
||||
arel (2.0.10)
|
||||
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.3.0)
|
||||
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.2)
|
||||
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.19)
|
||||
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.3)
|
||||
rack-mount (0.6.14)
|
||||
rack (>= 1.0.0)
|
||||
rack-test (0.5.7)
|
||||
rack (>= 1.0)
|
||||
rails (3.0.9.rc3)
|
||||
actionmailer (= 3.0.9.rc3)
|
||||
actionpack (= 3.0.9.rc3)
|
||||
activerecord (= 3.0.9.rc3)
|
||||
activeresource (= 3.0.9.rc3)
|
||||
activesupport (= 3.0.9.rc3)
|
||||
bundler (~> 1.0)
|
||||
railties (= 3.0.9.rc3)
|
||||
railties (3.0.9.rc3)
|
||||
actionpack (= 3.0.9.rc3)
|
||||
activesupport (= 3.0.9.rc3)
|
||||
rake (>= 0.8.7)
|
||||
rdoc (~> 3.4)
|
||||
thor (~> 0.14.4)
|
||||
rake (0.9.2)
|
||||
rb-fsevent (0.4.0)
|
||||
rcov (0.9.9)
|
||||
rdoc (3.6.1)
|
||||
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.7)
|
||||
rubyzip (0.9.4)
|
||||
sass (3.1.2)
|
||||
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.27)
|
||||
|
||||
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
|
||||
:patch: 5
|
||||
:build: 1
|
||||
: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.2'
|
||||
gemspec.add_dependency 'chunky_png', '~> 1.1'
|
||||
gemspec.add_dependency 'fssm', '>= 0.2.7'
|
||||
|
||||
gemspec.files = %w(README.markdown LICENSE.markdown VERSION.yml Rakefile)
|
||||
|
Before Width: | Height: | Size: 50 KiB |
@ -14,65 +14,16 @@ 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.6 (UNRELEASED)
|
||||
0.11.3 (PENDING)
|
||||
-------------------
|
||||
|
||||
* 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.
|
||||
* Sprites will now by default remove any old versions of the sprite a new 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 scratch:
|
||||
When starting a project from scrath:
|
||||
|
||||
compass create /path/to/project --using blueprint
|
||||
|
||||
|
@ -280,13 +280,6 @@ 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>
|
||||
@ -314,14 +307,10 @@ 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, 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.
|
||||
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.
|
||||
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.
|
||||
|
||||
@ -335,18 +324,6 @@ 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,9 +14,11 @@ The sprite engine is the work horse of sprite generation it's the interface for
|
||||
|
||||
### Requirements
|
||||
|
||||
A sprite engine requires two methods `construct_sprite`, and `save(filename)`
|
||||
A sprite engine requires only one method and that is `construct_sprite` which must return an object that responds to `save(filepath)`
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
### Configuration
|
||||
|
||||
@ -24,7 +26,7 @@ To enable your sprite engine from the config file set
|
||||
|
||||
sprite_engine = :<engine name>
|
||||
|
||||
The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine.new(width, height, images)`
|
||||
The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine`
|
||||
|
||||
sprite_engine = :chunky_png
|
||||
|
||||
@ -33,16 +35,13 @@ The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine.ne
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine
|
||||
module <engine name>Engine
|
||||
|
||||
# Returns an object
|
||||
def construct_sprite
|
||||
#do something
|
||||
end
|
||||
|
||||
def save(filename)
|
||||
#save file
|
||||
#must return a image object that responds to save(filename)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Application Integration
|
||||
layout: tutorial
|
||||
crumb: Application Integration
|
||||
crumb: Appliction 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:
|
||||
|
||||
* `images/icon/new.png`
|
||||
* `images/icon/edit.png`
|
||||
* `images/icon/save.png`
|
||||
* `images/icon/delete.png`
|
||||
* `public/images/icon/new.png`
|
||||
* `public/images/icon/edit.png`
|
||||
* `public/images/icon/save.png`
|
||||
* `public/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-s34fe0604ab.png') no-repeat; }
|
||||
.icon-save { background: url('/images/icon-34fe0604ab.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-s34fe0604ab.png') no-repeat; }
|
||||
.actions .delete { background: url('/images/icon-34fe0604ab.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 "images/icon/*.png"
|
||||
compass sprite "public/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-sedfef809e2.png') no-repeat;
|
||||
background: url('/selectors-edfef809e2.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-sedfef809e2.png') no-repeat;
|
||||
background: url('/selectors-edfef809e2.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 # you might need to type sudo first if you're on mac or linux.
|
||||
4. $ gem install compass --pre # 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,27 +69,3 @@ 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: url(foo.png),
|
||||
background: image-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/docs/yardoc/Sass/Script/Functions.html).
|
||||
by Sass](http://sass-lang.com/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 below the display value.
|
||||
the elements listed to the right.
|
||||
%dl
|
||||
%dg.head
|
||||
%dt Display Value
|
||||
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
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,21 +79,4 @@ 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,8 +29,7 @@
|
||||
ul { list-style: none; margin-bottom: 1em;}
|
||||
h2 { line-height: 1.3em; margin-top: 0; padding-top: 3px;}
|
||||
}
|
||||
em { font-style: italic; }
|
||||
strong { font-weight: bold; }
|
||||
em { font-style: italic; }
|
||||
|
||||
#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[:patch]}"
|
||||
"#{v[:major]}.#{v[:minor]}#{"."+v[:state] if v[:state]}.#{v[:build]}"
|
||||
end
|
||||
|
||||
def long_compass_version
|
||||
|
@ -63,15 +63,6 @@ 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.
|
||||
@ -154,7 +145,6 @@ Feature: Command Line
|
||||
Scenario: Basic help
|
||||
When I run: compass help
|
||||
Then I should see the following "primary" commands:
|
||||
| clean |
|
||||
| compile |
|
||||
| create |
|
||||
| init |
|
||||
@ -189,33 +179,12 @@ 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 3 seconds
|
||||
And I wait 1 second
|
||||
And I touch sass/layout.sass
|
||||
And I wait 2 seconds
|
||||
And I shutdown the other process
|
||||
@ -249,6 +218,7 @@ 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,13 +53,6 @@ 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
|
||||
@ -83,7 +76,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
|
||||
@ -123,30 +116,10 @@ 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 "grid", "typography";
|
||||
@import "blueprint/grid";
|
||||
|
||||
// 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 : $blueprint-font-size * 1.5
|
||||
$baseline : 20px
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@
|
||||
background-color:#fff;
|
||||
border: 1px solid $unfocused-border-color;
|
||||
&:focus {
|
||||
border-color: $focus-border-color;
|
||||
border: 1px solid $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-block)} { @include blueprint-reset-html5-element(bp-reset-element); }
|
||||
#{elements-of-type(html5)} { @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,10 +24,7 @@ $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.
|
||||
// Each shadow argument should adhere to the standard css3 syntax for the
|
||||
// box-shadow property.
|
||||
// Provides cross-browser for Webkit, Gecko, and CSS3 box shadows when one or more box shadows are needed.
|
||||
@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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -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, -ms, not -khtml, official
|
||||
-moz, -webkit, not -o, not -ms, not -khtml, official
|
||||
);
|
||||
}
|
@ -15,7 +15,7 @@
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// @include font-face("this name", font-files("this.woff", woff, "this.otf", opentype), "this.eot")
|
||||
// +font-face("this name", font-files("this.woff", "woff", "this.otf", "opentype"), "this.eot")
|
||||
@mixin font-face(
|
||||
$name,
|
||||
$font-files,
|
||||
|
@ -83,7 +83,10 @@
|
||||
@mixin filter-gradient($start-color, $end-color, $orientation: vertical) {
|
||||
@include has-layout;
|
||||
$gradient-type: if($orientation == vertical, 0, 1);
|
||||
@if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {
|
||||
@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 {
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type}, startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}');
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,10 @@
|
||||
// A number between 0 and 1, where 0 is transparent and 1 is opaque.
|
||||
|
||||
@mixin opacity($opacity) {
|
||||
@if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {
|
||||
@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 {
|
||||
filter: unquote("progid:DXImageTransform.Microsoft.Alpha(Opacity=#{round($opacity * 100)})");
|
||||
}
|
||||
opacity: $opacity;
|
||||
|
@ -9,8 +9,6 @@ $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 single-transition(
|
||||
@mixin transition(
|
||||
$properties: $default-transition-property,
|
||||
$duration: $default-transition-duration,
|
||||
$function: $default-transition-function,
|
||||
@ -83,37 +83,3 @@ $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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
@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 {
|
||||
#{elements-of-type(html5-block)} {
|
||||
article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
||||
@include reset-box-model;
|
||||
display: block; } }
|
||||
|
||||
|
@ -107,11 +107,12 @@
|
||||
border: none; }
|
||||
|
||||
// Unrecognized elements are displayed inline.
|
||||
// This reset provides a basic reset for block html5 elements
|
||||
// This reset provides a basic reset for 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 {
|
||||
#{elements-of-type(html5-block)} {
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block; } }
|
||||
|
||||
// Resets the display of inline and block elements to their default display
|
||||
|
@ -1,4 +1,3 @@
|
||||
@import "text/ellipsis";
|
||||
@import "text/nowrap";
|
||||
@import "text/replacement";
|
||||
@import "text/force-wrap";
|
||||
|
@ -10,47 +10,22 @@ $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 * $font-unit;
|
||||
$base-rhythm-unit: $base-line-height / $base-font-size * 1em;
|
||||
|
||||
// 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) * $font-unit / $base-font-size;
|
||||
$base-leader: ($base-line-height - $base-font-size) * 1em / $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, if($relative-font-sizing, $font-size, $base-font-size));
|
||||
@include adjust-leading-to(1, $font-size);
|
||||
}
|
||||
html>body {
|
||||
font-size: $font-size;
|
||||
@ -67,19 +42,13 @@ $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: 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-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-leading-to($lines, $font-size: $base-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;
|
||||
line-height: 1em * $lines * $base-line-height / $font-size;
|
||||
}
|
||||
|
||||
// Calculate rhythm units
|
||||
@ -87,55 +56,32 @@ $base-half-leader: $base-leader / 2;
|
||||
$lines: 1,
|
||||
$font-size: $base-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;
|
||||
$rhythm: 1em * $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) {
|
||||
$leader: rhythm($lines, $font-size);
|
||||
@if unit($leader) == px {
|
||||
$leader: floor($leader)
|
||||
}
|
||||
#{$property}-top: $leader;
|
||||
#{$property}-top: rhythm($lines, $font-size);
|
||||
}
|
||||
|
||||
// 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) {
|
||||
$leader: rhythm($lines, $font-size);
|
||||
@if unit($leader) == px {
|
||||
$leader: ceil($leader)
|
||||
}
|
||||
#{$property}-bottom: $leader;
|
||||
#{$property}-bottom: rhythm($lines, $font-size);
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
@ -149,28 +95,21 @@ $base-half-leader: $base-leader / 2;
|
||||
@include trailer($trailer, $font-size);
|
||||
}
|
||||
|
||||
// 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.
|
||||
// Apply a border width to any side without destroying the vertical rhythm
|
||||
@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: $font-unit * $width / $font-size;
|
||||
width: 1em * $width / $font-size;
|
||||
};
|
||||
padding-#{$side}: $font-unit / $font-size * ($lines * $base-line-height - $width);
|
||||
padding-#{$side}: 1em / $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: $font-unit * $width / $font-size; };
|
||||
padding: $font-unit / $font-size * ($lines * $base-line-height - $width);
|
||||
width: 1em * $width / $font-size; };
|
||||
padding: 1em / $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 : 0;
|
||||
margin-left : 0px;
|
||||
}
|
||||
|
||||
// turns off the bullets for an entire list
|
||||
|
@ -1,12 +0,0 @@
|
||||
// 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 legacy-pie-clearfix {
|
||||
@mixin pie-clearfix {
|
||||
&:after {
|
||||
content : "\0020";
|
||||
display : block;
|
||||
@ -29,16 +29,3 @@
|
||||
}
|
||||
@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,96 +1,77 @@
|
||||
<!--
|
||||
PIE: CSS3 rendering for IE
|
||||
Version 1.0beta5
|
||||
Version 1.0beta3
|
||||
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 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();
|
||||
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();
|
||||
</script>
|
||||
</PUBLIC:COMPONENT>
|
||||
|
@ -1,7 +1,7 @@
|
||||
module Compass
|
||||
end
|
||||
|
||||
%w(dependencies util browser_support sass_extensions version errors quick_cache logger).each do |lib|
|
||||
%w(dependencies util browser_support sass_extensions version errors quick_cache).each do |lib|
|
||||
require "compass/#{lib}"
|
||||
end
|
||||
|
||||
|
@ -65,10 +65,7 @@ module Compass
|
||||
end
|
||||
|
||||
def remove(file_name)
|
||||
if File.directory?(file_name)
|
||||
FileUtils.rm_rf file_name
|
||||
log_action :remove, basename(file_name)+"/", options
|
||||
elsif File.exists?(file_name)
|
||||
if 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 clean_project imports installer_command
|
||||
update_project watch_project create_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.to_s
|
||||
self.working_path = working_path
|
||||
self.options = options
|
||||
end
|
||||
|
||||
@ -22,14 +22,6 @@ module Compass
|
||||
raise StandardError.new("Not Implemented")
|
||||
end
|
||||
|
||||
def successful?
|
||||
!@failed
|
||||
end
|
||||
|
||||
def failed!
|
||||
@failed = true
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def framework
|
||||
|
@ -1,79 +0,0 @@
|
||||
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)
|
||||
# Pretty basic implementation
|
||||
path.index(File::SEPARATOR) == 0 || path.index(':') == 1
|
||||
# This is only going to work on unix, gonna need a better implementation.
|
||||
path.index(File::SEPARATOR) == 0
|
||||
end
|
||||
|
||||
def skip_extension_discovery?
|
||||
|
@ -16,10 +16,8 @@ module Compass::Commands
|
||||
matching.first
|
||||
elsif name =~ /^-/
|
||||
nil
|
||||
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}"
|
||||
raise Compass::Error, "Ambiguous abbreviation '#{name}'. Did you mean one of: #{matching.join(", ")}"
|
||||
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(:uri => relative_uri, :options => Compass.sass_engine_options)
|
||||
sprites = Compass::SpriteImporter.new(relative_uri, 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,8 +34,7 @@ module Compass
|
||||
compiler = new_compiler_instance
|
||||
check_for_sass_files!(compiler)
|
||||
compiler.clean! if compiler.new_config?
|
||||
error_count = compiler.run
|
||||
failed! if error_count > 0
|
||||
compiler.run
|
||||
end
|
||||
|
||||
def check_for_sass_files!(compiler)
|
||||
@ -52,10 +51,12 @@ module Compass
|
||||
|
||||
def new_compiler_instance(additional_options = {})
|
||||
@compiler_opts ||= begin
|
||||
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 = 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
|
||||
end
|
||||
|
||||
|
@ -3,19 +3,16 @@ module Compass
|
||||
|
||||
include Actions
|
||||
|
||||
attr_accessor :working_path, :from, :to, :options, :sass_options, :staleness_checker, :importer
|
||||
attr_accessor :working_path, :from, :to, :options, :staleness_checker, :importer
|
||||
|
||||
def initialize(working_path, from, to, options)
|
||||
self.working_path = working_path.to_s
|
||||
self.from, self.to = File.expand_path(from), to
|
||||
self.working_path = working_path
|
||||
self.from, self.to = from.gsub('./', ''), to
|
||||
self.logger = options.delete(:logger)
|
||||
sass_opts = options.delete(:sass) || {}
|
||||
self.options = 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)
|
||||
self.options[:cache_location] ||= determine_cache_location
|
||||
options[:importer] = self.importer = Sass::Importers::Filesystem.new(from)
|
||||
self.staleness_checker = Sass::Plugin::StalenessChecker.new(options)
|
||||
end
|
||||
|
||||
def determine_cache_location
|
||||
@ -75,17 +72,16 @@ module Compass
|
||||
end
|
||||
|
||||
def clean!
|
||||
remove options[:cache_location]
|
||||
FileUtils.rm_rf options[:cache_location]
|
||||
css_files.each do |css_file|
|
||||
remove css_file
|
||||
FileUtils.rm_f css_file
|
||||
end
|
||||
end
|
||||
|
||||
def run
|
||||
failure_count = 0
|
||||
if new_config?
|
||||
# Wipe out the cache and force compilation if the configuration has changed.
|
||||
remove options[:cache_location] if options[:cache_location]
|
||||
FileUtils.rm_rf options[:cache_location]
|
||||
options[:force] = true
|
||||
end
|
||||
|
||||
@ -98,7 +94,6 @@ 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
|
||||
@ -106,7 +101,6 @@ 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)
|
||||
@ -148,7 +142,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 = sass_options.merge(:filename => sass_filename, :css_filename => css_filename, :syntax => syntax)
|
||||
opts = options.merge :filename => sass_filename, :css_filename => css_filename, :syntax => syntax
|
||||
Sass::Engine.new(open(sass_filename).read, opts)
|
||||
end
|
||||
|
||||
|
@ -38,8 +38,7 @@ module Compass
|
||||
:color_output,
|
||||
:preferred_syntax,
|
||||
:disable_warnings,
|
||||
:sprite_engine,
|
||||
:chunky_png_options
|
||||
:sprite_engine
|
||||
].flatten
|
||||
|
||||
# Registers a new configuration property.
|
||||
|
@ -38,8 +38,8 @@ module Compass
|
||||
end
|
||||
|
||||
def absolute_path?(path)
|
||||
# Pretty basic implementation
|
||||
path.index(File::SEPARATOR) == 0 || path.index(':') == 1
|
||||
# This is only going to work on unix, gonna need a better implementation.
|
||||
path.index(File::SEPARATOR) == 0
|
||||
end
|
||||
|
||||
def to_sass_engine_options
|
||||
|
@ -71,10 +71,8 @@ module Compass
|
||||
end
|
||||
|
||||
# When called with a block, defines the cache buster strategy to be used.
|
||||
# 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 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.
|
||||
# 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,10 +133,6 @@ 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
|
||||
return perform!
|
||||
perform!
|
||||
rescue Exception => e
|
||||
raise e if e.is_a? SystemExit
|
||||
if e.is_a?(::Compass::Error) || e.is_a?(OptionParser::ParseError)
|
||||
@ -22,6 +22,7 @@ module Compass::Exec
|
||||
end
|
||||
return 1
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
protected
|
||||
@ -39,9 +40,7 @@ module Compass::Exec
|
||||
else
|
||||
command_class.parse!(args)
|
||||
end
|
||||
cmd = command_class.new(Dir.getwd, @options)
|
||||
cmd.execute
|
||||
cmd.successful? ? 0 : 1
|
||||
command_class.new(Dir.getwd, @options).execute
|
||||
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 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},
|
||||
: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},
|
||||
:table => %w{table},
|
||||
:"list-item" => %w{li},
|
||||
:"table-row-group" => %w{tbody},
|
||||
@ -14,13 +14,12 @@ module Compass::SassExtensions::Functions::Display
|
||||
:"table-footer-group" => %w{tfoot},
|
||||
:"table-row" => %w{tr},
|
||||
:"table-cell" => %w{th td},
|
||||
:"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},
|
||||
:html5 => %w{article aside dialog figure footer header hgroup nav section}
|
||||
}
|
||||
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)
|
||||
Sass::Script::String.new(DEFAULT_DISPLAY.fetch(display.value.to_sym).join(", "))
|
||||
end
|
||||
end
|
||||
end
|
@ -35,8 +35,6 @@ 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}-s#{map.uniqueness_hash}.png"),
|
||||
image_url(Sass::Script::String.new("#{map.path}-#{map.uniqueness_hash}.png"),
|
||||
Sass::Script::Bool.new(false),
|
||||
Sass::Script::Bool.new(false))
|
||||
end
|
||||
|
@ -91,7 +91,9 @@ module Compass::SassExtensions::Functions::Urls
|
||||
if cache_buster.is_a?(Sass::Script::String)
|
||||
path += "?#{cache_buster.value}"
|
||||
else
|
||||
path = cache_busted_path(path, real_path)
|
||||
if buster = compute_cache_buster(path, real_path)
|
||||
path += "?#{buster}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -135,23 +137,6 @@ 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]
|
||||
|
@ -1,6 +1,7 @@
|
||||
require 'digest/md5'
|
||||
require 'compass/sprite_importer'
|
||||
|
||||
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
@ -8,9 +9,13 @@ module Compass
|
||||
end
|
||||
end
|
||||
|
||||
require 'compass/sass_extensions/sprites/image'
|
||||
require 'compass/sass_extensions/sprites/sprite_methods'
|
||||
require 'compass/sass_extensions/sprites/image_methods'
|
||||
#modules
|
||||
require 'compass/sass_extensions/sprites/sprite'
|
||||
require 'compass/sass_extensions/sprites/processing'
|
||||
require 'compass/sass_extensions/sprites/image_helper'
|
||||
#classes
|
||||
require 'compass/sass_extensions/sprites/sprite_map'
|
||||
require 'compass/sass_extensions/sprites/engines'
|
||||
|
||||
require 'compass/sass_extensions/sprites/image'
|
||||
require 'compass/sass_extensions/sprites/row_fitter'
|
||||
require 'compass/sass_extensions/sprites/image_row'
|
||||
require 'compass/sass_extensions/sprites/engines'
|
74
lib/compass/sass_extensions/sprites/base.rb
Normal file
@ -0,0 +1,74 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
class Base < Sass::Script::Literal
|
||||
|
||||
attr_accessor :image_names, :path, :name, :map, :kwargs
|
||||
attr_accessor :images, :width, :height
|
||||
|
||||
include Sprite
|
||||
include Processing
|
||||
include ImageHelper
|
||||
|
||||
# Initialize a new aprite object from a relative file path
|
||||
# the path is relative to the <tt>images_path</tt> confguration option
|
||||
def self.from_uri(uri, context, kwargs)
|
||||
sprite_map = ::Compass::SpriteMap.new(:uri => uri.value, :options => {})
|
||||
sprites = sprite_map.files.map do |sprite|
|
||||
sprite.gsub(Compass.configuration.images_path+"/", "")
|
||||
end
|
||||
new(sprites, sprite_map, context, kwargs)
|
||||
end
|
||||
|
||||
def initialize(sprites, sprite_map, context, kwargs)
|
||||
require_engine!
|
||||
@image_names = sprites
|
||||
@path = sprite_map.path
|
||||
@name = sprite_map.name
|
||||
@kwargs = kwargs
|
||||
@kwargs['cleanup'] ||= Sass::Script::Bool.new(true)
|
||||
@kwargs['smart_pack'] ||= Sass::Script::Bool.new(false)
|
||||
@images = nil
|
||||
@width = nil
|
||||
@height = nil
|
||||
@evaluation_context = context
|
||||
@map = sprite_map
|
||||
validate!
|
||||
compute_image_metadata!
|
||||
end
|
||||
|
||||
# Loads the sprite engine
|
||||
def require_engine!
|
||||
self.class.send(:include, eval("::Compass::SassExtensions::Sprites::#{modulize}Engine"))
|
||||
end
|
||||
|
||||
def inspect
|
||||
to_s
|
||||
end
|
||||
|
||||
def to_s(kwargs = self.kwargs)
|
||||
sprite_url(self).value
|
||||
end
|
||||
|
||||
def respond_to?(meth)
|
||||
super || @evaluation_context.respond_to?(meth)
|
||||
end
|
||||
|
||||
def method_missing(meth, *args, &block)
|
||||
if @evaluation_context.respond_to?(meth)
|
||||
@evaluation_context.send(meth, *args, &block)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def modulize
|
||||
@modulize ||= Compass::configuration.sprite_engine.to_s.scan(/([^_.]+)/).flatten.map {|chunk| "#{chunk[0].chr.upcase}#{chunk[1..-1]}" }.join
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,25 +1 @@
|
||||
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,19 +7,20 @@ end
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine
|
||||
|
||||
module ChunkyPngEngine
|
||||
|
||||
# Returns a PNG object
|
||||
def construct_sprite
|
||||
@canvas = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
|
||||
output_png = 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"
|
||||
canvas.replace! input_png, image.left, image.top
|
||||
output_png.replace! input_png, image.left, image.top
|
||||
else
|
||||
x = image.left - (image.left / image.width).ceil * image.width
|
||||
while x < width do
|
||||
begin
|
||||
canvas.replace! input_png, x, image.top
|
||||
output_png.replace! input_png, x, image.top
|
||||
x += image.width
|
||||
rescue ChunkyPNG::OutOfBounds
|
||||
break;
|
||||
@ -27,17 +28,9 @@ module Compass
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def save(filename)
|
||||
if canvas.nil?
|
||||
construct_sprite
|
||||
end
|
||||
|
||||
canvas.save(filename, Compass.configuration.chunky_png_options)
|
||||
output_png
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -107,7 +107,10 @@ module Compass
|
||||
base.image_for($1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def <=>(other)
|
||||
other.width <=> self.width
|
||||
end
|
||||
|
||||
private
|
||||
def dimensions
|
||||
|
@ -1,7 +1,7 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module ImageMethods
|
||||
module ImageHelper
|
||||
# Fetches the Sprite::Image object for the supplied name
|
||||
def image_for(name)
|
||||
@images.detect { |img| img.name == name}
|
48
lib/compass/sass_extensions/sprites/image_row.rb
Normal file
@ -0,0 +1,48 @@
|
||||
require 'forwardable'
|
||||
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
class ImageRow
|
||||
extend Forwardable
|
||||
|
||||
attr_reader :images, :max_width
|
||||
def_delegators :@images, :last, :delete, :empty?, :length
|
||||
|
||||
def initialize(max_width)
|
||||
@images = []
|
||||
@max_width = max_width
|
||||
end
|
||||
|
||||
def add(image)
|
||||
return false if !will_fit?(image)
|
||||
@images << image
|
||||
true
|
||||
end
|
||||
|
||||
alias :<< :add
|
||||
|
||||
def height
|
||||
images.map(&:height).max
|
||||
end
|
||||
|
||||
def width
|
||||
images.map(&:width).max
|
||||
end
|
||||
|
||||
def total_width
|
||||
images.inject(0) {|sum, img| sum + img.width }
|
||||
end
|
||||
|
||||
def efficiency
|
||||
1 - (total_width.to_f / max_width.to_f)
|
||||
end
|
||||
|
||||
def will_fit?(image)
|
||||
(total_width + image.width) <= max_width
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
32
lib/compass/sass_extensions/sprites/processing.rb
Normal file
@ -0,0 +1,32 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module Processing
|
||||
def smart_packing
|
||||
fitter = ::Compass::SassExtensions::Sprites::RowFitter.new(@images)
|
||||
current_y = 0
|
||||
fitter.fit!.each do |row|
|
||||
current_x = 0
|
||||
row.images.each_with_index do |image, index|
|
||||
image.left = current_x
|
||||
image.top = current_y
|
||||
current_x += image.width
|
||||
end
|
||||
current_y += row.height
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def legacy_packing
|
||||
@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
|
||||
last_image = image
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
83
lib/compass/sass_extensions/sprites/row_fitter.rb
Normal file
@ -0,0 +1,83 @@
|
||||
require 'forwardable'
|
||||
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
class RowFitter
|
||||
extend Forwardable
|
||||
|
||||
attr_reader :images, :rows
|
||||
def_delegators :rows, :[]
|
||||
|
||||
def initialize(images)
|
||||
@images = images.sort
|
||||
@rows = []
|
||||
end
|
||||
|
||||
def fit!(style = :scan)
|
||||
send("#{style}_fit")
|
||||
@rows
|
||||
end
|
||||
|
||||
def width
|
||||
@width ||= @images.collect(&:width).max
|
||||
end
|
||||
|
||||
def efficiency
|
||||
@rows.inject(0) { |sum, row| sum += row.efficiency } ** @rows.length
|
||||
end
|
||||
|
||||
private
|
||||
def new_row(image = nil)
|
||||
row = Compass::SassExtensions::Sprites::ImageRow.new(width)
|
||||
row.add(image) if image
|
||||
row
|
||||
end
|
||||
|
||||
def fast_fit
|
||||
row = new_row
|
||||
@images.each do |image|
|
||||
if !row.add(image)
|
||||
@rows << row
|
||||
row = new_row(image)
|
||||
end
|
||||
end
|
||||
|
||||
@rows << row
|
||||
end
|
||||
|
||||
def scan_fit
|
||||
fast_fit
|
||||
|
||||
moved_images = []
|
||||
|
||||
begin
|
||||
removed = false
|
||||
|
||||
catch :done do
|
||||
@rows.each do |row|
|
||||
(@rows - [ row ]).each do |other_row|
|
||||
other_row.images.each do |image|
|
||||
if !moved_images.include?(image)
|
||||
if row.will_fit?(image)
|
||||
other_row.delete(image)
|
||||
row << image
|
||||
|
||||
@rows.delete(other_row) if other_row.empty?
|
||||
removed = true
|
||||
|
||||
moved_images << image
|
||||
throw :done
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end while removed
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,7 +1,7 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module SpriteMethods
|
||||
module Sprite
|
||||
|
||||
# Changing this string will invalidate all previously generated sprite images.
|
||||
# We should do so only when the packing algorithm changes
|
||||
@ -15,14 +15,6 @@ module Compass
|
||||
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
|
||||
@ -37,11 +29,10 @@ module Compass
|
||||
# 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
|
||||
if kwargs.get_var('smart-pack').value
|
||||
smart_packing
|
||||
else
|
||||
legacy_packing
|
||||
end
|
||||
end
|
||||
|
||||
@ -56,7 +47,7 @@ module Compass
|
||||
|
||||
# The on-the-disk filename of the sprite
|
||||
def filename
|
||||
File.join(Compass.configuration.images_path, "#{path}-s#{uniqueness_hash}.png")
|
||||
File.join(Compass.configuration.images_path, "#{path}-#{uniqueness_hash}.png")
|
||||
end
|
||||
|
||||
# Generate a sprite image if necessary
|
||||
@ -65,9 +56,9 @@ module Compass
|
||||
if kwargs.get_var('cleanup').value
|
||||
cleanup_old_sprites
|
||||
end
|
||||
engine.construct_sprite
|
||||
Compass.configuration.run_callback(:sprite_generated, engine.canvas)
|
||||
save!
|
||||
sprite_data = construct_sprite
|
||||
save!(sprite_data)
|
||||
Compass.configuration.run_callback(:sprite_generated, sprite_data)
|
||||
end
|
||||
end
|
||||
|
||||
@ -99,8 +90,8 @@ module Compass
|
||||
end
|
||||
|
||||
# Saves the sprite engine
|
||||
def save!
|
||||
saved = engine.save(filename)
|
||||
def save!(output_png)
|
||||
saved = output_png.save filename
|
||||
Compass.configuration.run_callback(:sprite_saved, filename)
|
||||
saved
|
||||
end
|
@ -2,13 +2,8 @@ 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
|
||||
# the path is relative to the <tt>images_path</tt> confguration option
|
||||
def self.from_uri(uri, context, kwargs)
|
||||
@ -18,8 +13,22 @@ module Compass
|
||||
end
|
||||
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
|
||||
@ -28,12 +37,150 @@ 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
|
||||
@ -53,14 +200,14 @@ module Compass
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
|
||||
def modulize
|
||||
@modulize ||= Compass::configuration.sprite_engine.to_s.scan(/([^_.]+)/).flatten.map {|chunk| "#{chunk[0].chr.upcase}#{chunk[1..-1]}" }.join
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -4,14 +4,7 @@ module Compass
|
||||
VAILD_FILE_NAME = /\A#{Sass::SCSS::RX::IDENT}\Z/
|
||||
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
|
||||
@ -38,7 +31,7 @@ module Compass
|
||||
end
|
||||
|
||||
def to_s
|
||||
self.class.name
|
||||
content_for_images
|
||||
end
|
||||
|
||||
def hash
|
||||
|
@ -1,16 +1,9 @@
|
||||
begin
|
||||
require 'rubygems'
|
||||
require 'compass-validator'
|
||||
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:
|
||||
rescue LoadError
|
||||
raise Compass::MissingDependency, %Q{The Compass CSS Validator could not be loaded. Please install it:
|
||||
|
||||
sudo gem install compass-validator
|
||||
ERRORMSG
|
||||
end
|
||||
}
|
||||
end
|
||||
|
@ -1,11 +1,32 @@
|
||||
require 'test_helper'
|
||||
|
||||
class SpriteCommandTest < Test::Unit::TestCase
|
||||
attr_reader :test_dir
|
||||
require 'spec_helper'
|
||||
require 'compass/commands'
|
||||
require 'compass/exec'
|
||||
require 'compass/commands/sprite'
|
||||
describe Compass::Commands::Sprite do
|
||||
def config_data
|
||||
return <<-CONFIG
|
||||
images_path = #{@images_tmp_path.inspect}
|
||||
CONFIG
|
||||
end
|
||||
|
||||
def setup
|
||||
@images_src_path = File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'sprites', 'public', 'images')
|
||||
@images_tmp_path = File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'sprites', 'public', 'images-tmp')
|
||||
def create_temp_cli_dir
|
||||
directory = File.join(File.expand_path('../', __FILE__), 'test')
|
||||
::FileUtils.mkdir_p directory
|
||||
@test_dir = directory
|
||||
end
|
||||
|
||||
def run_compass_with_options(options)
|
||||
output = 'foo'
|
||||
::Dir.chdir @test_dir
|
||||
%x{compass #{options.join(' ')}}
|
||||
end
|
||||
|
||||
def options_to_cli(options)
|
||||
options.map.flatten!
|
||||
end
|
||||
|
||||
let(:test_dir) { @test_dir }
|
||||
before :each do
|
||||
@before_dir = ::Dir.pwd
|
||||
create_temp_cli_dir
|
||||
create_sprite_temp
|
||||
@ -13,48 +34,22 @@ class SpriteCommandTest < Test::Unit::TestCase
|
||||
f << config_data
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
def config_data
|
||||
return <<-CONFIG
|
||||
images_path = #{@images_tmp_path.inspect}
|
||||
CONFIG
|
||||
end
|
||||
|
||||
def create_temp_cli_dir
|
||||
directory = File.join(File.expand_path('../', __FILE__), 'test')
|
||||
::FileUtils.mkdir_p directory
|
||||
@test_dir = directory
|
||||
end
|
||||
|
||||
def run_compass_with_options(options)
|
||||
output = 'foo'
|
||||
::Dir.chdir @test_dir
|
||||
%x{compass #{options.join(' ')}}
|
||||
end
|
||||
|
||||
def options_to_cli(options)
|
||||
options.map.flatten!
|
||||
end
|
||||
|
||||
def teardown
|
||||
after :each do
|
||||
::Dir.chdir @before_dir
|
||||
clean_up_sprites
|
||||
if File.exists?(@test_dir)
|
||||
::FileUtils.rm_r @test_dir
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
it "should create sprite file" do
|
||||
assert_equal 0, run_compass_with_options(['sprite', "-f", 'stylesheet.scss', "'#{@images_tmp_path}/*.png'"]).to_i
|
||||
assert File.exists?(File.join(test_dir, 'stylesheet.scss'))
|
||||
run_compass_with_options(['sprite', "-f", "stylesheet.scss", "'#{@images_tmp_path}/*.png'"]).to_i.should == 0
|
||||
File.exists?(File.join(test_dir, 'stylesheet.scss')).should be_true
|
||||
end
|
||||
|
||||
|
||||
it "should fail gracfuly when giving bad arguments" do
|
||||
pending
|
||||
end
|
||||
|
||||
|
||||
end
|
57
spec/compass/sass_extensions/sprites/base_spec.rb
Normal file
@ -0,0 +1,57 @@
|
||||
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
|
161
spec/compass/sass_extensions/sprites/image_spec.rb
Normal file
@ -0,0 +1,161 @@
|
||||
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
|
54
spec/compass/sass_extensions/sprites/sprite_map_spec.rb
Normal file
@ -0,0 +1,54 @@
|
||||
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
|
5
spec/compass/sass_extensions/sprites/sprites_spec.rb
Normal file
@ -0,0 +1,5 @@
|
||||
require 'spec_helper'
|
||||
require 'fakefs/spec_helpers'
|
||||
|
||||
describe Compass::Sprites do
|
||||
end
|
37
spec/spec_helper.rb
Normal file
@ -0,0 +1,37 @@
|
||||
$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
|
571
spec/sprites_spec.rb
Normal file
@ -0,0 +1,571 @@
|
||||
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
|
BIN
spec/test_project/public/images/ko/default_background.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
spec/test_project/public/images/ko/starbg26x27.png
Executable file
After Width: | Height: | Size: 1.1 KiB |
BIN
spec/test_project/public/images/prefix/20-by-20.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
spec/test_project/public/images/prefix/ten-by-ten.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
spec/test_project/public/images/selectors/ten-by-ten.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
spec/test_project/public/images/selectors/ten-by-ten_active.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
spec/test_project/public/images/selectors/ten-by-ten_hover.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
spec/test_project/public/images/selectors/ten-by-ten_target.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
spec/test_project/public/images/squares/ten-by-ten.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
spec/test_project/public/images/squares/twenty-by-twenty.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
7
test.watchr
Normal file
@ -0,0 +1,7 @@
|
||||
watch('test/(.*)_test\.rb') { |m| test(m[0]) }
|
||||
watch('lib/compass/sass_extensions/sprites/image_group.rb') { test('test/units/sprites/image_group_test.rb') }
|
||||
watch('lib/compass/sass_extensions/sprites/row_fitter.rb') { test('test/units/sprites/row_fitter_test.rb') }
|
||||
|
||||
def test(file = nil)
|
||||
system %{ruby -I"lib:test" #{file}}.tap { |o| puts o }
|
||||
end
|
BIN
test/fixtures/sprites/public/images/image_row/large.png
vendored
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
test/fixtures/sprites/public/images/image_row/large_square.png
vendored
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
test/fixtures/sprites/public/images/image_row/medium.png
vendored
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
test/fixtures/sprites/public/images/image_row/small.png
vendored
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
test/fixtures/sprites/public/images/image_row/tall.png
vendored
Normal file
After Width: | Height: | Size: 2.8 KiB |
@ -42,7 +42,8 @@ q, blockquote {
|
||||
a img {
|
||||
border: none; }
|
||||
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block; }
|
||||
|
||||
body {
|
||||
@ -671,10 +672,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% 18px, auto;
|
||||
-webkit-background-size: 100% 18px, auto;
|
||||
-o-background-size: 100% 18px, auto;
|
||||
background-size: 100% 18px, auto;
|
||||
-moz-background-size: 100% 20px, auto;
|
||||
-webkit-background-size: 100% 20px, auto;
|
||||
-o-background-size: 100% 20px, auto;
|
||||
background-size: 100% 20px, auto;
|
||||
background-position: left top; }
|
||||
|
||||
.feedback, .error, .alert, .notice, .success, .info {
|
||||
@ -758,7 +759,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-color: #666666; }
|
||||
border: 1px solid #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% 18px, auto;
|
||||
-webkit-background-size: 100% 18px, auto;
|
||||
-o-background-size: 100% 18px, auto;
|
||||
background-size: 100% 18px, auto;
|
||||
-moz-background-size: 100% 20px, auto;
|
||||
-webkit-background-size: 100% 20px, auto;
|
||||
-o-background-size: 100% 20px, auto;
|
||||
background-size: 100% 20px, auto;
|
||||
background-position: left top; }
|
||||
|