stylus-source 0.15.4 → 0.17.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/.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
|
+
|