doohickey 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +54 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/app/stylesheets/doohickey/_doohickey.sass +40 -0
- data/app/stylesheets/doohickey/_settings.sass +2 -0
- data/app/stylesheets/doohickey/accessibility/_accessible_image_links.sass +7 -0
- data/app/stylesheets/doohickey/css3/_awesome_button.sass +21 -0
- data/app/stylesheets/doohickey/css3/_border_radius.sass +37 -0
- data/app/stylesheets/doohickey/css3/_font_face.sass +6 -0
- data/app/stylesheets/doohickey/css3/_gradients.sass +5 -0
- data/app/stylesheets/doohickey/css3/_shadows.sass +7 -0
- data/app/stylesheets/doohickey/layout/_body.sass +15 -0
- data/app/stylesheets/doohickey/lists/_bullets.sass +9 -0
- data/app/stylesheets/doohickey/lists/_horizontal.sass +13 -0
- data/app/stylesheets/doohickey/tabs/_horizontal.sass +9 -0
- data/app/stylesheets/doohickey/utils/_clearfix.sass +3 -0
- data/app/stylesheets/doohickey/utils/_floats.sass +12 -0
- data/app/stylesheets/doohickey/utils/_hacks.sass +6 -0
- data/app/stylesheets/doohickey/utils/_reset.sass +80 -0
- data/doohickey.gemspec +70 -0
- data/init.rb +1 -0
- data/install.rb +1 -0
- data/lib/doohickey/sass_extensions/gradients.rb +212 -0
- data/lib/doohickey.rb +66 -0
- data/tasks/doohickey_tasks.rake +4 -0
- data/test/doohickey_test.rb +8 -0
- data/test/test_helper.rb +3 -0
- data/uninstall.rb +1 -0
- metadata +92 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg/
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Trond Arve Nordheim
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Doohickey
|
2
|
+
A collection of [Sass][sass] mixins that I use in my projects.<br><br>
|
3
|
+
Partly based on and inspired by [Compass][compass].
|
4
|
+
|
5
|
+
# Installation
|
6
|
+
Install Doohickey as a plugin using:<br>
|
7
|
+
`script/plugin install http://github.com/tanordheim/doohickey.git`
|
8
|
+
|
9
|
+
Then you must create a initializer file in config/initializers/ containing the
|
10
|
+
following:<br>
|
11
|
+
`Doohickey::Initializer.initialize`
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
To import Doohickey into your Sass template, simply type:<br>
|
15
|
+
`@import doohickey/doohickey`
|
16
|
+
|
17
|
+
## Available mixins
|
18
|
+
|
19
|
+
### Accessibility mixins
|
20
|
+
* +accessible-image-link
|
21
|
+
|
22
|
+
### CSS3 mixins
|
23
|
+
* +awesome-button
|
24
|
+
* +border-radius, +border-top-radius, +border-bottom-radius, +border-top-left-radius, +border-top-right-radius, +border-bottom-left-radius, +border-bottom-right-radius, +border-corner-radius
|
25
|
+
* +font-face
|
26
|
+
* +linear-gradient
|
27
|
+
* +box-shadow
|
28
|
+
* +text-shadow
|
29
|
+
|
30
|
+
### Layout mixins
|
31
|
+
* +standard-body
|
32
|
+
|
33
|
+
### List mixins
|
34
|
+
* +no-bullet, +no-bullets
|
35
|
+
* +horizontal-list, +horizontal-list-container, +horizontal-list-item
|
36
|
+
|
37
|
+
### Tab mixins
|
38
|
+
* +horizontal-tabs
|
39
|
+
|
40
|
+
### Utility mixins
|
41
|
+
* +clearfix
|
42
|
+
* +float-left, +float-right, +float-reset
|
43
|
+
* +has-layout
|
44
|
+
* +global-reset
|
45
|
+
|
46
|
+
## Author
|
47
|
+
Written by Trond Arve Nordheim.<br>
|
48
|
+
Some code is borrowed from [Compass][compass] and written by Chris Eppstein.
|
49
|
+
|
50
|
+
## License
|
51
|
+
Released under the MIT license
|
52
|
+
|
53
|
+
[sass]: http://sass-lang.com/ "Syntactically Awesome Stylesheets"
|
54
|
+
[compass]: http://compass-style.org/
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/classic_namespace'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
|
6
|
+
desc 'Default: run unit tests.'
|
7
|
+
task :default => :test
|
8
|
+
|
9
|
+
desc 'Test the doohickey plugin.'
|
10
|
+
Rake::TestTask.new(:test) do |t|
|
11
|
+
t.libs << 'lib'
|
12
|
+
t.libs << 'test'
|
13
|
+
t.pattern = 'test/**/*_test.rb'
|
14
|
+
t.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Generate documentation for the doohickey plugin.'
|
18
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
19
|
+
rdoc.rdoc_dir = 'rdoc'
|
20
|
+
rdoc.title = 'Doohickey'
|
21
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
22
|
+
rdoc.rdoc_files.include('README')
|
23
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
24
|
+
end
|
25
|
+
|
26
|
+
begin
|
27
|
+
require "jeweler"
|
28
|
+
Jeweler::Tasks.new do |gemspec|
|
29
|
+
gemspec.name = "doohickey"
|
30
|
+
gemspec.summary = "Easy to use SASS mixins for Rails projects"
|
31
|
+
gemspec.description = "Contains SASS mixins and a default SASS configuration for use in Ruby on Rails projects"
|
32
|
+
gemspec.email = "tanordheim@gmail.com"
|
33
|
+
gemspec.homepage = "http://github.com/tanordheim/doohickey"
|
34
|
+
gemspec.authors = ["Trond Arve Nordheim"]
|
35
|
+
end
|
36
|
+
Jeweler::GemcutterTasks.new
|
37
|
+
rescue LoadError
|
38
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
39
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,40 @@
|
|
1
|
+
@import doohickey/settings.sass
|
2
|
+
|
3
|
+
//
|
4
|
+
// Utility mixins
|
5
|
+
// ----------------------------------------------------------------------------
|
6
|
+
@import doohickey/utils/hacks.sass
|
7
|
+
@import doohickey/utils/clearfix.sass
|
8
|
+
@import doohickey/utils/reset.sass
|
9
|
+
@import doohickey/utils/floats.sass
|
10
|
+
|
11
|
+
//
|
12
|
+
// Body mixins
|
13
|
+
// ----------------------------------------------------------------------------
|
14
|
+
@import doohickey/layout/body.sass
|
15
|
+
|
16
|
+
//
|
17
|
+
// List mixins
|
18
|
+
// ----------------------------------------------------------------------------
|
19
|
+
@import doohickey/lists/bullets.sass
|
20
|
+
@import doohickey/lists/horizontal.sass
|
21
|
+
|
22
|
+
|
23
|
+
//
|
24
|
+
// Tabs mixins
|
25
|
+
// ----------------------------------------------------------------------------
|
26
|
+
@import doohickey/tabs/horizontal.sass
|
27
|
+
|
28
|
+
//
|
29
|
+
// Accessibility
|
30
|
+
// ----------------------------------------------------------------------------
|
31
|
+
@import doohickey/accessibility/accessible_image_links.sass
|
32
|
+
|
33
|
+
//
|
34
|
+
// CSS3 mixins
|
35
|
+
// ----------------------------------------------------------------------------
|
36
|
+
@import doohickey/css3/font_face.sass
|
37
|
+
@import doohickey/css3/gradients.sass
|
38
|
+
@import doohickey/css3/shadows.sass
|
39
|
+
@import doohickey/css3/border_radius.sass
|
40
|
+
@import doohickey/css3/awesome_button.sass
|
@@ -0,0 +1,21 @@
|
|
1
|
+
=awesome-button(!background_color, !text_color)
|
2
|
+
background= !background_color url("/images/button_overlay.png") "repeat-x"
|
3
|
+
display: inline-block
|
4
|
+
padding: 7px 10px 6px
|
5
|
+
color= !text_color
|
6
|
+
text-decoration: none
|
7
|
+
+border-radius(5px)
|
8
|
+
+box-shadow(rgba(0, 0, 0, 0.5), 0, 1px, 3px)
|
9
|
+
+text-shadow(rgba(0, 0, 0, 0.25), 0, -1px, 1px)
|
10
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.25)
|
11
|
+
position: relative
|
12
|
+
cursor: pointer
|
13
|
+
font-size: 1.1em
|
14
|
+
font-weight: bold
|
15
|
+
line-height: 1
|
16
|
+
|
17
|
+
&:hover
|
18
|
+
background-color= !background_color - #222
|
19
|
+
|
20
|
+
&:active
|
21
|
+
top: 1px
|
@@ -0,0 +1,37 @@
|
|
1
|
+
=border-radius(!radius)
|
2
|
+
border-radius= !radius
|
3
|
+
-moz-border-radius= !radius
|
4
|
+
-webkit-border-radius= !radius
|
5
|
+
|
6
|
+
=border-top-left-radius(!radius)
|
7
|
+
+border-corner-radius("top", "left", !radius)
|
8
|
+
|
9
|
+
=border-top-right-radius(!radius)
|
10
|
+
+border-corner-radius("top", "right", !radius)
|
11
|
+
|
12
|
+
=border-bottom-left-radius(!radius)
|
13
|
+
+border-corner-radius("bottom", "left", !radius)
|
14
|
+
|
15
|
+
=border-bottom-right-radius(!radius)
|
16
|
+
+border-corner-radius("bottom", "right", !radius)
|
17
|
+
|
18
|
+
=border-top-radius(!radius)
|
19
|
+
+border-top-left-radius(!radius)
|
20
|
+
+border-top-right-radius(!radius)
|
21
|
+
|
22
|
+
=border-bottom-radius(!radius)
|
23
|
+
+border-bottom-left-radius(!radius)
|
24
|
+
+border-bottom-right-radius(!radius)
|
25
|
+
|
26
|
+
=border-left-radius(!radius)
|
27
|
+
+border-top-left-radius(!radius)
|
28
|
+
+border-bottom-left-radius(!radius)
|
29
|
+
|
30
|
+
=border-right-radius(!radius)
|
31
|
+
+border-top-right-radius(!radius)
|
32
|
+
+border-bottom-right-radius(!radius)
|
33
|
+
|
34
|
+
=border-corner-radius(!vertical, !horizontal, !radius)
|
35
|
+
border-#{!vertical}-#{!horizontal}-radius= !radius
|
36
|
+
-moz-border-radius-#{!vertical}#{!horizontal}= !radius
|
37
|
+
-webkit-border-#{!vertical}#{!horizontal}= !radius
|
@@ -0,0 +1,5 @@
|
|
1
|
+
=linear-gradient(!color_stops, !start = "top")
|
2
|
+
!end = grad_opposite_position(!start)
|
3
|
+
background-color: #{first_color_stop(!color_stops)}
|
4
|
+
background-image: -webkit-gradient(linear, #{grad_point(!start)}, #{grad_point(!end)}, #{grad_color_stops(!color_stops)})
|
5
|
+
background-image: -moz-linear-gradient(#{!start}, #{!color_stops})
|
@@ -0,0 +1,7 @@
|
|
1
|
+
=box-shadow(!color, !horizontal_offset, !vertical_offset, !spread)
|
2
|
+
-webkit-box-shadow= !color !horizontal_offset !vertical_offset !spread
|
3
|
+
-moz-box-shadow= !color !horizontal_offset !vertical_offset !spread
|
4
|
+
box-shadow= !color !horizontal_offset !vertical_offset !spread
|
5
|
+
|
6
|
+
=text-shadow(!color, !horizontal_offset, !vertical_offset, !spread)
|
7
|
+
text-shadow= !horizontal_offset !vertical_offset !spread !color
|
@@ -0,0 +1,15 @@
|
|
1
|
+
=standard-body(!font_family = "Arial, sans-serif", !background = false, !color = false, !font_size = false, !line_height = false)
|
2
|
+
body
|
3
|
+
font-family= !font_family
|
4
|
+
@if !font_size
|
5
|
+
font-size= !font_size
|
6
|
+
@else
|
7
|
+
font-size: 62.5%
|
8
|
+
@if !line_height
|
9
|
+
line-height= !line_height
|
10
|
+
@else
|
11
|
+
line-height: 1.5em
|
12
|
+
@if !background
|
13
|
+
background= !background
|
14
|
+
@if !color
|
15
|
+
color= !color
|
@@ -0,0 +1,80 @@
|
|
1
|
+
=global-reset
|
2
|
+
html, body, div, span, applet, object, iframe,
|
3
|
+
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
4
|
+
a, abbr, acronym, address, big, cite, code,
|
5
|
+
del, dfn, em, font, img, ins, kbd, q, s, samp,
|
6
|
+
small, strike, strong, sub, sup, tt, var,
|
7
|
+
dl, dt, dd, ol, ul, li,
|
8
|
+
fieldset, form, label, legend, button,
|
9
|
+
table, caption, tbody, tfoot, thead, tr, th, td
|
10
|
+
+reset-box-model
|
11
|
+
+reset-font
|
12
|
+
|
13
|
+
*:focus
|
14
|
+
+reset-focus
|
15
|
+
|
16
|
+
body
|
17
|
+
+reset-body
|
18
|
+
|
19
|
+
ol, ul, li
|
20
|
+
+reset-list-style
|
21
|
+
|
22
|
+
/* tables still need 'cellspacing="0"' in the markup
|
23
|
+
table
|
24
|
+
+reset-table
|
25
|
+
|
26
|
+
caption, th, td
|
27
|
+
+reset-table-cell
|
28
|
+
|
29
|
+
q, blockquote
|
30
|
+
+reset-quotation
|
31
|
+
|
32
|
+
a img
|
33
|
+
+reset-image-anchor-border
|
34
|
+
|
35
|
+
=reset-box-model
|
36
|
+
margin: 0
|
37
|
+
padding: 0
|
38
|
+
border: 0
|
39
|
+
outline: 0
|
40
|
+
|
41
|
+
=reset-font
|
42
|
+
font:
|
43
|
+
weight: inherit
|
44
|
+
style: inherit
|
45
|
+
size: 100%
|
46
|
+
family: inherit
|
47
|
+
vertical-align: baseline
|
48
|
+
|
49
|
+
=reset-focus
|
50
|
+
outline: 0
|
51
|
+
|
52
|
+
=reset-body
|
53
|
+
line-height: 1
|
54
|
+
color: #000
|
55
|
+
background: #fff
|
56
|
+
|
57
|
+
=reset-list-style
|
58
|
+
list-style: none
|
59
|
+
|
60
|
+
=reset-table
|
61
|
+
border-collapse: separate
|
62
|
+
border-spacing: 0
|
63
|
+
vertical-align: middle
|
64
|
+
|
65
|
+
=reset-table-cell
|
66
|
+
text-align: left
|
67
|
+
font-weight: normal
|
68
|
+
vertical-align: middle
|
69
|
+
|
70
|
+
=reset-quotation
|
71
|
+
quotes: "" ""
|
72
|
+
&:before, &:after
|
73
|
+
content: ""
|
74
|
+
|
75
|
+
=reset-image-anchor-border
|
76
|
+
border: none
|
77
|
+
|
78
|
+
=reset-html5
|
79
|
+
section, article, aside, header, footer, nav, dialog, figure
|
80
|
+
display: block
|
data/doohickey.gemspec
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{doohickey}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Trond Arve Nordheim"]
|
12
|
+
s.date = %q{2010-05-26}
|
13
|
+
s.description = %q{Contains SASS mixins and a default SASS configuration for use in Ruby on Rails projects}
|
14
|
+
s.email = %q{tanordheim@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.markdown"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"MIT-LICENSE",
|
21
|
+
"README.markdown",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"app/stylesheets/doohickey/_doohickey.sass",
|
25
|
+
"app/stylesheets/doohickey/_settings.sass",
|
26
|
+
"app/stylesheets/doohickey/accessibility/_accessible_image_links.sass",
|
27
|
+
"app/stylesheets/doohickey/css3/_awesome_button.sass",
|
28
|
+
"app/stylesheets/doohickey/css3/_border_radius.sass",
|
29
|
+
"app/stylesheets/doohickey/css3/_font_face.sass",
|
30
|
+
"app/stylesheets/doohickey/css3/_gradients.sass",
|
31
|
+
"app/stylesheets/doohickey/css3/_shadows.sass",
|
32
|
+
"app/stylesheets/doohickey/layout/_body.sass",
|
33
|
+
"app/stylesheets/doohickey/lists/_bullets.sass",
|
34
|
+
"app/stylesheets/doohickey/lists/_horizontal.sass",
|
35
|
+
"app/stylesheets/doohickey/tabs/_horizontal.sass",
|
36
|
+
"app/stylesheets/doohickey/utils/_clearfix.sass",
|
37
|
+
"app/stylesheets/doohickey/utils/_floats.sass",
|
38
|
+
"app/stylesheets/doohickey/utils/_hacks.sass",
|
39
|
+
"app/stylesheets/doohickey/utils/_reset.sass",
|
40
|
+
"doohickey.gemspec",
|
41
|
+
"init.rb",
|
42
|
+
"install.rb",
|
43
|
+
"lib/doohickey.rb",
|
44
|
+
"lib/doohickey/sass_extensions/gradients.rb",
|
45
|
+
"tasks/doohickey_tasks.rake",
|
46
|
+
"test/doohickey_test.rb",
|
47
|
+
"test/test_helper.rb",
|
48
|
+
"uninstall.rb"
|
49
|
+
]
|
50
|
+
s.homepage = %q{http://github.com/tanordheim/doohickey}
|
51
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
52
|
+
s.require_paths = ["lib"]
|
53
|
+
s.rubygems_version = %q{1.3.6}
|
54
|
+
s.summary = %q{Easy to use SASS mixins for Rails projects}
|
55
|
+
s.test_files = [
|
56
|
+
"test/test_helper.rb",
|
57
|
+
"test/doohickey_test.rb"
|
58
|
+
]
|
59
|
+
|
60
|
+
if s.respond_to? :specification_version then
|
61
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
62
|
+
s.specification_version = 3
|
63
|
+
|
64
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
65
|
+
else
|
66
|
+
end
|
67
|
+
else
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "doohickey"
|
data/install.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Install hook code here
|
@@ -0,0 +1,212 @@
|
|
1
|
+
#
|
2
|
+
# This class is copied from the Compass CSS framework
|
3
|
+
# <http://compass-style.org/>
|
4
|
+
#
|
5
|
+
# All credits go to Chris Eppstein
|
6
|
+
#
|
7
|
+
# -----------------------------------------------------------------------------
|
8
|
+
module Doohickey
|
9
|
+
module SassExtensions
|
10
|
+
module Gradients
|
11
|
+
|
12
|
+
class List < Sass::Script::Literal
|
13
|
+
attr_accessor :values
|
14
|
+
def initialize(*values)
|
15
|
+
self.values = values
|
16
|
+
end
|
17
|
+
def inspect
|
18
|
+
values.map{|v| v.inspect}.join(", ")
|
19
|
+
end
|
20
|
+
def to_s
|
21
|
+
inspect
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class ColorStop < Sass::Script::Literal
|
26
|
+
attr_accessor :color, :stop
|
27
|
+
def initialize(color, stop = nil)
|
28
|
+
self.color, self.stop = color, stop
|
29
|
+
end
|
30
|
+
def inspect
|
31
|
+
to_s
|
32
|
+
end
|
33
|
+
def to_s
|
34
|
+
s = color.inspect.dup
|
35
|
+
if stop
|
36
|
+
s << " "
|
37
|
+
if stop.unitless?
|
38
|
+
s << stop.times(Sass::Script::Number.new(100, ["%"])).inspect
|
39
|
+
else
|
40
|
+
s << stop.inspect
|
41
|
+
end
|
42
|
+
end
|
43
|
+
s
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
module Functions
|
48
|
+
# returns the opposite position of a side or corner.
|
49
|
+
def grad_opposite_position(position)
|
50
|
+
opposite = position.value.split(/ +/).map do |pos|
|
51
|
+
case pos
|
52
|
+
when "top" then "bottom"
|
53
|
+
when "bottom" then "top"
|
54
|
+
when "left" then "right"
|
55
|
+
when "right" then "left"
|
56
|
+
when "center" then "center"
|
57
|
+
else
|
58
|
+
raise Sass::SyntaxError, "Cannot determine the opposite of #{pos}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
Sass::Script::String.new(opposite.join(" "))
|
62
|
+
end
|
63
|
+
|
64
|
+
# Return the color of the first color stop
|
65
|
+
def first_color_stop(color_list)
|
66
|
+
color = color_list.values.first.color.inspect
|
67
|
+
Sass::Script::String.new(color)
|
68
|
+
end
|
69
|
+
|
70
|
+
# returns color-stop() calls for use in webkit.
|
71
|
+
def grad_color_stops(color_list)
|
72
|
+
assert_list(color_list)
|
73
|
+
normalize_stops!(color_list)
|
74
|
+
max = color_list.values.last.stop
|
75
|
+
color_stops = color_list.values.map do |pos|
|
76
|
+
# have to convert absolute units to percentages for use in color stop functions.
|
77
|
+
stop = pos.stop
|
78
|
+
stop = stop.div(max).times(Sass::Script::Number.new(100,["%"])) if stop.numerator_units == max.numerator_units
|
79
|
+
"color-stop(#{stop.inspect}, #{pos.color.inspect})"
|
80
|
+
end
|
81
|
+
Sass::Script::String.new(color_stops.join(", "))
|
82
|
+
end
|
83
|
+
|
84
|
+
# returns the end position of the gradient from the color stop
|
85
|
+
def grad_end_position(color_list, radial = Sass::Script::Bool.new(false))
|
86
|
+
assert_list(color_list)
|
87
|
+
default = Sass::Script::Number.new(100)
|
88
|
+
grad_position(color_list, Sass::Script::Number.new(color_list.values.size), default, radial)
|
89
|
+
end
|
90
|
+
|
91
|
+
def grad_position(color_list, index, default, radial = Sass::Script::Bool.new(false))
|
92
|
+
assert_list(color_list)
|
93
|
+
stop = color_list.values[index.value - 1].stop
|
94
|
+
if stop && radial.to_bool
|
95
|
+
orig_stop = stop
|
96
|
+
if stop.unitless?
|
97
|
+
if stop.value <= 1
|
98
|
+
# A unitless number is assumed to be a percentage when it's between 0 and 1
|
99
|
+
stop = stop.times(Sass::Script::Number.new(100, ["%"]))
|
100
|
+
else
|
101
|
+
# Otherwise, a unitless number is assumed to be in pixels
|
102
|
+
stop = stop.times(Sass::Script::Number.new(1, ["px"]))
|
103
|
+
end
|
104
|
+
end
|
105
|
+
if stop.numerator_units == ["%"] && color_list.values.last.stop && color_list.values.last.stop.numerator_units == ["px"]
|
106
|
+
stop = stop.times(color_list.values.last.stop).div(Sass::Script::Number.new(100, ["%"]))
|
107
|
+
end
|
108
|
+
stop.div(Sass::Script::Number.new(1, stop.numerator_units, stop.denominator_units))
|
109
|
+
elsif stop
|
110
|
+
stop
|
111
|
+
else
|
112
|
+
default
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# the given a position, return a point in percents
|
117
|
+
def grad_point(position)
|
118
|
+
position = position.value
|
119
|
+
position = if position[" "]
|
120
|
+
if position =~ /(top|bottom|center) (left|right|center)/
|
121
|
+
"#{$2} #{$1}"
|
122
|
+
else
|
123
|
+
position
|
124
|
+
end
|
125
|
+
else
|
126
|
+
case position
|
127
|
+
when /top|bottom/
|
128
|
+
"left #{position}"
|
129
|
+
when /left|right/
|
130
|
+
"#{position} top"
|
131
|
+
else
|
132
|
+
position
|
133
|
+
end
|
134
|
+
end
|
135
|
+
Sass::Script::String.new(position.
|
136
|
+
gsub(/top/, "0%").
|
137
|
+
gsub(/bottom/, "100%").
|
138
|
+
gsub(/left/,"0%").
|
139
|
+
gsub(/right/,"100%").
|
140
|
+
gsub(/center/, "50%"))
|
141
|
+
end
|
142
|
+
|
143
|
+
def color_stops(*args)
|
144
|
+
List.new(*args.map do |arg|
|
145
|
+
case arg
|
146
|
+
when Sass::Script::Color
|
147
|
+
ColorStop.new(arg)
|
148
|
+
when Sass::Script::String
|
149
|
+
# We get a string as the result of concatenation
|
150
|
+
# So we have to reparse the expression
|
151
|
+
color = stop = nil
|
152
|
+
expr = Sass::Script::Parser.parse(arg.value, 0, 0)
|
153
|
+
case expr
|
154
|
+
when Sass::Script::Color
|
155
|
+
color = expr
|
156
|
+
when Sass::Script::Funcall
|
157
|
+
color = expr
|
158
|
+
when Sass::Script::Operation
|
159
|
+
unless expr.instance_variable_get("@operator") == :concat
|
160
|
+
# This should never happen.
|
161
|
+
raise Sass::SyntaxError, "Couldn't parse a color stop from: #{arg.value}"
|
162
|
+
end
|
163
|
+
color = expr.instance_variable_get("@operand1")
|
164
|
+
stop = expr.instance_variable_get("@operand2")
|
165
|
+
else
|
166
|
+
raise Sass::SyntaxError, "Couldn't parse a color stop from: #{arg.value}"
|
167
|
+
end
|
168
|
+
ColorStop.new(color, stop)
|
169
|
+
else
|
170
|
+
raise Sass::SyntaxError, "Not a valid color stop: #{arg}"
|
171
|
+
end
|
172
|
+
end)
|
173
|
+
end
|
174
|
+
private
|
175
|
+
def normalize_stops!(color_list)
|
176
|
+
positions = color_list.values
|
177
|
+
# fill in the start and end positions, if unspecified
|
178
|
+
positions.first.stop = Sass::Script::Number.new(0) unless positions.first.stop
|
179
|
+
positions.last.stop = Sass::Script::Number.new(100, ["%"]) unless positions.last.stop
|
180
|
+
# fill in empty values
|
181
|
+
for i in 0...positions.size
|
182
|
+
if positions[i].stop.nil?
|
183
|
+
num = 2.0
|
184
|
+
for j in (i+1)...positions.size
|
185
|
+
if positions[j].stop
|
186
|
+
positions[i].stop = positions[i-1].stop.plus((positions[j].stop.minus(positions[i-1].stop)).div(Sass::Script::Number.new(num)))
|
187
|
+
break
|
188
|
+
else
|
189
|
+
num += 1
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
# normalize unitless numbers
|
195
|
+
positions.each do |pos|
|
196
|
+
if pos.stop.unitless? && pos.stop.value <= 1
|
197
|
+
pos.stop = pos.stop.times(Sass::Script::Number.new(100, ["%"]))
|
198
|
+
elsif pos.stop.unitless?
|
199
|
+
pos.stop = pos.stop.times(Sass::Script::Number.new(1, ["px"]))
|
200
|
+
end
|
201
|
+
end
|
202
|
+
nil
|
203
|
+
end
|
204
|
+
def assert_list(value)
|
205
|
+
return if value.is_a?(List)
|
206
|
+
raise ArgumentError.new("#{value.inspect} is not a list of color stops. Expected: color_stops(<color> <number>?, ...)")
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
data/lib/doohickey.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# Require that sass is available
|
2
|
+
require "sass"
|
3
|
+
|
4
|
+
# Define our namespace
|
5
|
+
module Doohickey
|
6
|
+
module SassExtensions
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# Load the Sass functionality extensions
|
11
|
+
%w(gradients).each do |function|
|
12
|
+
require "doohickey/sass_extensions/#{function}"
|
13
|
+
end
|
14
|
+
|
15
|
+
# Define the Doohickey initializer
|
16
|
+
module Doohickey
|
17
|
+
class Initializer
|
18
|
+
|
19
|
+
def self.rails_root
|
20
|
+
defined?(Rails.root) ? Rails.root : RAILS_ROOT
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.rails_env
|
24
|
+
defined?(Rails.env) ? Rails.env : RAILS_ENV
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.initialize
|
28
|
+
|
29
|
+
# Global Sass settings
|
30
|
+
# -----------------------------------------------------------------------------
|
31
|
+
template_locations = {}
|
32
|
+
template_locations["#{rails_root}/app/stylesheets"] = Sass::Plugin.options[:css_location]
|
33
|
+
template_locations[File.join(File.dirname(__FILE__), *%w[.. app stylesheets])] = Sass::Plugin.options[:css_location]
|
34
|
+
|
35
|
+
Sass::Plugin.options[:template_location] = template_locations
|
36
|
+
|
37
|
+
# Environment specific configurations
|
38
|
+
# -----------------------------------------------------------------------------
|
39
|
+
if %w(production staging).include?(rails_env)
|
40
|
+
|
41
|
+
# Compress CSS (small files suitable for production)
|
42
|
+
Sass::Plugin.options[:style] = :compressed
|
43
|
+
|
44
|
+
else
|
45
|
+
|
46
|
+
# Expand CSS
|
47
|
+
Sass::Plugin.options[:style] = :expanded
|
48
|
+
|
49
|
+
# Generate CSS from SASS every time a controller is accessed
|
50
|
+
Sass::Plugin.options[:always_update] = true
|
51
|
+
|
52
|
+
# Insert comments in the CSS about the line numbers of the Sass source
|
53
|
+
Sass::Plugin.options[:line_comments] = true
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
# Include the Sass functionality extensions
|
58
|
+
Sass::Script::Functions.send :include, Doohickey::SassExtensions::Gradients::Functions
|
59
|
+
|
60
|
+
# This has to be re-included to pick up submodules
|
61
|
+
Sass::Script::Functions::EvaluationContext.send :include, Sass::Script::Functions
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
data/test/test_helper.rb
ADDED
data/uninstall.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Uninstall hook code here
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: doohickey
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Trond Arve Nordheim
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-26 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Contains SASS mixins and a default SASS configuration for use in Ruby on Rails projects
|
22
|
+
email: tanordheim@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files:
|
28
|
+
- README.markdown
|
29
|
+
files:
|
30
|
+
- .gitignore
|
31
|
+
- MIT-LICENSE
|
32
|
+
- README.markdown
|
33
|
+
- Rakefile
|
34
|
+
- VERSION
|
35
|
+
- app/stylesheets/doohickey/_doohickey.sass
|
36
|
+
- app/stylesheets/doohickey/_settings.sass
|
37
|
+
- app/stylesheets/doohickey/accessibility/_accessible_image_links.sass
|
38
|
+
- app/stylesheets/doohickey/css3/_awesome_button.sass
|
39
|
+
- app/stylesheets/doohickey/css3/_border_radius.sass
|
40
|
+
- app/stylesheets/doohickey/css3/_font_face.sass
|
41
|
+
- app/stylesheets/doohickey/css3/_gradients.sass
|
42
|
+
- app/stylesheets/doohickey/css3/_shadows.sass
|
43
|
+
- app/stylesheets/doohickey/layout/_body.sass
|
44
|
+
- app/stylesheets/doohickey/lists/_bullets.sass
|
45
|
+
- app/stylesheets/doohickey/lists/_horizontal.sass
|
46
|
+
- app/stylesheets/doohickey/tabs/_horizontal.sass
|
47
|
+
- app/stylesheets/doohickey/utils/_clearfix.sass
|
48
|
+
- app/stylesheets/doohickey/utils/_floats.sass
|
49
|
+
- app/stylesheets/doohickey/utils/_hacks.sass
|
50
|
+
- app/stylesheets/doohickey/utils/_reset.sass
|
51
|
+
- doohickey.gemspec
|
52
|
+
- init.rb
|
53
|
+
- install.rb
|
54
|
+
- lib/doohickey.rb
|
55
|
+
- lib/doohickey/sass_extensions/gradients.rb
|
56
|
+
- tasks/doohickey_tasks.rake
|
57
|
+
- test/doohickey_test.rb
|
58
|
+
- test/test_helper.rb
|
59
|
+
- uninstall.rb
|
60
|
+
has_rdoc: true
|
61
|
+
homepage: http://github.com/tanordheim/doohickey
|
62
|
+
licenses: []
|
63
|
+
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options:
|
66
|
+
- --charset=UTF-8
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
requirements: []
|
84
|
+
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 1.3.6
|
87
|
+
signing_key:
|
88
|
+
specification_version: 3
|
89
|
+
summary: Easy to use SASS mixins for Rails projects
|
90
|
+
test_files:
|
91
|
+
- test/test_helper.rb
|
92
|
+
- test/doohickey_test.rb
|