From 4c4e2bfdcd23eabb9f3bd6e6691ad2387ddae960 Mon Sep 17 00:00:00 2001 From: Philip Harrison Date: Fri, 10 Aug 2012 15:04:58 +0100 Subject: [PATCH] Add dppx and dpcm units to parser dimensions dppx is currently supported by Firefox > 16. This can be used to target retina setups: @media (min-resolution: 2dppx) {} http://www.w3.org/TR/css3-values/#resolution --- lib/less/parser.js | 22 +++++++++++----------- test/css/media.css | 5 +++++ test/less/media.less | 6 ++++++ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/less/parser.js b/lib/less/parser.js index e2d529fc..8498d989 100644 --- a/lib/less/parser.js +++ b/lib/less/parser.js @@ -691,13 +691,13 @@ less.Parser = function Parser(env) { var value, c = input.charCodeAt(i); if ((c > 57 || c < 45) || c === 47) return; - if (value = $(/^(-?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn|dpi|rem|vw|vh|vm|ch)?/)) { + if (value = $(/^(-?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn|dpi|dpcm|dppx|rem|vw|vh|vm|ch)?/)) { return new(tree.Dimension)(value[1], value[2]); } }, // - // A Ratio + // A Ratio // // 16/9 // @@ -707,7 +707,7 @@ less.Parser = function Parser(env) { if (value = $(/^(\d+\/\d+)/)) { return new(tree.Ratio)(value[1]); - } + } }, // @@ -751,13 +751,13 @@ less.Parser = function Parser(env) { var a, b; if (! peek(/^[@\w.%-]+\/[@\w.-]+/)) return; - + save(); if ((a = $(this.entity)) && $('/') && (b = $(this.entity))) { return new(tree.Shorthand)(a, b); } - + restore(); }, @@ -1166,18 +1166,18 @@ less.Parser = function Parser(env) { hasBlock, hasIdentifier; if (input.charAt(i) !== '@') return; - + if (value = $(this['import']) || $(this.media)) { return value; } - + name = $(/^@[a-z-]+/); - + nonVendorSpecificName = name; if (name.charAt(1) == '-' && name.indexOf('-', 2) > 0) { nonVendorSpecificName = "@" + name.slice(name.indexOf('-', 2) + 1); } - + switch(nonVendorSpecificName) { case "@font-face": hasBlock = true; @@ -1209,11 +1209,11 @@ less.Parser = function Parser(env) { hasIdentifier = true; break; } - + if (hasIdentifier) { name += " " + ($(/^[^{]+/) || '').trim(); } - + if (hasBlock) { if (rules = $(this.block)) { diff --git a/test/css/media.css b/test/css/media.css index 9ccb7214..5863f03f 100644 --- a/test/css/media.css +++ b/test/css/media.css @@ -143,3 +143,8 @@ } } } +@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (min-resolution: 128dpcm) { + .b { + background: red; + } +} diff --git a/test/less/media.less b/test/less/media.less index 2e44784f..13f8d29d 100644 --- a/test/less/media.less +++ b/test/less/media.less @@ -144,3 +144,9 @@ body { } } } + +@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (min-resolution: 128dpcm) { + .b { + background: red; + } +}