From 002c49b32f98e64b3badc2d56705fa92cd161477 Mon Sep 17 00:00:00 2001 From: Miles Tinsley Date: Sun, 6 Jan 2013 16:57:31 +0000 Subject: [PATCH 1/2] Updated CPBrowserCSSProperty to support camel cased style property names and convert them into valid browser-aware CSS properties. --- AppKit/CPCompatibility.j | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index 6f9c6f56f..f86fe5365 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -348,20 +348,26 @@ function CPBrowserCSSProperty(aProperty) if (!browserProperty) return nil; - var prefixes = { - 'Webkit': '-webkit-', - 'Moz': '-moz-', - 'O': '-o-', - 'ms': '-ms-' + var parts = browserProperty.match(/[A-Z][a-z]+/g), + formattedBrowserProperty = browserProperty, + prefixes = { + 'Webkit': '-webkit', + 'Moz': '-moz', + 'O': '-o', + 'ms': '-ms' }; + // If there were any capitalized words in the browserProperty, insert a "-" between each one + if (parts && parts.length > 0) + formattedBrowserProperty = parts.join("-"); + for (var prefix in prefixes) { - if (browserProperty.substring(0, prefix.length) == prefix) + if (formattedBrowserProperty.substring(0, prefix.length) == prefix) { - return prefixes[prefix] + browserProperty.substring(prefix.length).toLowerCase(); + return prefixes[prefix] + formattedBrowserProperty.substring(prefix.length).toLowerCase(); } } - return browserProperty.toLowerCase(); + return formattedBrowserProperty.toLowerCase(); } From 964f3fe06dddfb68583a31098b76af5d6396b450 Mon Sep 17 00:00:00 2001 From: Miles Tinsley Date: Sun, 6 Jan 2013 17:20:37 +0000 Subject: [PATCH 2/2] Improved the reliability of CPBrowserCSSProperty by checking for the browser prefix *before* hyphenating the camel-cased string. This has the added benefit of ignoring unknown/unsupported prefixes, providing the property itself is camel-cased. For example: "LinearBackground" -> "linear-background" "Linear-Background" -> "linear-background" "linear-background" -> "linear-background" "fooLinearBackground" -> "linear-background" and "WebkitLinearBackground" -> "-webkit-linear-background" "MozLinearBackground" -> "-moz-linear-background" etc.. --- AppKit/CPCompatibility.j | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index f86fe5365..d2fd4ca06 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -348,26 +348,32 @@ function CPBrowserCSSProperty(aProperty) if (!browserProperty) return nil; - var parts = browserProperty.match(/[A-Z][a-z]+/g), - formattedBrowserProperty = browserProperty, - prefixes = { - 'Webkit': '-webkit', - 'Moz': '-moz', - 'O': '-o', - 'ms': '-ms' + var prefixes = { + 'Webkit': '-webkit-', + 'Moz': '-moz-', + 'O': '-o-', + 'ms': '-ms-' }; - // If there were any capitalized words in the browserProperty, insert a "-" between each one - if (parts && parts.length > 0) - formattedBrowserProperty = parts.join("-"); - for (var prefix in prefixes) { - if (formattedBrowserProperty.substring(0, prefix.length) == prefix) + if (browserProperty.substring(0, prefix.length) == prefix) { - return prefixes[prefix] + formattedBrowserProperty.substring(prefix.length).toLowerCase(); + var browserPropertyWithoutPrefix = browserProperty.substring(prefix.length), + parts = browserPropertyWithoutPrefix.match(/[A-Z][a-z]+/g); + + // If there were any capitalized words in the browserProperty, insert a "-" between each one + if (parts && parts.length > 0) + browserPropertyWithoutPrefix = parts.join("-"); + + return prefixes[prefix] + browserPropertyWithoutPrefix.toLowerCase(); } } - return formattedBrowserProperty.toLowerCase(); + var parts = browserProperty.match(/[A-Z][a-z]+/g); + + if (parts && parts.length > 0) + browserProperty = parts.join("-"); + + return browserProperty.toLowerCase(); }