stylus-source 0.15.4 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/lib/stylus/source.rb +1 -1
- data/stylus-source.gemspec +2 -2
- data/vendor/History.md +525 -0
- data/vendor/LICENSE +22 -0
- data/vendor/Makefile +20 -0
- data/vendor/Readme.md +127 -0
- data/vendor/bin/stylus +606 -0
- data/vendor/bm.js +22 -0
- data/vendor/docs/bifs.md +582 -0
- data/vendor/docs/comments.md +35 -0
- data/vendor/docs/compare.md +81 -0
- data/vendor/docs/conditionals.md +107 -0
- data/vendor/docs/css-style.md +77 -0
- data/vendor/docs/error-reporting.md +50 -0
- data/vendor/docs/escape.md +27 -0
- data/vendor/docs/executable.md +159 -0
- data/vendor/docs/firebug.md +60 -0
- data/vendor/docs/font-face.md +26 -0
- data/vendor/docs/functions.md +192 -0
- data/vendor/docs/functions.url.md +30 -0
- data/vendor/docs/gedit.md +24 -0
- data/vendor/docs/import.md +73 -0
- data/vendor/docs/interpolation.md +55 -0
- data/vendor/docs/introspection.md +39 -0
- data/vendor/docs/iteration.md +100 -0
- data/vendor/docs/js.md +136 -0
- data/vendor/docs/keyframes.md +120 -0
- data/vendor/docs/kwargs.md +35 -0
- data/vendor/docs/literal.md +16 -0
- data/vendor/docs/media.md +18 -0
- data/vendor/docs/middleware.md +73 -0
- data/vendor/docs/mixins.md +130 -0
- data/vendor/docs/operators.md +451 -0
- data/vendor/docs/selectors.md +131 -0
- data/vendor/docs/textmate.md +4 -0
- data/vendor/docs/vargs.md +84 -0
- data/vendor/docs/variables.md +78 -0
- data/vendor/editors/Stylus.tmbundle/Commands/Compile and Display CSS.tmCommand +33 -0
- data/vendor/editors/Stylus.tmbundle/Preferences/Comments.tmPreferences +36 -0
- data/vendor/editors/Stylus.tmbundle/Syntaxes/Stylus.tmLanguage +166 -0
- data/vendor/editors/Stylus.tmbundle/info.plist +10 -0
- data/vendor/editors/gedit/styl.lang +475 -0
- data/vendor/examples/arithmetic.js +12 -0
- data/vendor/examples/arithmetic.styl +29 -0
- data/vendor/examples/basic.js +12 -0
- data/vendor/examples/basic.styl +8 -0
- data/vendor/examples/builtins.js +12 -0
- data/vendor/examples/builtins.styl +56 -0
- data/vendor/examples/comments.js +11 -0
- data/vendor/examples/comments.styl +15 -0
- data/vendor/examples/compress.js +12 -0
- data/vendor/examples/conversions.js +12 -0
- data/vendor/examples/conversions.styl +34 -0
- data/vendor/examples/functions.js +12 -0
- data/vendor/examples/functions.styl +30 -0
- data/vendor/examples/gradients.js +13 -0
- data/vendor/examples/gradients.styl +8 -0
- data/vendor/examples/images/gopher.jpg +0 -0
- data/vendor/examples/images/gradient.svg +9 -0
- data/vendor/examples/images/jesus.gif +0 -0
- data/vendor/examples/images/sprite.gif +0 -0
- data/vendor/examples/images.js +20 -0
- data/vendor/examples/images.styl +15 -0
- data/vendor/examples/implicit-functions.js +12 -0
- data/vendor/examples/implicit-functions.styl +23 -0
- data/vendor/examples/import.js +12 -0
- data/vendor/examples/import.styl +11 -0
- data/vendor/examples/js-functions.js +55 -0
- data/vendor/examples/js-functions.styl +23 -0
- data/vendor/examples/literal.js +12 -0
- data/vendor/examples/literal.styl +8 -0
- data/vendor/examples/middleware.js +23 -0
- data/vendor/examples/mixins/box.styl +14 -0
- data/vendor/examples/mixins/gradients.styl +92 -0
- data/vendor/examples/nesting.js +12 -0
- data/vendor/examples/nesting.styl +14 -0
- data/vendor/examples/variables.js +12 -0
- data/vendor/examples/variables.styl +24 -0
- data/vendor/index.js +2 -0
- data/{lib/stylus → vendor/lib}/colors.js +0 -0
- data/{lib/stylus → vendor/lib}/convert/css.js +0 -0
- data/{lib/stylus → vendor/lib}/errors.js +0 -0
- data/{lib/stylus → vendor/lib}/functions/image.js +0 -0
- data/{lib/stylus → vendor/lib}/functions/index.js +0 -0
- data/{lib/stylus → vendor/lib}/functions/index.styl +11 -2
- data/{lib/stylus → vendor/lib}/functions/url.js +0 -0
- data/{lib/stylus → vendor/lib}/lexer.js +14 -1
- data/{lib/stylus → vendor/lib}/middleware.js +5 -1
- data/{lib/stylus → vendor/lib}/nodes/arguments.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/binop.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/block.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/boolean.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/call.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/charset.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/comment.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/each.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/expression.js +32 -0
- data/{lib/stylus → vendor/lib}/nodes/fontface.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/function.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/group.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/hsla.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/ident.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/if.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/import.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/index.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/jsliteral.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/keyframes.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/literal.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/media.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/node.js +14 -0
- data/{lib/stylus → vendor/lib}/nodes/null.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/page.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/params.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/property.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/return.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/rgba.js +4 -2
- data/{lib/stylus → vendor/lib}/nodes/root.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/selector.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/string.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/ternary.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/unaryop.js +0 -0
- data/{lib/stylus → vendor/lib}/nodes/unit.js +0 -0
- data/{lib/stylus → vendor/lib}/parser.js +17 -2
- data/{lib/stylus → vendor/lib}/renderer.js +0 -0
- data/{lib/stylus → vendor/lib}/stack/frame.js +0 -0
- data/{lib/stylus → vendor/lib}/stack/index.js +0 -0
- data/{lib/stylus → vendor/lib}/stack/scope.js +0 -0
- data/{lib/stylus → vendor/lib}/stylus.js +1 -1
- data/{lib/stylus → vendor/lib}/token.js +0 -0
- data/{lib/stylus → vendor/lib}/utils.js +0 -0
- data/{lib/stylus → vendor/lib}/visitor/compiler.js +1 -0
- data/{lib/stylus → vendor/lib}/visitor/evaluator.js +9 -3
- data/{lib/stylus → vendor/lib}/visitor/index.js +0 -0
- data/{lib → vendor}/node_modules/cssom/Jakefile +0 -0
- data/{lib → vendor}/node_modules/cssom/README.mdown +0 -0
- data/{lib → vendor}/node_modules/cssom/Rakefile +0 -0
- data/{lib → vendor}/node_modules/cssom/docs/bar.css +0 -0
- data/{lib → vendor}/node_modules/cssom/docs/demo.css +0 -0
- data/{lib → vendor}/node_modules/cssom/docs/foo.css +0 -0
- data/{lib → vendor}/node_modules/cssom/docs/parse.html +0 -0
- data/{lib → vendor}/node_modules/cssom/docs/parse2.html +0 -0
- data/{lib → vendor}/node_modules/cssom/index.html +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/CSSImportRule.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/CSSMediaRule.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/CSSOM.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/CSSRule.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/CSSStyleDeclaration.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/CSSStyleRule.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/CSSStyleSheet.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/MediaList.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/StyleSheet.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/clone.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/index.js +0 -0
- data/{lib → vendor}/node_modules/cssom/lib/parse.js +0 -0
- data/{lib → vendor}/node_modules/cssom/media.html +0 -0
- data/{lib → vendor}/node_modules/cssom/package.json +0 -0
- data/{lib → vendor}/node_modules/cssom/plugins/toHTML.js +0 -0
- data/{lib → vendor}/node_modules/cssom/server/index.html +0 -0
- data/{lib → vendor}/node_modules/cssom/server/index.js +0 -0
- data/{lib → vendor}/node_modules/cssom/shorthands.html +0 -0
- data/{lib → vendor}/node_modules/cssom/test/CSSStyleDeclaration.test.js +0 -0
- data/{lib → vendor}/node_modules/cssom/test/CSSStyleRule.test.js +0 -0
- data/{lib → vendor}/node_modules/cssom/test/CSSStyleSheet.test.js +0 -0
- data/{lib → vendor}/node_modules/cssom/test/MediaList.test.js +0 -0
- data/{lib → vendor}/node_modules/cssom/test/clone.test.js +0 -0
- data/{lib → vendor}/node_modules/cssom/test/fixtures/dummy.css +0 -0
- data/{lib → vendor}/node_modules/cssom/test/helper.js +0 -0
- data/{lib → vendor}/node_modules/cssom/test/index.html +0 -0
- data/{lib → vendor}/node_modules/cssom/test/parse.test.js +0 -0
- data/{lib → vendor}/node_modules/cssom/test/vendor/qunit.css +0 -0
- data/{lib → vendor}/node_modules/cssom/test/vendor/qunit.js +0 -0
- data/{lib → vendor}/node_modules/growl/History.md +0 -0
- data/{lib → vendor}/node_modules/growl/Readme.md +0 -0
- data/{lib → vendor}/node_modules/growl/lib/growl.js +0 -0
- data/{lib → vendor}/node_modules/growl/package.json +0 -0
- data/{lib → vendor}/node_modules/growl/test.js +0 -0
- data/vendor/node_modules/mkdirp/LICENSE +21 -0
- data/vendor/node_modules/mkdirp/README.markdown +21 -0
- data/vendor/node_modules/mkdirp/examples/pow.js +6 -0
- data/vendor/node_modules/mkdirp/examples/pow.js.orig +6 -0
- data/vendor/node_modules/mkdirp/examples/pow.js.rej +19 -0
- data/vendor/node_modules/mkdirp/index.js +20 -0
- data/vendor/node_modules/mkdirp/package.json +23 -0
- data/vendor/node_modules/mkdirp/test/mkdirp.js +28 -0
- data/vendor/node_modules/mkdirp/test/race.js +41 -0
- data/vendor/node_modules/mkdirp/test/rel.js +32 -0
- data/vendor/package.json +16 -0
- data/vendor/test/cases/arithmetic.color.css +44 -0
- data/vendor/test/cases/arithmetic.color.styl +48 -0
- data/vendor/test/cases/arithmetic.css +23 -0
- data/vendor/test/cases/arithmetic.styl +30 -0
- data/vendor/test/cases/arithmetic.unary.css +16 -0
- data/vendor/test/cases/arithmetic.unary.styl +16 -0
- data/vendor/test/cases/atscope.css +21 -0
- data/vendor/test/cases/atscope.styl +23 -0
- data/vendor/test/cases/bifs.add-property.css +21 -0
- data/vendor/test/cases/bifs.add-property.styl +48 -0
- data/vendor/test/cases/bifs.components.css +9 -0
- data/vendor/test/cases/bifs.components.styl +9 -0
- data/vendor/test/cases/bifs.dark.css +5 -0
- data/vendor/test/cases/bifs.dark.styl +4 -0
- data/vendor/test/cases/bifs.darken.css +8 -0
- data/vendor/test/cases/bifs.darken.styl +9 -0
- data/vendor/test/cases/bifs.fade.css +6 -0
- data/vendor/test/cases/bifs.fade.styl +6 -0
- data/vendor/test/cases/bifs.image-size.css +9 -0
- data/vendor/test/cases/bifs.image-size.styl +16 -0
- data/vendor/test/cases/bifs.join.css +18 -0
- data/vendor/test/cases/bifs.join.styl +21 -0
- data/vendor/test/cases/bifs.last.css +5 -0
- data/vendor/test/cases/bifs.last.styl +6 -0
- data/vendor/test/cases/bifs.length.css +10 -0
- data/vendor/test/cases/bifs.length.styl +18 -0
- data/vendor/test/cases/bifs.light.css +5 -0
- data/vendor/test/cases/bifs.light.styl +4 -0
- data/vendor/test/cases/bifs.lighten.css +14 -0
- data/vendor/test/cases/bifs.lighten.styl +14 -0
- data/vendor/test/cases/bifs.lookup.css +3 -0
- data/vendor/test/cases/bifs.lookup.styl +8 -0
- data/vendor/test/cases/bifs.match.css +4 -0
- data/vendor/test/cases/bifs.match.styl +9 -0
- data/vendor/test/cases/bifs.opposite-position.css +8 -0
- data/vendor/test/cases/bifs.opposite-position.styl +9 -0
- data/vendor/test/cases/bifs.push.css +25 -0
- data/vendor/test/cases/bifs.push.styl +48 -0
- data/vendor/test/cases/bifs.rgba.css +5 -0
- data/vendor/test/cases/bifs.rgba.styl +4 -0
- data/vendor/test/cases/bifs.s.css +11 -0
- data/vendor/test/cases/bifs.s.styl +12 -0
- data/vendor/test/cases/bifs.type.css +11 -0
- data/vendor/test/cases/bifs.type.styl +12 -0
- data/vendor/test/cases/bifs.unit.css +6 -0
- data/vendor/test/cases/bifs.unit.styl +5 -0
- data/vendor/test/cases/bifs.unquote.css +5 -0
- data/vendor/test/cases/bifs.unquote.styl +8 -0
- data/vendor/test/cases/bifs.url.css +11 -0
- data/vendor/test/cases/bifs.url.styl +15 -0
- data/vendor/test/cases/coercion.css +6 -0
- data/vendor/test/cases/coercion.styl +5 -0
- data/vendor/test/cases/comments.css +18 -0
- data/vendor/test/cases/comments.styl +28 -0
- data/vendor/test/cases/compress.comments.css +2 -0
- data/vendor/test/cases/compress.comments.styl +5 -0
- data/vendor/test/cases/compress.units.css +2 -0
- data/vendor/test/cases/compress.units.styl +18 -0
- data/vendor/test/cases/conditional-assignment.css +4 -0
- data/vendor/test/cases/conditional-assignment.styl +9 -0
- data/vendor/test/cases/control.blueprint.ie.css +126 -0
- data/vendor/test/cases/control.blueprint.ie.styl +36 -0
- data/vendor/test/cases/control.blueprint.screen.css +1103 -0
- data/vendor/test/cases/control.blueprint.screen.styl +265 -0
- data/vendor/test/cases/control.boilerplate.css +473 -0
- data/vendor/test/cases/control.boilerplate.styl +265 -0
- data/vendor/test/cases/css.functions.single-line.css +9 -0
- data/vendor/test/cases/css.functions.single-line.styl +13 -0
- data/vendor/test/cases/css.if.css +8 -0
- data/vendor/test/cases/css.if.styl +21 -0
- data/vendor/test/cases/css.keyframes.css +57 -0
- data/vendor/test/cases/css.keyframes.styl +48 -0
- data/vendor/test/cases/css.large.css +172 -0
- data/vendor/test/cases/css.large.styl +172 -0
- data/vendor/test/cases/css.media.css +15 -0
- data/vendor/test/cases/css.media.styl +17 -0
- data/vendor/test/cases/css.mixins.braces.css +38 -0
- data/vendor/test/cases/css.mixins.braces.styl +53 -0
- data/vendor/test/cases/css.mixins.css +38 -0
- data/vendor/test/cases/css.mixins.root.css +26 -0
- data/vendor/test/cases/css.mixins.root.styl +25 -0
- data/vendor/test/cases/css.mixins.root.wonky.css +26 -0
- data/vendor/test/cases/css.mixins.root.wonky.styl +17 -0
- data/vendor/test/cases/css.mixins.styl +47 -0
- data/vendor/test/cases/css.selector.interpolation.css +91 -0
- data/vendor/test/cases/css.selector.interpolation.styl +90 -0
- data/vendor/test/cases/css.selectors.css +38 -0
- data/vendor/test/cases/css.selectors.styl +53 -0
- data/vendor/test/cases/css.whitespace.css +37 -0
- data/vendor/test/cases/css.whitespace.styl +38 -0
- data/vendor/test/cases/escape.css +4 -0
- data/vendor/test/cases/escape.styl +4 -0
- data/vendor/test/cases/fontface.css +4 -0
- data/vendor/test/cases/fontface.styl +5 -0
- data/vendor/test/cases/for.complex.css +44 -0
- data/vendor/test/cases/for.complex.styl +28 -0
- data/vendor/test/cases/for.css +52 -0
- data/vendor/test/cases/for.function.css +20 -0
- data/vendor/test/cases/for.function.styl +51 -0
- data/vendor/test/cases/for.styl +44 -0
- data/vendor/test/cases/function.arguments.css +4 -0
- data/vendor/test/cases/function.arguments.styl +14 -0
- data/vendor/test/cases/function.literals.css +6 -0
- data/vendor/test/cases/function.literals.styl +12 -0
- data/vendor/test/cases/functions.arg-calls.css +3 -0
- data/vendor/test/cases/functions.arg-calls.styl +9 -0
- data/vendor/test/cases/functions.call.css +4 -0
- data/vendor/test/cases/functions.call.styl +7 -0
- data/vendor/test/cases/functions.css +11 -0
- data/vendor/test/cases/functions.defaults.css +15 -0
- data/vendor/test/cases/functions.defaults.styl +30 -0
- data/vendor/test/cases/functions.multi-line.css +9 -0
- data/vendor/test/cases/functions.multi-line.styl +25 -0
- data/vendor/test/cases/functions.multiple-calls.css +13 -0
- data/vendor/test/cases/functions.multiple-calls.styl +26 -0
- data/vendor/test/cases/functions.nested-calls.css +3 -0
- data/vendor/test/cases/functions.nested-calls.styl +9 -0
- data/vendor/test/cases/functions.nested.css +10 -0
- data/vendor/test/cases/functions.nested.styl +37 -0
- data/vendor/test/cases/functions.property.css +10 -0
- data/vendor/test/cases/functions.property.styl +11 -0
- data/vendor/test/cases/functions.return.css +15 -0
- data/vendor/test/cases/functions.return.each.css +10 -0
- data/vendor/test/cases/functions.return.each.styl +23 -0
- data/vendor/test/cases/functions.return.styl +86 -0
- data/vendor/test/cases/functions.styl +34 -0
- data/vendor/test/cases/functions.variable.css +9 -0
- data/vendor/test/cases/functions.variable.ident.css +3 -0
- data/vendor/test/cases/functions.variable.ident.styl +11 -0
- data/vendor/test/cases/functions.variable.styl +27 -0
- data/vendor/test/cases/hack.star.css +27 -0
- data/vendor/test/cases/hack.star.styl +37 -0
- data/vendor/test/cases/if.css +43 -0
- data/vendor/test/cases/if.else.css +6 -0
- data/vendor/test/cases/if.else.styl +16 -0
- data/vendor/test/cases/if.mixin.css +7 -0
- data/vendor/test/cases/if.mixin.styl +24 -0
- data/vendor/test/cases/if.postfix.css +61 -0
- data/vendor/test/cases/if.postfix.styl +110 -0
- data/vendor/test/cases/if.selectors.css +16 -0
- data/vendor/test/cases/if.selectors.styl +22 -0
- data/vendor/test/cases/if.styl +99 -0
- data/vendor/test/cases/import.basic/a.styl +5 -0
- data/vendor/test/cases/import.basic/b.styl +5 -0
- data/vendor/test/cases/import.basic/c.styl +3 -0
- data/vendor/test/cases/import.basic.css +11 -0
- data/vendor/test/cases/import.basic.styl +4 -0
- data/vendor/test/cases/import.complex/a.styl +4 -0
- data/vendor/test/cases/import.complex/c.styl +2 -0
- data/vendor/test/cases/import.complex/nested/b.styl +4 -0
- data/vendor/test/cases/import.complex.css +9 -0
- data/vendor/test/cases/import.complex.styl +1 -0
- data/vendor/test/cases/import.index/vendor/a.styl +2 -0
- data/vendor/test/cases/import.index/vendor/b.styl +2 -0
- data/vendor/test/cases/import.index/vendor/c.styl +2 -0
- data/vendor/test/cases/import.index/vendor/index.styl +4 -0
- data/vendor/test/cases/import.index.css +9 -0
- data/vendor/test/cases/import.index.styl +2 -0
- data/vendor/test/cases/import.literal.css +2 -0
- data/vendor/test/cases/import.literal.styl +3 -0
- data/vendor/test/cases/import.mixins.css +7 -0
- data/vendor/test/cases/import.mixins.styl +9 -0
- data/vendor/test/cases/import.ordering/five.styl +2 -0
- data/vendor/test/cases/import.ordering/four.styl +4 -0
- data/vendor/test/cases/import.ordering/two.styl +2 -0
- data/vendor/test/cases/import.ordering.css +15 -0
- data/vendor/test/cases/import.ordering.styl +12 -0
- data/vendor/test/cases/important.css +6 -0
- data/vendor/test/cases/important.styl +6 -0
- data/vendor/test/cases/interpolation.properties.css +40 -0
- data/vendor/test/cases/interpolation.properties.styl +56 -0
- data/vendor/test/cases/introspection.css +7 -0
- data/vendor/test/cases/introspection.styl +14 -0
- data/vendor/test/cases/jquery.css +3 -0
- data/vendor/test/cases/jquery.styl +5 -0
- data/vendor/test/cases/keyframes.css +9 -0
- data/vendor/test/cases/keyframes.fabrication.css +18 -0
- data/vendor/test/cases/keyframes.fabrication.defaults.css +45 -0
- data/vendor/test/cases/keyframes.fabrication.defaults.styl +9 -0
- data/vendor/test/cases/keyframes.fabrication.styl +11 -0
- data/vendor/test/cases/keyframes.styl +6 -0
- data/vendor/test/cases/kwargs.css +63 -0
- data/vendor/test/cases/kwargs.styl +74 -0
- data/vendor/test/cases/list.css +3 -0
- data/vendor/test/cases/list.styl +3 -0
- data/vendor/test/cases/literal.color.css +6 -0
- data/vendor/test/cases/literal.color.styl +5 -0
- data/vendor/test/cases/literal.css +10 -0
- data/vendor/test/cases/literal.styl +18 -0
- data/vendor/test/cases/media.css +14 -0
- data/vendor/test/cases/media.styl +11 -0
- data/vendor/test/cases/mixin.conditional.css +19 -0
- data/vendor/test/cases/mixin.conditional.styl +36 -0
- data/vendor/test/cases/mixin.order.conditional.css +11 -0
- data/vendor/test/cases/mixin.order.conditional.styl +20 -0
- data/vendor/test/cases/mixin.order.css +9 -0
- data/vendor/test/cases/mixin.order.nested.css +9 -0
- data/vendor/test/cases/mixin.order.nested.styl +21 -0
- data/vendor/test/cases/mixin.order.styl +20 -0
- data/vendor/test/cases/mixins/box.styl +11 -0
- data/vendor/test/cases/mixins.complex.css +30 -0
- data/vendor/test/cases/mixins.complex.fix-to.css +15 -0
- data/vendor/test/cases/mixins.complex.fix-to.styl +28 -0
- data/vendor/test/cases/mixins.complex.styl +41 -0
- data/vendor/test/cases/mixins.conditional.css +3 -0
- data/vendor/test/cases/mixins.conditional.styl +8 -0
- data/vendor/test/cases/mixins.nested.css +7 -0
- data/vendor/test/cases/mixins.nested.selectors.css +21 -0
- data/vendor/test/cases/mixins.nested.selectors.styl +31 -0
- data/vendor/test/cases/mixins.nested.styl +14 -0
- data/vendor/test/cases/mixins.order.2.css +11 -0
- data/vendor/test/cases/mixins.order.2.styl +16 -0
- data/vendor/test/cases/mixins.reset.css +75 -0
- data/vendor/test/cases/mixins.reset.styl +27 -0
- data/vendor/test/cases/mixins.return.css +4 -0
- data/vendor/test/cases/mixins.return.styl +8 -0
- data/vendor/test/cases/mixins.root.css +3 -0
- data/vendor/test/cases/mixins.root.styl +5 -0
- data/vendor/test/cases/operator.range.css +15 -0
- data/vendor/test/cases/operator.range.styl +23 -0
- data/vendor/test/cases/operators.assignment.function.css +15 -0
- data/vendor/test/cases/operators.assignment.function.styl +34 -0
- data/vendor/test/cases/operators.assignment.mixin.css +15 -0
- data/vendor/test/cases/operators.assignment.mixin.styl +39 -0
- data/vendor/test/cases/operators.assignment.root.css +25 -0
- data/vendor/test/cases/operators.assignment.root.styl +55 -0
- data/vendor/test/cases/operators.complex.css +9 -0
- data/vendor/test/cases/operators.complex.styl +32 -0
- data/vendor/test/cases/operators.css +40 -0
- data/vendor/test/cases/operators.equality.css +55 -0
- data/vendor/test/cases/operators.equality.styl +55 -0
- data/vendor/test/cases/operators.in.css +37 -0
- data/vendor/test/cases/operators.in.styl +51 -0
- data/vendor/test/cases/operators.mixins.css +10 -0
- data/vendor/test/cases/operators.mixins.styl +25 -0
- data/vendor/test/cases/operators.precedence.css +51 -0
- data/vendor/test/cases/operators.precedence.styl +82 -0
- data/vendor/test/cases/operators.styl +96 -0
- data/vendor/test/cases/operators.subscript.assign.css +21 -0
- data/vendor/test/cases/operators.subscript.assign.styl +45 -0
- data/vendor/test/cases/operators.subscript.css +59 -0
- data/vendor/test/cases/operators.subscript.range.css +14 -0
- data/vendor/test/cases/operators.subscript.range.styl +15 -0
- data/vendor/test/cases/operators.subscript.styl +81 -0
- data/vendor/test/cases/page.css +13 -0
- data/vendor/test/cases/page.styl +13 -0
- data/vendor/test/cases/parent.css +32 -0
- data/vendor/test/cases/parent.styl +33 -0
- data/vendor/test/cases/properties.colons.css +8 -0
- data/vendor/test/cases/properties.colons.styl +10 -0
- data/vendor/test/cases/properties.css +4 -0
- data/vendor/test/cases/properties.one-line.css +10 -0
- data/vendor/test/cases/properties.one-line.styl +11 -0
- data/vendor/test/cases/properties.styl +4 -0
- data/vendor/test/cases/property-access.css +48 -0
- data/vendor/test/cases/property-access.styl +62 -0
- data/vendor/test/cases/regression.107.lookup-failure.css +12 -0
- data/vendor/test/cases/regression.107.lookup-failure.styl +13 -0
- data/vendor/test/cases/regression.127.css +3 -0
- data/vendor/test/cases/regression.127.styl +2 -0
- data/vendor/test/cases/regression.130.css +16 -0
- data/vendor/test/cases/regression.130.styl +6 -0
- data/vendor/test/cases/regression.131.css +7 -0
- data/vendor/test/cases/regression.131.styl +2 -0
- data/vendor/test/cases/regression.137.css +7 -0
- data/vendor/test/cases/regression.137.styl +7 -0
- data/vendor/test/cases/regression.139.css +5 -0
- data/vendor/test/cases/regression.139.styl +21 -0
- data/vendor/test/cases/regression.142.css +39 -0
- data/vendor/test/cases/regression.142.styl +54 -0
- data/vendor/test/cases/regression.146.css +30 -0
- data/vendor/test/cases/regression.146.styl +31 -0
- data/vendor/test/cases/regression.153.css +8 -0
- data/vendor/test/cases/regression.153.styl +9 -0
- data/vendor/test/cases/regression.154.css +8 -0
- data/vendor/test/cases/regression.154.styl +14 -0
- data/vendor/test/cases/regression.156.css +4 -0
- data/vendor/test/cases/regression.156.styl +6 -0
- data/vendor/test/cases/regression.212.css +15 -0
- data/vendor/test/cases/regression.212.styl +14 -0
- data/vendor/test/cases/regression.216.css +10 -0
- data/vendor/test/cases/regression.216.styl +8 -0
- data/vendor/test/cases/regression.220.css +5 -0
- data/vendor/test/cases/regression.220.styl +5 -0
- data/vendor/test/cases/regression.229.css +12 -0
- data/vendor/test/cases/regression.229.styl +9 -0
- data/vendor/test/cases/regression.233.css +6 -0
- data/vendor/test/cases/regression.233.styl +7 -0
- data/vendor/test/cases/regression.235.css +11 -0
- data/vendor/test/cases/regression.235.styl +13 -0
- data/vendor/test/cases/regression.243.css +3 -0
- data/vendor/test/cases/regression.243.styl +4 -0
- data/vendor/test/cases/regression.244.css +3 -0
- data/vendor/test/cases/regression.244.styl +3 -0
- data/vendor/test/cases/regression.247.css +6 -0
- data/vendor/test/cases/regression.247.styl +6 -0
- data/vendor/test/cases/regression.248.compressed.css +4 -0
- data/vendor/test/cases/regression.248.compressed.styl +10 -0
- data/vendor/test/cases/regression.252.css +13 -0
- data/vendor/test/cases/regression.252.styl +13 -0
- data/vendor/test/cases/regression.260.css +6 -0
- data/vendor/test/cases/regression.260.styl +6 -0
- data/vendor/test/cases/regression.267.css +3 -0
- data/vendor/test/cases/regression.267.styl +3 -0
- data/vendor/test/cases/regression.270.css +5 -0
- data/vendor/test/cases/regression.270.styl +7 -0
- data/vendor/test/cases/regression.272.css +11 -0
- data/vendor/test/cases/regression.272.styl +17 -0
- data/vendor/test/cases/regression.274.css +14 -0
- data/vendor/test/cases/regression.274.styl +16 -0
- data/vendor/test/cases/regression.360.css +19 -0
- data/vendor/test/cases/regression.360.styl +1 -0
- data/vendor/test/cases/regression.368.css +4 -0
- data/vendor/test/cases/regression.368.styl +3 -0
- data/vendor/test/cases/regression.379.css +6 -0
- data/vendor/test/cases/regression.379.styl +10 -0
- data/vendor/test/cases/regression.380.css +8 -0
- data/vendor/test/cases/regression.380.styl +14 -0
- data/vendor/test/cases/regression.388.css +2 -0
- data/vendor/test/cases/regression.388.styl +6 -0
- data/vendor/test/cases/regression.415.css +5 -0
- data/vendor/test/cases/regression.415.styl +3 -0
- data/vendor/test/cases/regression.420.css +21 -0
- data/vendor/test/cases/regression.420.styl +29 -0
- data/vendor/test/cases/reset.css +70 -0
- data/vendor/test/cases/reset.styl +16 -0
- data/vendor/test/cases/rule.charset.css +1 -0
- data/vendor/test/cases/rule.charset.styl +2 -0
- data/vendor/test/cases/rulset.css +4 -0
- data/vendor/test/cases/rulset.newline.css +5 -0
- data/vendor/test/cases/rulset.newline.styl +5 -0
- data/vendor/test/cases/rulset.styl +3 -0
- data/vendor/test/cases/scope.complex.css +10 -0
- data/vendor/test/cases/scope.complex.styl +16 -0
- data/vendor/test/cases/scope.css +5 -0
- data/vendor/test/cases/scope.nested.css +9 -0
- data/vendor/test/cases/scope.nested.styl +10 -0
- data/vendor/test/cases/scope.styl +12 -0
- data/vendor/test/cases/selector.interpolation.css +57 -0
- data/vendor/test/cases/selector.interpolation.styl +45 -0
- data/vendor/test/cases/selectors.complex.css +28 -0
- data/vendor/test/cases/selectors.complex.styl +27 -0
- data/vendor/test/cases/selectors.css +50 -0
- data/vendor/test/cases/selectors.nested.comma.css +9 -0
- data/vendor/test/cases/selectors.nested.comma.styl +8 -0
- data/vendor/test/cases/selectors.nested.css +34 -0
- data/vendor/test/cases/selectors.nested.styl +33 -0
- data/vendor/test/cases/selectors.pseudo.css +27 -0
- data/vendor/test/cases/selectors.pseudo.elements.css +26 -0
- data/vendor/test/cases/selectors.pseudo.elements.styl +29 -0
- data/vendor/test/cases/selectors.pseudo.styl +24 -0
- data/vendor/test/cases/selectors.styl +46 -0
- data/vendor/test/cases/self-assignment.css +3 -0
- data/vendor/test/cases/self-assignment.styl +4 -0
- data/vendor/test/cases/vargs.call.css +24 -0
- data/vendor/test/cases/vargs.call.styl +40 -0
- data/vendor/test/cases/vargs.css +30 -0
- data/vendor/test/cases/vargs.styl +49 -0
- data/vendor/test/cases/variable.css +3 -0
- data/vendor/test/cases/variable.styl +4 -0
- data/vendor/test/cases/variables.css +12 -0
- data/vendor/test/cases/variables.styl +17 -0
- data/vendor/test/images/gif +0 -0
- data/vendor/test/images/squirrel.jpeg +0 -0
- data/vendor/test/images/tux.png +0 -0
- data/vendor/test/run.js +151 -0
- data/vendor/testing/index.html +56 -0
- data/vendor/testing/stylus.js +146 -0
- data/vendor/testing/test-js.js +23 -0
- data/vendor/testing/test.css +8 -0
- data/vendor/testing/test.js +23 -0
- data/vendor/testing/test.styl +75 -0
- data/vendor/testing/utils.styl +6 -0
- data/vendor/testing/vendor.styl +3 -0
- metadata +565 -112
- data/.DS_Store +0 -0
- data/lib/.DS_Store +0 -0
- data/lib/node_modules/cssom/.idea/CSSOM.iml +0 -9
- data/lib/node_modules/cssom/.idea/dictionaries/nv.xml +0 -3
- data/lib/node_modules/cssom/.idea/encodings.xml +0 -5
- data/lib/node_modules/cssom/.idea/misc.xml +0 -17
- data/lib/node_modules/cssom/.idea/modules.xml +0 -9
- data/lib/node_modules/cssom/.idea/projectCodeStyle.xml +0 -82
- data/lib/node_modules/cssom/.idea/vcs.xml +0 -8
- data/lib/node_modules/cssom/.idea/workspace.xml +0 -467
- data/lib/node_modules/cssom/.livereload +0 -19
- data/lib/node_modules/cssom/docs/.livereload +0 -19
@@ -0,0 +1,73 @@
|
|
1
|
+
|
2
|
+
## Connect Middleware
|
3
|
+
|
4
|
+
Stylus ships with Connect middleware for auto-compiling Stylus sheets when modified.
|
5
|
+
|
6
|
+
## stylus.middleware(options)
|
7
|
+
|
8
|
+
Return Connect middleware with the given `options`.
|
9
|
+
|
10
|
+
#### Options
|
11
|
+
|
12
|
+
`force` When __true__ styles will always re-compile
|
13
|
+
`src` Source directory used to find .styl files
|
14
|
+
`dest` Destination directory used to output .css files
|
15
|
+
when undefined defaults to `src`.
|
16
|
+
`compress` Whether the output .css files should be compressed
|
17
|
+
`compile` Custom compile function, accepting the arguments
|
18
|
+
`(str, path)` returning the renderer.
|
19
|
+
`firebug` Emits debug infos in the generated css that can
|
20
|
+
be used by the FireStylus Firebug plugin
|
21
|
+
`linenos` Emits comments in the generated css indicating
|
22
|
+
the corresponding stylus line
|
23
|
+
|
24
|
+
#### Examples
|
25
|
+
|
26
|
+
Here we set up the custom compile function so that we may
|
27
|
+
alter the renderer by providing additional settings.
|
28
|
+
|
29
|
+
By default the compile function simply sets the `filename`
|
30
|
+
and renders the CSS.
|
31
|
+
|
32
|
+
function compile(str, path) {
|
33
|
+
return stylus(str)
|
34
|
+
.import(__dirname + '/css/mixins/blueprint')
|
35
|
+
.import(__dirname + '/css/mixins/css3')
|
36
|
+
.set('filename', path)
|
37
|
+
.set('warn', true)
|
38
|
+
.set('compress', true);
|
39
|
+
}
|
40
|
+
|
41
|
+
Pass the middleware to Connect, grabbing .styl files from this directory
|
42
|
+
and saving .css files to _./public_. Also supplying our custom `compile` function.
|
43
|
+
|
44
|
+
Following that we have a `staticProvider` layer setup to serve the .css
|
45
|
+
files generated by Stylus.
|
46
|
+
|
47
|
+
var stylus = require('stylus');
|
48
|
+
|
49
|
+
var server = connect.createServer(
|
50
|
+
stylus.middleware({
|
51
|
+
src: __dirname
|
52
|
+
, dest: __dirname + '/public'
|
53
|
+
, compile: compile
|
54
|
+
})
|
55
|
+
, connect.staticProvider(__dirname + '/public')
|
56
|
+
);
|
57
|
+
|
58
|
+
When `force` is used, the styles will be unconditionally re-compiled, however
|
59
|
+
even without this option the Stylus middleware is smart enough to detect changes in `@import`ed files.
|
60
|
+
|
61
|
+
For development purpose, you can enable the `firebug` option if you want to
|
62
|
+
use the [FireStylus extension for Firebug](//github.com/LearnBoost/stylus/blob/master/docs/firebug.md)
|
63
|
+
and/or the `linenos` option to emit debug infos in the generated css.
|
64
|
+
|
65
|
+
function compile(str, path) {
|
66
|
+
return stylus(str)
|
67
|
+
.import(__dirname + '/css/mixins/blueprint')
|
68
|
+
.import(__dirname + '/css/mixins/css3')
|
69
|
+
.set('filename', path)
|
70
|
+
.set('warn', true)
|
71
|
+
.set('firebug', true)
|
72
|
+
.set('linenos', true);
|
73
|
+
}
|
@@ -0,0 +1,130 @@
|
|
1
|
+
|
2
|
+
## Mixins
|
3
|
+
|
4
|
+
Both mixins and functions are defined in the same manor, however they are applied in different ways. For example we have a `border-radius(n)` function defined below, which is invoked as a _mixin_, aka a statement rather than part of an expression.
|
5
|
+
|
6
|
+
When `border-radius()` is invoked within a selector, the properties are expanded and copied into the selector.
|
7
|
+
|
8
|
+
border-radius(n)
|
9
|
+
-webkit-border-radius n
|
10
|
+
-moz-border-radius n
|
11
|
+
border-radius n
|
12
|
+
|
13
|
+
form input[type=button]
|
14
|
+
border-radius(5px)
|
15
|
+
|
16
|
+
compiles to:
|
17
|
+
|
18
|
+
form input[type=button] {
|
19
|
+
-webkit-border-radius: 5px;
|
20
|
+
-moz-border-radius: 5px;
|
21
|
+
border-radius: 5px;
|
22
|
+
}
|
23
|
+
|
24
|
+
When utilizing mixins, we can omit the parens all together, providing is with fantastic transparent vendor property support:
|
25
|
+
|
26
|
+
border-radius(n)
|
27
|
+
-webkit-border-radius n
|
28
|
+
-moz-border-radius n
|
29
|
+
border-radius n
|
30
|
+
|
31
|
+
form input[type=button]
|
32
|
+
border-radius 5px
|
33
|
+
|
34
|
+
Note that the `border-radius` within our mixin is treated as a property, and not a recursive function invocation. To take this further we we may utilize the automatic `arguments` local variable, containing the expression passed, allowing more than one value to be passed:
|
35
|
+
|
36
|
+
border-radius()
|
37
|
+
-webkit-border-radius arguments
|
38
|
+
-moz-border-radius arguments
|
39
|
+
border-radius arguments
|
40
|
+
|
41
|
+
now allowing us to pass values such as `border-radius 1px 2px / 3px 4px`.
|
42
|
+
|
43
|
+
Another great example of this, is adding transparent support for vendor specifics such as `opacity` support for IE:
|
44
|
+
|
45
|
+
support-for-ie ?= true
|
46
|
+
|
47
|
+
opacity(n)
|
48
|
+
opacity n
|
49
|
+
if support-for-ie
|
50
|
+
filter unquote('progid:DXImageTransform.Microsoft.Alpha(Opacity=' + round(n * 100) + ')')
|
51
|
+
|
52
|
+
#logo
|
53
|
+
&:hover
|
54
|
+
opacity 0.5
|
55
|
+
|
56
|
+
rendering:
|
57
|
+
|
58
|
+
#logo:hover {
|
59
|
+
opacity: 0.5;
|
60
|
+
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
|
61
|
+
}
|
62
|
+
|
63
|
+
### Parent References
|
64
|
+
|
65
|
+
Mixins may utilize the parent reference character `&`, acting on the parent instead of further nesting. For example lets say we wish to create a `stripe(even, odd)` mixin for striping table row, we provide both `even` and `odd` with default color values, and assign the `background-color` property on the row. Nested within the `tr` we use `&` to reference the `tr`, providing the `even` color.
|
66
|
+
|
67
|
+
stripe(even = #fff, odd = #eee)
|
68
|
+
tr
|
69
|
+
background-color odd
|
70
|
+
&.even
|
71
|
+
&:nth-child(even)
|
72
|
+
background-color even
|
73
|
+
|
74
|
+
We may then utilize the mixin as shown below:
|
75
|
+
|
76
|
+
table
|
77
|
+
stripe()
|
78
|
+
td
|
79
|
+
padding 4px 10px
|
80
|
+
|
81
|
+
table#users
|
82
|
+
stripe(#303030, #494848)
|
83
|
+
td
|
84
|
+
color white
|
85
|
+
|
86
|
+
Another way to define the `stripe()` mixin without parent reference:
|
87
|
+
|
88
|
+
stripe(even = #fff, odd = #eee)
|
89
|
+
tr
|
90
|
+
background-color odd
|
91
|
+
tr.even
|
92
|
+
tr:nth-child(even)
|
93
|
+
background-color even
|
94
|
+
|
95
|
+
If we wished, we could invoke `stripe()` as if it were a property:
|
96
|
+
|
97
|
+
stripe #fff #000
|
98
|
+
|
99
|
+
### Mixing Mixins in Mixins
|
100
|
+
|
101
|
+
Mixins can of course utilize other mixins, to build up their own selector's and properties. For example, below we create `comma-list()` to inline (via `inline-list()`) and comma-separate an un-ordered list.
|
102
|
+
|
103
|
+
|
104
|
+
inline-list()
|
105
|
+
li
|
106
|
+
display inline
|
107
|
+
|
108
|
+
comma-list()
|
109
|
+
inline-list()
|
110
|
+
li
|
111
|
+
&:after
|
112
|
+
content ', '
|
113
|
+
&:last-child:after
|
114
|
+
content ''
|
115
|
+
|
116
|
+
ul
|
117
|
+
comma-list()
|
118
|
+
|
119
|
+
rendering:
|
120
|
+
|
121
|
+
ul li:after {
|
122
|
+
content: ", ";
|
123
|
+
}
|
124
|
+
ul li:last-child:after {
|
125
|
+
content: "";
|
126
|
+
}
|
127
|
+
ul li {
|
128
|
+
display: inline;
|
129
|
+
}
|
130
|
+
|
@@ -0,0 +1,451 @@
|
|
1
|
+
|
2
|
+
## Operator Precedence
|
3
|
+
|
4
|
+
Below is the operator precedence table, highest to lowest:
|
5
|
+
|
6
|
+
[]
|
7
|
+
! ~ + -
|
8
|
+
is defined
|
9
|
+
** * / %
|
10
|
+
+ -
|
11
|
+
... ..
|
12
|
+
<= >= < >
|
13
|
+
in
|
14
|
+
== is != is not isnt
|
15
|
+
is a
|
16
|
+
&& and || or
|
17
|
+
?:
|
18
|
+
= := ?= += -= *= /= %=
|
19
|
+
not
|
20
|
+
if unless
|
21
|
+
|
22
|
+
## Unary Operators
|
23
|
+
|
24
|
+
The following unary operators are available, `!`, `not`, `-`, `+`, and `~`.
|
25
|
+
|
26
|
+
!0
|
27
|
+
// => true
|
28
|
+
|
29
|
+
!!0
|
30
|
+
// => false
|
31
|
+
|
32
|
+
!1
|
33
|
+
// => false
|
34
|
+
|
35
|
+
!!5px
|
36
|
+
// => true
|
37
|
+
|
38
|
+
-5px
|
39
|
+
// => -5px
|
40
|
+
|
41
|
+
--5px
|
42
|
+
// => 5px
|
43
|
+
|
44
|
+
not true
|
45
|
+
// => false
|
46
|
+
|
47
|
+
not not true
|
48
|
+
// => true
|
49
|
+
|
50
|
+
The logical `not` operator has low precedence, therefore the following example could be replaced with
|
51
|
+
|
52
|
+
a = 0
|
53
|
+
b = 1
|
54
|
+
|
55
|
+
!a and !b
|
56
|
+
// => false
|
57
|
+
// pased as: (!a) and (!b)
|
58
|
+
|
59
|
+
with:
|
60
|
+
|
61
|
+
not a or b
|
62
|
+
// => false
|
63
|
+
// parsed as: not (a or b)
|
64
|
+
|
65
|
+
## Binary Operators
|
66
|
+
|
67
|
+
### Subscript []
|
68
|
+
|
69
|
+
The subscript operator allows us to grab a value in an expression via index. Parenthesized expressions may act as tuples, so for example `(15px 5px)`, `(1 2 3)`.
|
70
|
+
|
71
|
+
Below is an example where we utilize tuples for error handling, showing the versatility of such a construct. As
|
72
|
+
|
73
|
+
add(a, b)
|
74
|
+
if a is a 'unit' and b is a 'unit'
|
75
|
+
a + b
|
76
|
+
else
|
77
|
+
(error 'a and b must be units!')
|
78
|
+
|
79
|
+
body
|
80
|
+
padding add(1,'5')
|
81
|
+
// => padding: error "a and b must be units";
|
82
|
+
|
83
|
+
padding add(1,'5')[0]
|
84
|
+
// => padding: error;
|
85
|
+
|
86
|
+
padding add(1,'5')[0] == error
|
87
|
+
// => padding: true;
|
88
|
+
|
89
|
+
padding add(1,'5')[1]
|
90
|
+
// => padding: "a and b must be units";
|
91
|
+
|
92
|
+
A more complex example, invoking the `error()` built-in function with the error message returned, when the ident (the first value) equals `error`.
|
93
|
+
|
94
|
+
|
95
|
+
if (val = add(1,'5'))[0] == error
|
96
|
+
error(val[1])
|
97
|
+
|
98
|
+
## Range .. ...
|
99
|
+
|
100
|
+
Both the inclusive (`..`) and exclusive (`...`) range operators are provided, expanding to expressions:
|
101
|
+
|
102
|
+
1..5
|
103
|
+
// => 1 2 3 4 5
|
104
|
+
|
105
|
+
1...5
|
106
|
+
// => 1 2 3 4
|
107
|
+
|
108
|
+
### Additive: + -
|
109
|
+
|
110
|
+
multiplicative and additive binary operators work as expected, and type conversion is applied within unit type classes, or default to the literal value. For example if we perform `5s - 2px` we will get `3s`.
|
111
|
+
|
112
|
+
15px - 5px
|
113
|
+
// => 10px
|
114
|
+
|
115
|
+
5 - 2
|
116
|
+
// => 3
|
117
|
+
|
118
|
+
5in - 50mm
|
119
|
+
// => 3.031in
|
120
|
+
|
121
|
+
5s - 1000ms
|
122
|
+
// => 4s
|
123
|
+
|
124
|
+
20mm + 4in
|
125
|
+
// => 121.6mm
|
126
|
+
|
127
|
+
"foo " + "bar"
|
128
|
+
// => "foo bar"
|
129
|
+
|
130
|
+
"num " + 15
|
131
|
+
// => "num 15"
|
132
|
+
|
133
|
+
### Multiplicative: / * %
|
134
|
+
|
135
|
+
2000ms + (1s * 2)
|
136
|
+
// => 4ms
|
137
|
+
|
138
|
+
5s / 2
|
139
|
+
// => 2.5s
|
140
|
+
|
141
|
+
4 % 2
|
142
|
+
// => 0
|
143
|
+
|
144
|
+
When using `/` within a property value you must wrap with parens. The following for example is taken literally, to support css line-height:
|
145
|
+
|
146
|
+
font: 14px/1.5;
|
147
|
+
|
148
|
+
whereas the following is evaluated, dividing `14px` by `1.5`:
|
149
|
+
|
150
|
+
font: (14px/1.5);
|
151
|
+
|
152
|
+
this exception is _only_ required for the `/` operator.
|
153
|
+
|
154
|
+
### Exponent: **
|
155
|
+
|
156
|
+
The Exponent operator:
|
157
|
+
|
158
|
+
2 ** 8
|
159
|
+
// => 256
|
160
|
+
|
161
|
+
### Equality & Relational: == != >= <= > <
|
162
|
+
|
163
|
+
Equality operators can be used to equate units, colors, strings, and even identifiers. This is a powerful concept, as even arbitrary identifiers such as as `wahoo` can be utilized as atoms, a function could return `yes` or `no` instead of `true` or `false` (although not advised).
|
164
|
+
|
165
|
+
5 == 5
|
166
|
+
// => true
|
167
|
+
|
168
|
+
10 < 5
|
169
|
+
// => true
|
170
|
+
|
171
|
+
#fff == #fff
|
172
|
+
// => true
|
173
|
+
|
174
|
+
true == false
|
175
|
+
// => false
|
176
|
+
|
177
|
+
wahoo == yay
|
178
|
+
// => false
|
179
|
+
|
180
|
+
wahoo == wahoo
|
181
|
+
// => true
|
182
|
+
|
183
|
+
"test" == "test"
|
184
|
+
// => true
|
185
|
+
|
186
|
+
true is true
|
187
|
+
// => true
|
188
|
+
|
189
|
+
'hey' is not 'bye'
|
190
|
+
// => true
|
191
|
+
|
192
|
+
'hey' isnt 'bye'
|
193
|
+
// => true
|
194
|
+
|
195
|
+
(foo bar) == (foo bar)
|
196
|
+
// => true
|
197
|
+
|
198
|
+
(1 2 3) == (1 2 3)
|
199
|
+
// => true
|
200
|
+
|
201
|
+
(1 2 3) == (1 1 3)
|
202
|
+
// => false
|
203
|
+
|
204
|
+
Only exact values match, for example `0 == false`, and `null == false` are both `false`.
|
205
|
+
|
206
|
+
Aliases:
|
207
|
+
|
208
|
+
== is
|
209
|
+
!= is not
|
210
|
+
!= isnt
|
211
|
+
|
212
|
+
## Truthfulness
|
213
|
+
|
214
|
+
Nearly everything within Stylus resolves to `true`, including units with a suffix, for example even `0%`, `0px`, etc will resolve to `true`, since commonly in Stylus a mixin or function may accept such units as valid, however `0` itself is `false` in terms of arithmetic.
|
215
|
+
|
216
|
+
`true` examples:
|
217
|
+
|
218
|
+
0%
|
219
|
+
0px
|
220
|
+
1px
|
221
|
+
-1
|
222
|
+
-1px
|
223
|
+
hey
|
224
|
+
'hey'
|
225
|
+
(0px 0px 0px)
|
226
|
+
|
227
|
+
`false` examples:
|
228
|
+
|
229
|
+
0
|
230
|
+
null
|
231
|
+
false
|
232
|
+
''
|
233
|
+
(0 0 0)
|
234
|
+
|
235
|
+
### Logical Operators: && || and or
|
236
|
+
|
237
|
+
Logical operators `&&` and `||` are aliased `and` / `or` which apply the same precedence.
|
238
|
+
|
239
|
+
5 && 3
|
240
|
+
// => 3
|
241
|
+
|
242
|
+
0 || 5
|
243
|
+
// => 5
|
244
|
+
|
245
|
+
0 && 5
|
246
|
+
// => 0
|
247
|
+
|
248
|
+
#fff is a 'rgba' and 15 is a 'unit'
|
249
|
+
// => true
|
250
|
+
|
251
|
+
### Existence Operator: in
|
252
|
+
|
253
|
+
Checks for the existence of the _left-hand_ operand within the _right-hand_ expression.
|
254
|
+
|
255
|
+
Simple examples:
|
256
|
+
|
257
|
+
nums = 1 2 3
|
258
|
+
1 in nums
|
259
|
+
// => true
|
260
|
+
|
261
|
+
5 in nums
|
262
|
+
// => false
|
263
|
+
|
264
|
+
Some undefined identifiers:
|
265
|
+
|
266
|
+
words = foo bar baz
|
267
|
+
bar in words
|
268
|
+
// => true
|
269
|
+
|
270
|
+
HEY in words
|
271
|
+
// => false
|
272
|
+
|
273
|
+
Works with tuples too:
|
274
|
+
|
275
|
+
vals = (error 'one') (error 'two')
|
276
|
+
error in vals
|
277
|
+
// => false
|
278
|
+
|
279
|
+
(error 'one') in vals
|
280
|
+
// => true
|
281
|
+
|
282
|
+
(error 'two') in vals
|
283
|
+
// => true
|
284
|
+
|
285
|
+
(error 'something') in vals
|
286
|
+
// => false
|
287
|
+
|
288
|
+
Example usage in mixin:
|
289
|
+
|
290
|
+
pad(types = padding, n = 5px)
|
291
|
+
if padding in types
|
292
|
+
padding n
|
293
|
+
if margin in types
|
294
|
+
margin n
|
295
|
+
|
296
|
+
body
|
297
|
+
pad()
|
298
|
+
|
299
|
+
body
|
300
|
+
pad(margin)
|
301
|
+
|
302
|
+
body
|
303
|
+
pad(padding margin, 10px)
|
304
|
+
|
305
|
+
yielding:
|
306
|
+
|
307
|
+
body {
|
308
|
+
padding: 5px;
|
309
|
+
}
|
310
|
+
body {
|
311
|
+
margin: 5px;
|
312
|
+
}
|
313
|
+
body {
|
314
|
+
padding: 10px;
|
315
|
+
margin: 10px;
|
316
|
+
}
|
317
|
+
|
318
|
+
### Conditional Assignment: ?= :=
|
319
|
+
|
320
|
+
The conditional assignment operator `?=` (aliased as `:=`) lets us define variables without clobbering old values (when present). This operator expands to an `is defined` binary operation within a ternary, for example the following are equivalent:
|
321
|
+
|
322
|
+
color := white
|
323
|
+
color ?= white
|
324
|
+
color = color is defined ? color : white
|
325
|
+
|
326
|
+
For example when using `=` we simply re-assign:
|
327
|
+
|
328
|
+
color = white
|
329
|
+
color = black
|
330
|
+
|
331
|
+
color
|
332
|
+
// => black
|
333
|
+
|
334
|
+
However when using `?=` our second attempt fails since the variable is already defined:
|
335
|
+
|
336
|
+
color = white
|
337
|
+
color ?= black
|
338
|
+
|
339
|
+
color
|
340
|
+
// => white
|
341
|
+
|
342
|
+
### Instance Check: is a
|
343
|
+
|
344
|
+
Stylus provides a binary operator named `is a` used to type check.
|
345
|
+
|
346
|
+
15 is a 'unit'
|
347
|
+
// => true
|
348
|
+
|
349
|
+
#fff is a 'rgba'
|
350
|
+
// => true
|
351
|
+
|
352
|
+
15 is a 'rgba'
|
353
|
+
// => false
|
354
|
+
|
355
|
+
Alternatively we could use the `type()` BIF:
|
356
|
+
|
357
|
+
type(#fff) == 'rgba'
|
358
|
+
// => true
|
359
|
+
|
360
|
+
'color' is the one special-case, evaluating to true when the
|
361
|
+
left-hand operand is an `RGBA` or `HSLA` node.
|
362
|
+
|
363
|
+
### Variable Definition: is defined
|
364
|
+
|
365
|
+
This pseudo binary operator does not accept a right-hand operator, and does _not_ evaluate the left. This allows us to check if a variable has a value assigned to it.
|
366
|
+
|
367
|
+
foo is defined
|
368
|
+
// => false
|
369
|
+
|
370
|
+
foo = 15px
|
371
|
+
foo is defined
|
372
|
+
// => true
|
373
|
+
|
374
|
+
#fff is defined
|
375
|
+
// => 'invalid "is defined" check on non-variable #fff'
|
376
|
+
|
377
|
+
Alternatively one can use the `lookup(name)` built-in function to do this, or to perform dynamic lookups:
|
378
|
+
|
379
|
+
name = 'blue'
|
380
|
+
lookup('light-' + name)
|
381
|
+
// => null
|
382
|
+
|
383
|
+
light-blue = #80e2e9
|
384
|
+
lookup('light-' + name)
|
385
|
+
// => #80e2e9
|
386
|
+
|
387
|
+
This operator is essential, as an undefined identifier is still a truthy value. For example:
|
388
|
+
|
389
|
+
body
|
390
|
+
if ohnoes
|
391
|
+
padding 5px
|
392
|
+
|
393
|
+
_will_ yield the following css when undefined:
|
394
|
+
|
395
|
+
body {
|
396
|
+
padding: 5px;
|
397
|
+
}
|
398
|
+
|
399
|
+
however this will be safe:
|
400
|
+
|
401
|
+
body
|
402
|
+
if ohnoes is defined
|
403
|
+
padding 5px
|
404
|
+
|
405
|
+
## Ternary
|
406
|
+
|
407
|
+
The ternary operator works as we would expect in most languages, being the only operator with three operands, the _condition_ expression, the _truth_ expression and the _false_ expression.
|
408
|
+
|
409
|
+
num = 15
|
410
|
+
num ? unit(num, 'px') : 20px
|
411
|
+
// => 15px
|
412
|
+
|
413
|
+
## Color Operations
|
414
|
+
|
415
|
+
Operations on colors provide a terse, expressive way to alter components. For example we can operate on each RGB:
|
416
|
+
|
417
|
+
#0e0 + #0e0
|
418
|
+
// => #0f0
|
419
|
+
|
420
|
+
Another example is adjust the lightness value by adding or subtracting a percentage. To lighten a color we add, to darken we subtract.
|
421
|
+
|
422
|
+
#888 + 50%
|
423
|
+
// => #c3c3c3
|
424
|
+
|
425
|
+
#888 - 50%
|
426
|
+
// => #444
|
427
|
+
|
428
|
+
Adjust the hue is also possible by adding or subtracting with degrees, for example adding `50deg` to this red value, resulting in a yellow:
|
429
|
+
|
430
|
+
#f00 + 50deg
|
431
|
+
// => #ffd500
|
432
|
+
|
433
|
+
Values clamp appropriately, for example we can "spin" the hue 180 degrees, and if the current value is `320deg`, it will resolve to `140deg`.
|
434
|
+
|
435
|
+
We may also tweak several values at once, including the alpha by using `rgb()`, `rgba()`, `hsl()`, or `hsla()`:
|
436
|
+
|
437
|
+
#f00 - rgba(100,0,0,0.5)
|
438
|
+
// => rgba(155,0,0,0.5)
|
439
|
+
|
440
|
+
## Sprintf
|
441
|
+
|
442
|
+
The string sprintf-like operator `%` can be used to generate a literal value, internally passing arguments through the `s()` built-in:
|
443
|
+
|
444
|
+
'X::Microsoft::Crap(%s)' % #fc0
|
445
|
+
// => X::Microsoft::Crap(#fc0)
|
446
|
+
|
447
|
+
Multiple values should be parenthesized:
|
448
|
+
|
449
|
+
'-webkit-gradient(%s, %s, %s)' % (linear (0 0) (0 100%))
|
450
|
+
// => -webkit-gradient(linear, 0 0, 0 100%)
|
451
|
+
|