compass 0.11.alpha.4 → 0.11.beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/VERSION.yml +2 -2
- data/examples/blueprint_plugins/src/link_icons.scss +1 -1
- data/examples/blueprint_semantic/src/liquid.scss +3 -3
- data/examples/blueprint_semantic/src/screen.scss +4 -4
- data/examples/compass/config.rb +1 -0
- data/examples/compass/images/emblem-a043c4f148.png +0 -0
- data/examples/compass/images/emblem/favorite.png +0 -0
- data/examples/compass/images/emblem/important.png +0 -0
- data/examples/compass/images/emblem/photos.png +0 -0
- data/examples/compass/images/emblem/readonly.png +0 -0
- data/examples/compass/images/emblem/symbolic-link.png +0 -0
- data/examples/compass/images/emblem/system.png +0 -0
- data/examples/compass/images/emblem/unreadable.png +0 -0
- data/examples/compass/images/flag-03c3b29b35.png +0 -0
- data/examples/compass/images/flag-21cfbfbfc8.png +0 -0
- data/examples/compass/images/flag/ad.png +0 -0
- data/examples/compass/images/flag/ae.png +0 -0
- data/examples/compass/images/flag/af.png +0 -0
- data/examples/compass/images/flag/ag.png +0 -0
- data/examples/compass/images/flag/ai.png +0 -0
- data/examples/compass/images/flag/al.png +0 -0
- data/examples/compass/images/flag/am.png +0 -0
- data/examples/compass/images/flag/an.png +0 -0
- data/examples/compass/images/flag/ao.png +0 -0
- data/examples/compass/images/flag/ar.png +0 -0
- data/examples/compass/images/flag/as.png +0 -0
- data/examples/compass/images/flag/at.png +0 -0
- data/examples/compass/images/flag/au.png +0 -0
- data/examples/compass/images/flag/aw.png +0 -0
- data/examples/compass/images/flag/ax.png +0 -0
- data/examples/compass/images/flag/az.png +0 -0
- data/examples/compass/images/flag/ba.png +0 -0
- data/examples/compass/images/flag/bb.png +0 -0
- data/examples/compass/images/flag/bd.png +0 -0
- data/examples/compass/images/flag/be.png +0 -0
- data/examples/compass/images/flag/bf.png +0 -0
- data/examples/compass/images/flag/bg.png +0 -0
- data/examples/compass/images/flag/bh.png +0 -0
- data/examples/compass/images/flag/bi.png +0 -0
- data/examples/compass/images/flag/bj.png +0 -0
- data/examples/compass/images/flag/bm.png +0 -0
- data/examples/compass/images/flag/bn.png +0 -0
- data/examples/compass/images/flag/bo.png +0 -0
- data/examples/compass/images/flag/br.png +0 -0
- data/examples/compass/images/flag/bs.png +0 -0
- data/examples/compass/images/flag/bt.png +0 -0
- data/examples/compass/images/flag/bv.png +0 -0
- data/examples/compass/images/flag/bw.png +0 -0
- data/examples/compass/images/flag/by.png +0 -0
- data/examples/compass/images/flag/bz.png +0 -0
- data/examples/compass/images/flag/ca.png +0 -0
- data/examples/compass/images/flag/catalonia.png +0 -0
- data/examples/compass/images/flag/cc.png +0 -0
- data/examples/compass/images/flag/cd.png +0 -0
- data/examples/compass/images/flag/cf.png +0 -0
- data/examples/compass/images/flag/cg.png +0 -0
- data/examples/compass/images/flag/ch.png +0 -0
- data/examples/compass/images/flag/ci.png +0 -0
- data/examples/compass/images/flag/ck.png +0 -0
- data/examples/compass/images/flag/cl.png +0 -0
- data/examples/compass/images/flag/cm.png +0 -0
- data/examples/compass/images/flag/cn.png +0 -0
- data/examples/compass/images/flag/co.png +0 -0
- data/examples/compass/images/flag/cr.png +0 -0
- data/examples/compass/images/flag/cs.png +0 -0
- data/examples/compass/images/flag/cu.png +0 -0
- data/examples/compass/images/flag/cv.png +0 -0
- data/examples/compass/images/flag/cx.png +0 -0
- data/examples/compass/images/flag/cy.png +0 -0
- data/examples/compass/images/flag/cz.png +0 -0
- data/examples/compass/images/flag/de.png +0 -0
- data/examples/compass/images/flag/dj.png +0 -0
- data/examples/compass/images/flag/dk.png +0 -0
- data/examples/compass/images/flag/dm.png +0 -0
- data/examples/compass/images/flag/do.png +0 -0
- data/examples/compass/images/flag/dz.png +0 -0
- data/examples/compass/images/flag/ec.png +0 -0
- data/examples/compass/images/flag/ee.png +0 -0
- data/examples/compass/images/flag/eg.png +0 -0
- data/examples/compass/images/flag/eh.png +0 -0
- data/examples/compass/images/flag/england.png +0 -0
- data/examples/compass/images/flag/er.png +0 -0
- data/examples/compass/images/flag/es.png +0 -0
- data/examples/compass/images/flag/et.png +0 -0
- data/examples/compass/images/flag/europeanunion.png +0 -0
- data/examples/compass/images/flag/fam.png +0 -0
- data/examples/compass/images/flag/fi.png +0 -0
- data/examples/compass/images/flag/fj.png +0 -0
- data/examples/compass/images/flag/fk.png +0 -0
- data/examples/compass/images/flag/fm.png +0 -0
- data/examples/compass/images/flag/fo.png +0 -0
- data/examples/compass/images/flag/fr.png +0 -0
- data/examples/compass/images/flag/ga.png +0 -0
- data/examples/compass/images/flag/gb.png +0 -0
- data/examples/compass/images/flag/gd.png +0 -0
- data/examples/compass/images/flag/ge.png +0 -0
- data/examples/compass/images/flag/gf.png +0 -0
- data/examples/compass/images/flag/gh.png +0 -0
- data/examples/compass/images/flag/gi.png +0 -0
- data/examples/compass/images/flag/gl.png +0 -0
- data/examples/compass/images/flag/gm.png +0 -0
- data/examples/compass/images/flag/gn.png +0 -0
- data/examples/compass/images/flag/gp.png +0 -0
- data/examples/compass/images/flag/gq.png +0 -0
- data/examples/compass/images/flag/gr.png +0 -0
- data/examples/compass/images/flag/gs.png +0 -0
- data/examples/compass/images/flag/gt.png +0 -0
- data/examples/compass/images/flag/gu.png +0 -0
- data/examples/compass/images/flag/gw.png +0 -0
- data/examples/compass/images/flag/gy.png +0 -0
- data/examples/compass/images/flag/hk.png +0 -0
- data/examples/compass/images/flag/hm.png +0 -0
- data/examples/compass/images/flag/hn.png +0 -0
- data/examples/compass/images/flag/hr.png +0 -0
- data/examples/compass/images/flag/ht.png +0 -0
- data/examples/compass/images/flag/hu.png +0 -0
- data/examples/compass/images/flag/id-2.png +0 -0
- data/examples/compass/images/flag/ie.png +0 -0
- data/examples/compass/images/flag/il.png +0 -0
- data/examples/compass/images/flag/in.png +0 -0
- data/examples/compass/images/flag/io.png +0 -0
- data/examples/compass/images/flag/iq.png +0 -0
- data/examples/compass/images/flag/ir.png +0 -0
- data/examples/compass/images/flag/is.png +0 -0
- data/examples/compass/images/flag/it.png +0 -0
- data/examples/compass/images/flag/jm.png +0 -0
- data/examples/compass/images/flag/jo.png +0 -0
- data/examples/compass/images/flag/jp.png +0 -0
- data/examples/compass/images/flag/ke.png +0 -0
- data/examples/compass/images/flag/kg.png +0 -0
- data/examples/compass/images/flag/kh.png +0 -0
- data/examples/compass/images/flag/ki.png +0 -0
- data/examples/compass/images/flag/km.png +0 -0
- data/examples/compass/images/flag/kn.png +0 -0
- data/examples/compass/images/flag/kp.png +0 -0
- data/examples/compass/images/flag/kr.png +0 -0
- data/examples/compass/images/flag/kw.png +0 -0
- data/examples/compass/images/flag/ky.png +0 -0
- data/examples/compass/images/flag/kz.png +0 -0
- data/examples/compass/images/flag/la.png +0 -0
- data/examples/compass/images/flag/lb.png +0 -0
- data/examples/compass/images/flag/lc.png +0 -0
- data/examples/compass/images/flag/li.png +0 -0
- data/examples/compass/images/flag/lk.png +0 -0
- data/examples/compass/images/flag/lr.png +0 -0
- data/examples/compass/images/flag/ls.png +0 -0
- data/examples/compass/images/flag/lt.png +0 -0
- data/examples/compass/images/flag/lu.png +0 -0
- data/examples/compass/images/flag/lv.png +0 -0
- data/examples/compass/images/flag/ly.png +0 -0
- data/examples/compass/images/flag/ma.png +0 -0
- data/examples/compass/images/flag/mc.png +0 -0
- data/examples/compass/images/flag/md.png +0 -0
- data/examples/compass/images/flag/me.png +0 -0
- data/examples/compass/images/flag/mg.png +0 -0
- data/examples/compass/images/flag/mh.png +0 -0
- data/examples/compass/images/flag/mk.png +0 -0
- data/examples/compass/images/flag/ml.png +0 -0
- data/examples/compass/images/flag/mm.png +0 -0
- data/examples/compass/images/flag/mn.png +0 -0
- data/examples/compass/images/flag/mo.png +0 -0
- data/examples/compass/images/flag/mp.png +0 -0
- data/examples/compass/images/flag/mq.png +0 -0
- data/examples/compass/images/flag/mr.png +0 -0
- data/examples/compass/images/flag/ms.png +0 -0
- data/examples/compass/images/flag/mt.png +0 -0
- data/examples/compass/images/flag/mu.png +0 -0
- data/examples/compass/images/flag/mv.png +0 -0
- data/examples/compass/images/flag/mw.png +0 -0
- data/examples/compass/images/flag/mx.png +0 -0
- data/examples/compass/images/flag/my.png +0 -0
- data/examples/compass/images/flag/mz.png +0 -0
- data/examples/compass/images/flag/na.png +0 -0
- data/examples/compass/images/flag/nc.png +0 -0
- data/examples/compass/images/flag/ne.png +0 -0
- data/examples/compass/images/flag/nf.png +0 -0
- data/examples/compass/images/flag/ng.png +0 -0
- data/examples/compass/images/flag/ni.png +0 -0
- data/examples/compass/images/flag/nl.png +0 -0
- data/examples/compass/images/flag/no.png +0 -0
- data/examples/compass/images/flag/np.png +0 -0
- data/examples/compass/images/flag/nr.png +0 -0
- data/examples/compass/images/flag/nu.png +0 -0
- data/examples/compass/images/flag/nz.png +0 -0
- data/examples/compass/images/flag/om.png +0 -0
- data/examples/compass/images/flag/pa.png +0 -0
- data/examples/compass/images/flag/pe.png +0 -0
- data/examples/compass/images/flag/pf.png +0 -0
- data/examples/compass/images/flag/pg.png +0 -0
- data/examples/compass/images/flag/ph.png +0 -0
- data/examples/compass/images/flag/pk.png +0 -0
- data/examples/compass/images/flag/pl.png +0 -0
- data/examples/compass/images/flag/pm.png +0 -0
- data/examples/compass/images/flag/pn.png +0 -0
- data/examples/compass/images/flag/pr.png +0 -0
- data/examples/compass/images/flag/ps.png +0 -0
- data/examples/compass/images/flag/pt.png +0 -0
- data/examples/compass/images/flag/pw.png +0 -0
- data/examples/compass/images/flag/py.png +0 -0
- data/examples/compass/images/flag/qa.png +0 -0
- data/examples/compass/images/flag/re.png +0 -0
- data/examples/compass/images/flag/ro.png +0 -0
- data/examples/compass/images/flag/rs.png +0 -0
- data/examples/compass/images/flag/ru.png +0 -0
- data/examples/compass/images/flag/rw.png +0 -0
- data/examples/compass/images/flag/sa.png +0 -0
- data/examples/compass/images/flag/sb.png +0 -0
- data/examples/compass/images/flag/sc.png +0 -0
- data/examples/compass/images/flag/scotland.png +0 -0
- data/examples/compass/images/flag/sd.png +0 -0
- data/examples/compass/images/flag/se.png +0 -0
- data/examples/compass/images/flag/sg.png +0 -0
- data/examples/compass/images/flag/sh.png +0 -0
- data/examples/compass/images/flag/si.png +0 -0
- data/examples/compass/images/flag/sj.png +0 -0
- data/examples/compass/images/flag/sk.png +0 -0
- data/examples/compass/images/flag/sl.png +0 -0
- data/examples/compass/images/flag/sm.png +0 -0
- data/examples/compass/images/flag/sn.png +0 -0
- data/examples/compass/images/flag/so.png +0 -0
- data/examples/compass/images/flag/sr.png +0 -0
- data/examples/compass/images/flag/st.png +0 -0
- data/examples/compass/images/flag/sv.png +0 -0
- data/examples/compass/images/flag/sy.png +0 -0
- data/examples/compass/images/flag/sz.png +0 -0
- data/examples/compass/images/flag/tc.png +0 -0
- data/examples/compass/images/flag/td.png +0 -0
- data/examples/compass/images/flag/tf.png +0 -0
- data/examples/compass/images/flag/tg.png +0 -0
- data/examples/compass/images/flag/th.png +0 -0
- data/examples/compass/images/flag/tj.png +0 -0
- data/examples/compass/images/flag/tk.png +0 -0
- data/examples/compass/images/flag/tl.png +0 -0
- data/examples/compass/images/flag/tm.png +0 -0
- data/examples/compass/images/flag/tn.png +0 -0
- data/examples/compass/images/flag/to.png +0 -0
- data/examples/compass/images/flag/tr.png +0 -0
- data/examples/compass/images/flag/tt.png +0 -0
- data/examples/compass/images/flag/tv.png +0 -0
- data/examples/compass/images/flag/tw.png +0 -0
- data/examples/compass/images/flag/tz.png +0 -0
- data/examples/compass/images/flag/ua.png +0 -0
- data/examples/compass/images/flag/ug.png +0 -0
- data/examples/compass/images/flag/um.png +0 -0
- data/examples/compass/images/flag/us.png +0 -0
- data/examples/compass/images/flag/uy.png +0 -0
- data/examples/compass/images/flag/uz.png +0 -0
- data/examples/compass/images/flag/va.png +0 -0
- data/examples/compass/images/flag/vc.png +0 -0
- data/examples/compass/images/flag/ve.png +0 -0
- data/examples/compass/images/flag/vg.png +0 -0
- data/examples/compass/images/flag/vi.png +0 -0
- data/examples/compass/images/flag/vn.png +0 -0
- data/examples/compass/images/flag/vu.png +0 -0
- data/examples/compass/images/flag/wales.png +0 -0
- data/examples/compass/images/flag/wf.png +0 -0
- data/examples/compass/images/flag/ws.png +0 -0
- data/examples/compass/images/flag/ye.png +0 -0
- data/examples/compass/images/flag/yt.png +0 -0
- data/examples/compass/images/flag/za.png +0 -0
- data/examples/compass/images/flag/zm.png +0 -0
- data/examples/compass/images/flag/zw.png +0 -0
- data/examples/compass/sprites.html.haml +37 -0
- data/examples/compass/src/sprites.scss +25 -0
- data/examples/compass/src/sticky_footer.scss +1 -1
- data/examples/compass/src/utilities.scss +1 -1
- data/examples/css3/src/gradients.scss +30 -30
- data/examples/css3/src/main.scss +13 -19
- data/features/rails_integration.feature +32 -0
- data/frameworks/blueprint/stylesheets/blueprint/_grid.scss +16 -9
- data/frameworks/blueprint/stylesheets/blueprint/_liquid.scss +11 -6
- data/frameworks/compass/stylesheets/compass/_support.scss +8 -5
- data/frameworks/compass/stylesheets/compass/css3/_images.scss +6 -2
- data/frameworks/compass/stylesheets/compass/css3/_opacity.scss +6 -11
- data/frameworks/compass/stylesheets/compass/css3/_transform.scss +20 -6
- data/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss +3 -2
- data/lib/compass.rb +1 -1
- data/lib/compass/app_integration/rails.rb +3 -3
- data/lib/compass/app_integration/rails/actionpack2/urls.rb +2 -2
- data/lib/compass/app_integration/rails/actionpack3/railtie.rb +39 -11
- data/lib/compass/app_integration/rails/configuration_defaults.rb +14 -8
- data/lib/compass/browser_support.rb +62 -0
- data/lib/compass/commands/print_version.rb +10 -7
- data/lib/compass/commands/project_base.rb +1 -1
- data/lib/compass/commands/watch_project.rb +17 -0
- data/lib/compass/configuration/data.rb +15 -0
- data/lib/compass/configuration/helpers.rb +7 -8
- data/lib/compass/configuration/inheritance.rb +14 -0
- data/lib/compass/configuration/serialization.rb +8 -4
- data/lib/compass/sass_extensions/functions.rb +2 -1
- data/lib/compass/sass_extensions/functions/colors.rb +2 -3
- data/lib/compass/sass_extensions/functions/cross_browser_support.rb +39 -0
- data/lib/compass/sass_extensions/functions/gradient_support.rb +87 -379
- data/lib/compass/sass_extensions/functions/lists.rb +84 -0
- data/lib/compass/sass_extensions/functions/sprites.rb +4 -2
- data/lib/compass/sass_extensions/monkey_patches.rb +1 -1
- data/lib/compass/sass_extensions/monkey_patches/browser_support.rb +89 -0
- data/lib/compass/sprites.rb +4 -4
- data/test/fixtures/stylesheets/blueprint/css/screen.css +24 -24
- data/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css +24 -24
- data/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css +24 -24
- data/test/fixtures/stylesheets/compass/css/gradients.css +21 -6
- data/test/fixtures/stylesheets/compass/css/opacity.css +4 -0
- data/test/fixtures/stylesheets/compass/css/pie.css +0 -1
- data/test/fixtures/stylesheets/compass/sass/gradients.sass +9 -0
- data/test/fixtures/stylesheets/compass/sass/opacity.scss +5 -0
- data/test/rails_integration_test.rb +3 -3
- metadata +272 -4
|
@@ -28,7 +28,7 @@ module Compass
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def add_project_configuration
|
|
31
|
-
Compass.add_project_configuration(options[:configuration_file]) do
|
|
31
|
+
Compass.add_project_configuration(options[:configuration_file], :defaults => Compass.configuration_for(options, "cli_defaults")) do
|
|
32
32
|
options[:project_type]
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -69,6 +69,23 @@ module Compass
|
|
|
69
69
|
path.create &method(:recompile)
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
|
+
Compass.configuration.watches.each do |glob, callback|
|
|
73
|
+
monitor.path Compass.configuration.project_path do |path|
|
|
74
|
+
path.glob glob
|
|
75
|
+
path.update do |base, relative|
|
|
76
|
+
puts ">>> Change detected to: #{relative}"
|
|
77
|
+
callback.call(base, relative)
|
|
78
|
+
end
|
|
79
|
+
path.create do |base, relative|
|
|
80
|
+
puts ">>> New file detected: #{relative}"
|
|
81
|
+
callback.call(base, relative)
|
|
82
|
+
end
|
|
83
|
+
path.delete do |base, relative|
|
|
84
|
+
puts ">>> File Removed: #{relative}"
|
|
85
|
+
callback.call(base, relative)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
72
89
|
|
|
73
90
|
end
|
|
74
91
|
|
|
@@ -99,6 +99,21 @@ module Compass
|
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
+
def watch(glob, &block)
|
|
103
|
+
@watches ||= []
|
|
104
|
+
@watches << [glob, block]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def watches
|
|
108
|
+
if defined?(@watches)
|
|
109
|
+
@watches
|
|
110
|
+
elsif inherited_data.respond_to?(:watches)
|
|
111
|
+
inherited_data.watches
|
|
112
|
+
else
|
|
113
|
+
[]
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
102
117
|
# Require a compass plugin and capture that it occured so that the configuration serialization works next time.
|
|
103
118
|
def require(lib)
|
|
104
119
|
(self.required_libraries ||= []) << lib
|
|
@@ -27,16 +27,18 @@ module Compass
|
|
|
27
27
|
@configuration = data
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def configuration_for(config, filename = nil)
|
|
31
|
-
if config.
|
|
30
|
+
def configuration_for(config, filename = nil, defaults = nil)
|
|
31
|
+
if config.nil?
|
|
32
|
+
nil
|
|
33
|
+
elsif config.is_a?(Compass::Configuration::Data)
|
|
32
34
|
config
|
|
33
35
|
elsif config.respond_to?(:read)
|
|
34
36
|
filename ||= config.to_s if config.is_a?(Pathname)
|
|
35
|
-
Compass::Configuration::Data.new_from_string(config.read, filename)
|
|
37
|
+
Compass::Configuration::Data.new_from_string(config.read, filename, defaults)
|
|
36
38
|
elsif config.is_a?(Hash)
|
|
37
39
|
Compass::Configuration::Data.new(filename, config)
|
|
38
40
|
elsif config.is_a?(String)
|
|
39
|
-
Compass::Configuration::Data.new_from_file(config)
|
|
41
|
+
Compass::Configuration::Data.new_from_file(config, defaults)
|
|
40
42
|
elsif config.is_a?(Symbol)
|
|
41
43
|
Compass::AppIntegration.lookup(config).configuration
|
|
42
44
|
else
|
|
@@ -74,10 +76,7 @@ module Compass
|
|
|
74
76
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
75
77
|
configuration_file_path = args.shift || detect_configuration_file
|
|
76
78
|
raise ArgumentError, "Too many arguments" if args.any?
|
|
77
|
-
if configuration_file_path
|
|
78
|
-
|
|
79
|
-
data = configuration_for(configuration_file_path)
|
|
80
|
-
|
|
79
|
+
if data = configuration_for(configuration_file_path, nil, configuration_for(options[:defaults]))
|
|
81
80
|
if data.raw_project_type
|
|
82
81
|
add_configuration(data.raw_project_type.to_sym)
|
|
83
82
|
elsif options[:project_type]
|
|
@@ -87,6 +87,16 @@ module Compass
|
|
|
87
87
|
self
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
+
def reset_inheritance!
|
|
91
|
+
self.inherited_data = nil
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def with_defaults(data)
|
|
95
|
+
inherit_from!(data)
|
|
96
|
+
yield
|
|
97
|
+
reset_inheritance!
|
|
98
|
+
end
|
|
99
|
+
|
|
90
100
|
def unset!(attribute)
|
|
91
101
|
@set_attributes ||= {}
|
|
92
102
|
send("#{attribute}=", nil)
|
|
@@ -99,6 +109,10 @@ module Compass
|
|
|
99
109
|
@set_attributes[attribute]
|
|
100
110
|
end
|
|
101
111
|
|
|
112
|
+
def any_attributes_set?
|
|
113
|
+
@set_attributes && @set_attributes.size > 0
|
|
114
|
+
end
|
|
115
|
+
|
|
102
116
|
def default_for(attribute)
|
|
103
117
|
method = "default_#{attribute}".to_sym
|
|
104
118
|
if respond_to?(method)
|
|
@@ -8,15 +8,19 @@ module Compass
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
module ClassMethods
|
|
11
|
-
def new_from_file(config_file)
|
|
11
|
+
def new_from_file(config_file, defaults = nil)
|
|
12
12
|
data = Data.new(config_file)
|
|
13
|
-
data.
|
|
13
|
+
data.with_defaults(defaults) do
|
|
14
|
+
data._parse(config_file)
|
|
15
|
+
end
|
|
14
16
|
data
|
|
15
17
|
end
|
|
16
18
|
|
|
17
|
-
def new_from_string(contents, filename)
|
|
19
|
+
def new_from_string(contents, filename, defaults = nil)
|
|
18
20
|
data = Data.new(filename)
|
|
19
|
-
data.
|
|
21
|
+
data.with_defaults(defaults) do
|
|
22
|
+
data.parse_string(contents, filename)
|
|
23
|
+
end
|
|
20
24
|
data
|
|
21
25
|
end
|
|
22
26
|
end
|
|
@@ -4,7 +4,7 @@ end
|
|
|
4
4
|
%w(
|
|
5
5
|
selectors enumerate urls display
|
|
6
6
|
inline_image image_size constants gradient_support
|
|
7
|
-
font_files lists colors trig sprites
|
|
7
|
+
font_files lists colors trig sprites cross_browser_support
|
|
8
8
|
).each do |func|
|
|
9
9
|
require "compass/sass_extensions/functions/#{func}"
|
|
10
10
|
end
|
|
@@ -23,6 +23,7 @@ module Sass::Script::Functions
|
|
|
23
23
|
include Compass::SassExtensions::Functions::Colors
|
|
24
24
|
include Compass::SassExtensions::Functions::Trig
|
|
25
25
|
include Compass::SassExtensions::Functions::Sprites
|
|
26
|
+
include Compass::SassExtensions::Functions::CrossBrowserSupport
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
# Wierd that this has to be re-included to pick up sub-modules. Ruby bug?
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
module Compass::SassExtensions::Functions::Colors
|
|
2
|
-
include Compass::Util
|
|
3
2
|
|
|
4
3
|
# a genericized version of lighten/darken so that negative values can be used.
|
|
5
4
|
def adjust_lightness(color, amount)
|
|
6
5
|
assert_type color, :Color
|
|
7
6
|
assert_type amount, :Number
|
|
8
|
-
color.with(:lightness => restrict(color.lightness + amount.value, 0..100))
|
|
7
|
+
color.with(:lightness => Compass::Util.restrict(color.lightness + amount.value, 0..100))
|
|
9
8
|
end
|
|
10
9
|
|
|
11
10
|
# Scales a color's lightness by some percentage.
|
|
@@ -21,7 +20,7 @@ module Compass::SassExtensions::Functions::Colors
|
|
|
21
20
|
def adjust_saturation(color, amount)
|
|
22
21
|
assert_type color, :Color
|
|
23
22
|
assert_type amount, :Number
|
|
24
|
-
color.with(:saturation => restrict(color.saturation + amount.value, 0..100))
|
|
23
|
+
color.with(:saturation => Compass::Util.restrict(color.saturation + amount.value, 0..100))
|
|
25
24
|
end
|
|
26
25
|
|
|
27
26
|
# Scales a color's saturation by some percentage.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Compass::SassExtensions::Functions::CrossBrowserSupport
|
|
2
|
+
# Check if any of the arguments passed require a vendor prefix.
|
|
3
|
+
def prefixed(prefix, *args)
|
|
4
|
+
aspect = prefix.value.sub(/^-/,"")
|
|
5
|
+
needed = args.any?{|a| a.respond_to?(:supports?) && a.supports?(aspect)}
|
|
6
|
+
Sass::Script::Bool.new(needed)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
%w(webkit moz o ms svg pie css2).each do |prefix|
|
|
10
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
11
|
+
# Syntactic sugar to apply the given prefix
|
|
12
|
+
# -moz($arg) is the same as calling prefix(-moz, $arg)
|
|
13
|
+
def _#{prefix}(*args)
|
|
14
|
+
prefix("#{prefix}", *args)
|
|
15
|
+
end
|
|
16
|
+
RUBY
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def prefix(prefix, *objects)
|
|
20
|
+
prefix = prefix.value if prefix.is_a?(Sass::Script::String)
|
|
21
|
+
prefix = prefix[1..-1] if prefix[0] == ?-
|
|
22
|
+
if objects.size > 1
|
|
23
|
+
self.prefix(prefix, Sass::Script::List.new(objects, :comma))
|
|
24
|
+
else
|
|
25
|
+
object = objects.first
|
|
26
|
+
if object.is_a?(Sass::Script::List)
|
|
27
|
+
Sass::Script::List.new(object.value.map{|e|
|
|
28
|
+
self.prefix(prefix, e)
|
|
29
|
+
}, object.separator)
|
|
30
|
+
elsif object.respond_to?(:supports?) && object.supports?(prefix) && object.respond_to?(:"to_#{prefix}")
|
|
31
|
+
object.options = options
|
|
32
|
+
object.send(:"to_#{prefix}")
|
|
33
|
+
else
|
|
34
|
+
object
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -1,322 +1,6 @@
|
|
|
1
1
|
module Compass::SassExtensions::Functions::GradientSupport
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
class List < Sass::Script::Literal
|
|
5
|
-
attr_accessor :values
|
|
6
|
-
def children
|
|
7
|
-
values
|
|
8
|
-
end
|
|
9
|
-
def value
|
|
10
|
-
# duck type to a Sass List
|
|
11
|
-
values
|
|
12
|
-
end
|
|
13
|
-
def initialize(*values)
|
|
14
|
-
self.values = values
|
|
15
|
-
end
|
|
16
|
-
def join_with
|
|
17
|
-
", "
|
|
18
|
-
end
|
|
19
|
-
def inspect
|
|
20
|
-
to_s
|
|
21
|
-
end
|
|
22
|
-
def to_s(options = self.options)
|
|
23
|
-
values.map {|v| v.to_s }.join(join_with)
|
|
24
|
-
end
|
|
25
|
-
def size
|
|
26
|
-
values.size
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
class SpaceList < List
|
|
31
|
-
def join_with
|
|
32
|
-
" "
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# given a position list, return a corresponding position in percents
|
|
37
|
-
def grad_point(position)
|
|
38
|
-
position = position.is_a?(Sass::Script::String) ? position.value : position.to_s
|
|
39
|
-
position = if position[" "]
|
|
40
|
-
if position =~ /(top|bottom|center) (left|right|center)/
|
|
41
|
-
"#{$2} #{$1}"
|
|
42
|
-
else
|
|
43
|
-
position
|
|
44
|
-
end
|
|
45
|
-
else
|
|
46
|
-
case position
|
|
47
|
-
when /top|bottom/
|
|
48
|
-
"center #{position}"
|
|
49
|
-
when /left|right/
|
|
50
|
-
"#{position} center"
|
|
51
|
-
when /center/
|
|
52
|
-
"center center"
|
|
53
|
-
else
|
|
54
|
-
"#{position} center"
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
position = position.
|
|
58
|
-
gsub(/top/, "0%").
|
|
59
|
-
gsub(/bottom/, "100%").
|
|
60
|
-
gsub(/left/,"0%").
|
|
61
|
-
gsub(/right/,"100%").
|
|
62
|
-
gsub(/center/, "50%")
|
|
63
|
-
SpaceList.new(*position.split(/ /).map{|s| Sass::Script::String.new(s)})
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def color_stops(*args)
|
|
67
|
-
List.new(*args.map do |arg|
|
|
68
|
-
case arg
|
|
69
|
-
when ColorStop
|
|
70
|
-
arg
|
|
71
|
-
when Sass::Script::Color
|
|
72
|
-
ColorStop.new(arg)
|
|
73
|
-
when Sass::Script::String
|
|
74
|
-
# We get a string as the result of concatenation
|
|
75
|
-
# So we have to reparse the expression
|
|
76
|
-
parse_color_stop(arg)
|
|
77
|
-
else
|
|
78
|
-
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
|
79
|
-
end
|
|
80
|
-
end)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Returns a comma-delimited list after removing any non-true values
|
|
84
|
-
def compact(*args)
|
|
85
|
-
List.new(*args.reject{|a| !a.to_bool})
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# Returns a list object from a value that was passed.
|
|
89
|
-
# This can be used to unpack a space separated list that got turned
|
|
90
|
-
# into a string by sass before it was passed to a mixin.
|
|
91
|
-
def _compass_list(arg)
|
|
92
|
-
return arg if arg.is_a?(List)
|
|
93
|
-
values = case arg
|
|
94
|
-
when Sass::Script::String
|
|
95
|
-
expr = Sass::Script::Parser.parse(arg.value, 0, 0)
|
|
96
|
-
if expr.is_a?(Sass::Script::Operation)
|
|
97
|
-
extract_list_values(expr)
|
|
98
|
-
elsif expr.is_a?(Sass::Script::Funcall)
|
|
99
|
-
expr.perform(Sass::Environment.new) #we already evaluated the args in context so no harm in using a fake env
|
|
100
|
-
else
|
|
101
|
-
[arg]
|
|
102
|
-
end
|
|
103
|
-
else
|
|
104
|
-
[arg]
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
SpaceList.new(*values)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def _compass_space_list(list)
|
|
111
|
-
if list.is_a?(List) && !list.is_a?(SpaceList)
|
|
112
|
-
SpaceList.new(*list.values)
|
|
113
|
-
elsif list.is_a?(SpaceList)
|
|
114
|
-
list
|
|
115
|
-
else
|
|
116
|
-
SpaceList.new(list)
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def _compass_list_size(list)
|
|
121
|
-
Sass::Script::Number.new(list.size)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# slice a sublist from a list
|
|
125
|
-
def _compass_slice(list, start_index, end_index = nil)
|
|
126
|
-
end_index ||= Sass::Script::Number.new(-1)
|
|
127
|
-
start_index = start_index.value
|
|
128
|
-
end_index = end_index.value
|
|
129
|
-
start_index -= 1 unless start_index < 0
|
|
130
|
-
end_index -= 1 unless end_index < 0
|
|
131
|
-
list.class.new *list.values[start_index..end_index]
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# Check if any of the arguments passed have a tendency towards vendor prefixing.
|
|
135
|
-
def prefixed(prefix, *args)
|
|
136
|
-
method = prefix.value.sub(/^-/,"to_").to_sym
|
|
137
|
-
args.map!{|a| a.is_a?(List) ? a.values : a}.flatten!
|
|
138
|
-
Sass::Script::Bool.new(args.any?{|a| a.respond_to?(method)})
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
%w(webkit moz o ms svg pie css2).each do |prefix|
|
|
142
|
-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
143
|
-
def _#{prefix}(*args)
|
|
144
|
-
List.new(*args.map! {|a| add_prefix(:to_#{prefix}, a)})
|
|
145
|
-
end
|
|
146
|
-
RUBY
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
protected
|
|
150
|
-
|
|
151
|
-
def add_prefix(prefix_method, object)
|
|
152
|
-
if object.is_a?(List)
|
|
153
|
-
object.class.new(object.value.map{|e|
|
|
154
|
-
add_prefix(prefix_method, e)
|
|
155
|
-
})
|
|
156
|
-
elsif object.respond_to?(prefix_method)
|
|
157
|
-
object.options = options
|
|
158
|
-
object.send(prefix_method)
|
|
159
|
-
else
|
|
160
|
-
object
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
def color_stop?(arg)
|
|
165
|
-
parse_color_stop(arg)
|
|
166
|
-
rescue
|
|
167
|
-
nil
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def assert_list(value)
|
|
171
|
-
unless value.is_a?(List)
|
|
172
|
-
raise ArgumentError.new("#{value.inspect} is not a list")
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
module ListBasedSassSupport
|
|
179
|
-
# given a position list, return a corresponding position in percents
|
|
180
|
-
def grad_point(position)
|
|
181
|
-
position = unless position.is_a?(Sass::Script::List)
|
|
182
|
-
Sass::Script::List.new([position], :space)
|
|
183
|
-
else
|
|
184
|
-
Sass::Script::List.new(position.value.dup, position.separator)
|
|
185
|
-
end
|
|
186
|
-
position.value.reject!{|p| p.is_a?(Sass::Script::Number) && p.numerator_units.include?("deg")}
|
|
187
|
-
if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/)
|
|
188
|
-
# browsers are pretty forgiving of reversed positions so we are too.
|
|
189
|
-
position.value.reverse!
|
|
190
|
-
end
|
|
191
|
-
if position.value.size == 1
|
|
192
|
-
if position.value.first.value =~ /top|bottom/
|
|
193
|
-
position.value.unshift Sass::Script::String.new("center")
|
|
194
|
-
elsif position.value.first.value =~ /left|right/
|
|
195
|
-
position.value.push Sass::Script::String.new("center")
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
position.value.map! do |p|
|
|
199
|
-
case p.value
|
|
200
|
-
when /top|left/
|
|
201
|
-
Sass::Script::Number.new(0, ["%"])
|
|
202
|
-
when /bottom|right/
|
|
203
|
-
Sass::Script::Number.new(100, ["%"])
|
|
204
|
-
when /center/
|
|
205
|
-
Sass::Script::Number.new(50, ["%"])
|
|
206
|
-
else
|
|
207
|
-
p
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
position
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
def color_stops(*args)
|
|
214
|
-
Sass::Script::List.new(args.map do |arg|
|
|
215
|
-
case arg
|
|
216
|
-
when ColorStop
|
|
217
|
-
arg
|
|
218
|
-
when Sass::Script::Color
|
|
219
|
-
ColorStop.new(arg)
|
|
220
|
-
when Sass::Script::List
|
|
221
|
-
ColorStop.new(*arg.value)
|
|
222
|
-
else
|
|
223
|
-
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
|
224
|
-
end
|
|
225
|
-
end, :comma)
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
# Returns a comma-delimited list after removing any non-true values
|
|
229
|
-
def compact(*args)
|
|
230
|
-
sep = :comma
|
|
231
|
-
if args.size == 1 && args.first.is_a?(Sass::Script::List)
|
|
232
|
-
args = args.first.value
|
|
233
|
-
sep = args.first.separator
|
|
234
|
-
end
|
|
235
|
-
Sass::Script::List.new(args.reject{|a| !a.to_bool}, sep)
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
# Returns a list object from a value that was passed.
|
|
239
|
-
# This can be used to unpack a space separated list that got turned
|
|
240
|
-
# into a string by sass before it was passed to a mixin.
|
|
241
|
-
def _compass_list(arg)
|
|
242
|
-
if arg.is_a?(Sass::Script::List)
|
|
243
|
-
Sass::Script::List.new(arg.value.dup, arg.separator)
|
|
244
|
-
else
|
|
245
|
-
Sass::Script::List.new([arg], :space)
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
def _compass_space_list(list)
|
|
250
|
-
if list.is_a?(Sass::Script::List)
|
|
251
|
-
Sass::Script::List.new(list.value.dup, :space)
|
|
252
|
-
else
|
|
253
|
-
Sass::Script::List.new([list], :space)
|
|
254
|
-
end
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
def _compass_list_size(list)
|
|
258
|
-
assert_list list
|
|
259
|
-
Sass::Script::Number.new(list.value.size)
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
# slice a sublist from a list
|
|
263
|
-
def _compass_slice(list, start_index, end_index = nil)
|
|
264
|
-
end_index ||= Sass::Script::Number.new(-1)
|
|
265
|
-
start_index = start_index.value
|
|
266
|
-
end_index = end_index.value
|
|
267
|
-
start_index -= 1 unless start_index < 0
|
|
268
|
-
end_index -= 1 unless end_index < 0
|
|
269
|
-
Sass::Script::List.new list.values[start_index..end_index], list.separator
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
# Check if any of the arguments passed have a tendency towards vendor prefixing.
|
|
273
|
-
def prefixed(prefix, *args)
|
|
274
|
-
method = prefix.value.sub(/^-/,"to_").to_sym
|
|
275
|
-
2.times do
|
|
276
|
-
args.map!{|a| a.is_a?(Sass::Script::List) ? a.value : a}.flatten!
|
|
277
|
-
end
|
|
278
|
-
Sass::Script::Bool.new(args.any?{|a| a.respond_to?(method)})
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
%w(webkit moz o ms svg pie css2).each do |prefix|
|
|
282
|
-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
283
|
-
def _#{prefix}(*args)
|
|
284
|
-
Sass::Script::List.new(args.map! {|a| add_prefix(:to_#{prefix}, a)}, :comma)
|
|
285
|
-
end
|
|
286
|
-
RUBY
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
protected
|
|
290
|
-
|
|
291
|
-
def add_prefix(prefix_method, object)
|
|
292
|
-
if object.is_a?(Sass::Script::List)
|
|
293
|
-
Sass::Script::List.new(object.value.map{|e|
|
|
294
|
-
add_prefix(prefix_method, e)
|
|
295
|
-
}, object.separator)
|
|
296
|
-
elsif object.respond_to?(prefix_method)
|
|
297
|
-
object.options = options
|
|
298
|
-
object.send(prefix_method)
|
|
299
|
-
else
|
|
300
|
-
object
|
|
301
|
-
end
|
|
302
|
-
end
|
|
303
|
-
|
|
304
|
-
def color_stop?(arg)
|
|
305
|
-
arg.is_a?(ColorStop) ||
|
|
306
|
-
(arg.is_a?(Sass::Script::List) && ColorStop.new(*arg.value)) ||
|
|
307
|
-
ColorStop.new(arg)
|
|
308
|
-
rescue
|
|
309
|
-
nil
|
|
310
|
-
end
|
|
311
|
-
|
|
312
|
-
def assert_list(value)
|
|
313
|
-
unless value.is_a?(Sass::Script::List)
|
|
314
|
-
raise ArgumentError.new("#{value.inspect} is not a list")
|
|
315
|
-
end
|
|
316
|
-
end
|
|
317
|
-
|
|
318
|
-
end
|
|
319
|
-
|
|
3
|
+
GRADIENT_ASPECTS = %w(webkit moz svg pie css2).freeze
|
|
320
4
|
|
|
321
5
|
class ColorStop < Sass::Script::Literal
|
|
322
6
|
attr_accessor :color, :stop
|
|
@@ -372,6 +56,12 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
|
372
56
|
s << color_stops.to_s(options)
|
|
373
57
|
s << ")"
|
|
374
58
|
end
|
|
59
|
+
def supports?(aspect)
|
|
60
|
+
GRADIENT_ASPECTS.include?(aspect)
|
|
61
|
+
end
|
|
62
|
+
def has_aspect?
|
|
63
|
+
true
|
|
64
|
+
end
|
|
375
65
|
def to_webkit(options = self.options)
|
|
376
66
|
args = [
|
|
377
67
|
grad_point(position_and_angle || _center_position),
|
|
@@ -421,6 +111,12 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
|
421
111
|
s << color_stops.to_s(options)
|
|
422
112
|
s << ")"
|
|
423
113
|
end
|
|
114
|
+
def supports?(aspect)
|
|
115
|
+
GRADIENT_ASPECTS.include?(aspect)
|
|
116
|
+
end
|
|
117
|
+
def has_aspect?
|
|
118
|
+
true
|
|
119
|
+
end
|
|
424
120
|
def to_webkit(options = self.options)
|
|
425
121
|
args = []
|
|
426
122
|
args << grad_point(position_and_angle || Sass::Script::String.new("top"))
|
|
@@ -447,11 +143,53 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
|
447
143
|
|
|
448
144
|
module Functions
|
|
449
145
|
|
|
450
|
-
#
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
146
|
+
# given a position list, return a corresponding position in percents
|
|
147
|
+
def grad_point(position)
|
|
148
|
+
position = unless position.is_a?(Sass::Script::List)
|
|
149
|
+
Sass::Script::List.new([position], :space)
|
|
150
|
+
else
|
|
151
|
+
Sass::Script::List.new(position.value.dup, position.separator)
|
|
152
|
+
end
|
|
153
|
+
position.value.reject!{|p| p.is_a?(Sass::Script::Number) && p.numerator_units.include?("deg")}
|
|
154
|
+
if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/)
|
|
155
|
+
# browsers are pretty forgiving of reversed positions so we are too.
|
|
156
|
+
position.value.reverse!
|
|
157
|
+
end
|
|
158
|
+
if position.value.size == 1
|
|
159
|
+
if position.value.first.value =~ /top|bottom/
|
|
160
|
+
position.value.unshift Sass::Script::String.new("center")
|
|
161
|
+
elsif position.value.first.value =~ /left|right/
|
|
162
|
+
position.value.push Sass::Script::String.new("center")
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
position.value.map! do |p|
|
|
166
|
+
case p.value
|
|
167
|
+
when /top|left/
|
|
168
|
+
Sass::Script::Number.new(0, ["%"])
|
|
169
|
+
when /bottom|right/
|
|
170
|
+
Sass::Script::Number.new(100, ["%"])
|
|
171
|
+
when /center/
|
|
172
|
+
Sass::Script::Number.new(50, ["%"])
|
|
173
|
+
else
|
|
174
|
+
p
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
position
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def color_stops(*args)
|
|
181
|
+
Sass::Script::List.new(args.map do |arg|
|
|
182
|
+
case arg
|
|
183
|
+
when ColorStop
|
|
184
|
+
arg
|
|
185
|
+
when Sass::Script::Color
|
|
186
|
+
ColorStop.new(arg)
|
|
187
|
+
when Sass::Script::List
|
|
188
|
+
ColorStop.new(*arg.value)
|
|
189
|
+
else
|
|
190
|
+
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
|
191
|
+
end
|
|
192
|
+
end, :comma)
|
|
455
193
|
end
|
|
456
194
|
|
|
457
195
|
def radial_gradient(position_and_angle, shape_and_size, *color_stops)
|
|
@@ -508,7 +246,7 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
|
508
246
|
end
|
|
509
247
|
|
|
510
248
|
def color_stops_in_percentages(color_list)
|
|
511
|
-
|
|
249
|
+
assert_type color_list, :List
|
|
512
250
|
color_list = normalize_stops(color_list)
|
|
513
251
|
max = color_list.value.last.stop
|
|
514
252
|
last_value = nil
|
|
@@ -527,13 +265,13 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
|
527
265
|
|
|
528
266
|
# returns the end position of the gradient from the color stop
|
|
529
267
|
def grad_end_position(color_list, radial = Sass::Script::Bool.new(false))
|
|
530
|
-
|
|
268
|
+
assert_type color_list, :List
|
|
531
269
|
default = Sass::Script::Number.new(100)
|
|
532
270
|
grad_position(color_list, Sass::Script::Number.new(color_list.value.size), default, radial)
|
|
533
271
|
end
|
|
534
272
|
|
|
535
273
|
def grad_position(color_list, index, default, radial = Sass::Script::Bool.new(false))
|
|
536
|
-
|
|
274
|
+
assert_type color_list, :List
|
|
537
275
|
stop = color_list.value[index.value - 1].stop
|
|
538
276
|
if stop && radial.to_bool
|
|
539
277
|
orig_stop = stop
|
|
@@ -576,55 +314,16 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
|
576
314
|
inline_image_string(svg.gsub(/\s+/, ' '), 'image/svg+xml')
|
|
577
315
|
end
|
|
578
316
|
|
|
579
|
-
# Get the nth value from a list
|
|
580
|
-
def _compass_nth(list, place)
|
|
581
|
-
assert_list list
|
|
582
|
-
if place.value == "first"
|
|
583
|
-
list.value.first
|
|
584
|
-
elsif place.value == "last"
|
|
585
|
-
list.value.last
|
|
586
|
-
else
|
|
587
|
-
list.value[place.value - 1]
|
|
588
|
-
end
|
|
589
|
-
end
|
|
590
|
-
|
|
591
|
-
def blank(obj)
|
|
592
|
-
case obj
|
|
593
|
-
when Sass::Script::Bool
|
|
594
|
-
Sass::Script::Bool.new !obj.to_bool
|
|
595
|
-
when Sass::Script::String
|
|
596
|
-
Sass::Script::Bool.new obj.value.strip.size == 0
|
|
597
|
-
when Sass::Script::List
|
|
598
|
-
Sass::Script::Bool.new obj.value.size == 0 || obj.value.all?{|el| blank(el).to_bool}
|
|
599
|
-
else
|
|
600
|
-
Sass::Script::Bool.new false
|
|
601
|
-
end
|
|
602
|
-
end
|
|
603
|
-
|
|
604
317
|
private
|
|
605
318
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
right = extract_list_values(right) if right.is_a?(Sass::Script::Operation)
|
|
613
|
-
left = literalize(left) unless left.is_a?(Array)
|
|
614
|
-
right = literalize(right) unless right.is_a?(Array)
|
|
615
|
-
Array(left) + Array(right)
|
|
616
|
-
end
|
|
617
|
-
# Makes a literal from other various script nodes.
|
|
618
|
-
def literalize(node)
|
|
619
|
-
case node
|
|
620
|
-
when Sass::Script::Literal
|
|
621
|
-
node
|
|
622
|
-
when Sass::Script::Funcall
|
|
623
|
-
node.perform(Sass::Environment.new)
|
|
624
|
-
else
|
|
625
|
-
Sass::Script::String.new(node.to_s)
|
|
626
|
-
end
|
|
319
|
+
def color_stop?(arg)
|
|
320
|
+
arg.is_a?(ColorStop) ||
|
|
321
|
+
(arg.is_a?(Sass::Script::List) && ColorStop.new(*arg.value)) ||
|
|
322
|
+
ColorStop.new(arg)
|
|
323
|
+
rescue
|
|
324
|
+
nil
|
|
627
325
|
end
|
|
326
|
+
|
|
628
327
|
def normalize_stops(color_list)
|
|
629
328
|
positions = color_list.value.map{|obj| obj.dup}
|
|
630
329
|
# fill in the start and end positions, if unspecified
|
|
@@ -715,23 +414,32 @@ EOS
|
|
|
715
414
|
end
|
|
716
415
|
|
|
717
416
|
def _center_position
|
|
718
|
-
|
|
719
|
-
Sass::Script::
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
],:space)
|
|
723
|
-
else
|
|
724
|
-
Sass::Script::String.new("center center")
|
|
725
|
-
end
|
|
417
|
+
Sass::Script::List.new([
|
|
418
|
+
Sass::Script::String.new("center"),
|
|
419
|
+
Sass::Script::String.new("center")
|
|
420
|
+
],:space)
|
|
726
421
|
end
|
|
727
422
|
|
|
728
423
|
end
|
|
424
|
+
|
|
425
|
+
module Assertions
|
|
426
|
+
def assert_type(value, type, name = nil)
|
|
427
|
+
return if value.is_a?(Sass::Script.const_get(type))
|
|
428
|
+
err = "#{value.inspect} is not a #{type.to_s.downcase}"
|
|
429
|
+
err = "$#{name}: " + err if name
|
|
430
|
+
raise ArgumentError.new(err)
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
|
|
729
434
|
class LinearGradient < Sass::Script::Literal
|
|
435
|
+
include Assertions
|
|
730
436
|
include Functions
|
|
731
437
|
include Compass::SassExtensions::Functions::Constants
|
|
732
438
|
include Compass::SassExtensions::Functions::InlineImage
|
|
733
439
|
end
|
|
440
|
+
|
|
734
441
|
class RadialGradient < Sass::Script::Literal
|
|
442
|
+
include Assertions
|
|
735
443
|
include Functions
|
|
736
444
|
include Compass::SassExtensions::Functions::Constants
|
|
737
445
|
include Compass::SassExtensions::Functions::InlineImage
|