-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
this fix is needed for Firefox or other browsers that strictly follow dom/css spec which states that element.style should make properties available in camelCased form. Closes angular#569
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -88,6 +88,30 @@ function getStyle(element) { | |
return current; | ||
} | ||
|
||
|
||
/** | ||
* Converts dash-separated names to camelCase. Useful for dealing with css properties. | ||
*/ | ||
function camelCase(name) { | ||
var parts = name.split('-'); | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
IgorMinar
Author
Owner
|
||
|
||
name = parts.shift(); | ||
|
||
if (name == '' && parts.length) { | ||
// browser specific property starting with "-" | ||
name = parts.shift(); | ||
|
||
if (name == 'moz') name = 'Moz'; | ||
} | ||
|
||
forEach(parts, function(part) { | ||
name += part.charAt(0).toUpperCase(); | ||
name += part.substr(1); | ||
}); | ||
|
||
return name; | ||
} | ||
|
||
///////////////////////////////////////////// | ||
function jqLiteWrap(element) { | ||
if (isString(element) && element.charAt(0) != '<') { | ||
|
@@ -247,20 +271,27 @@ forEach({ | |
hasClass: JQLiteHasClass, | ||
|
||
css: function(element, name, value) { | ||
name = camelCase(name); | ||
|
||
if (isDefined(value)) { | ||
element.style[name] = value; | ||
} else { | ||
var val; | ||
|
||
if (msie <=8) { | ||
if (msie <= 8) { | ||
// this is some IE specific weirdness that jQuery 1.6.4 does not sure why | ||
val = element.currentStyle && element.currentStyle[name]; | ||
if (val === '') val = 'auto'; | ||
} | ||
|
||
val = val || element.style[name]; | ||
|
||
return (val === '') ? undefined : val; | ||
if (msie <= 8) { | ||
This comment has been minimized.
Sorry, something went wrong.
esprehn
|
||
// jquery weirdness :-/ | ||
val = (val === '') ? undefined : val; | ||
} | ||
|
||
return val; | ||
} | ||
}, | ||
|
||
|
2 comments
on commit d4226f2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The motivation of this feature feels wrong. You should always specify the ng:style properties in camel case, not dashed form. It's the difference between working in the object world vs the string world. element.style['border-color'] doesn't work in compliant browsers and ng:style="{'border-color': '...'}" shouldn't work either.
That's not to say that jqLite shouldn't be compliant with jQuery, but expecting this to work in ng:style seems wrong.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to be honest, I didn't realize that you were supposed to use element.style with camelCased properties until I looked into this bug. I think it's quite surprising and unexpected for most developers. what however made me implement this fix is that jquery already does this. so you should think of this as jqlite regression fix rather than ng:style fix.
change to this as it is more terse.
function camelCase(string){
return string.replace(/\D\W/g, function(all, letter){ return letter.toUpperCase(); });
}