Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 7209817

Browse files
committed
fix($compile): revert directiveNormalize behaviour to pre-1.6.x
1 parent 6a20b35 commit 7209817

File tree

2 files changed

+17
-72
lines changed

2 files changed

+17
-72
lines changed

src/ng/compile.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -3637,17 +3637,29 @@ function SimpleChange(previous, current) {
36373637
SimpleChange.prototype.isFirstChange = function() { return this.previousValue === _UNINITIALIZED_VALUE; };
36383638

36393639

3640-
var PREFIX_REGEXP = /^((?:x|data)*[:\-_])/i;
3641-
var SPECIAL_CHARS_REGEXP = /[:\-_]+(.)/g;
3640+
var PREFIX_REGEXP = /^((?:x|data)[:\-_])/i;
3641+
var SPECIAL_CHARS_REGEXP = /([:\-_]+(.))/g;
3642+
var MOZ_HACK_REGEXP = /^moz([A-Z])/;
36423643

36433644
/**
36443645
* Converts all accepted directives format into proper directive name.
36453646
* @param name Name to normalize
36463647
*/
36473648
function directiveNormalize(name) {
3649+
return camelCase(name.replace(PREFIX_REGEXP, ''));
3650+
}
3651+
3652+
/**
3653+
* Converts snake_case to camelCase.
3654+
* Also there is special case for Moz prefix starting with upper case letter.
3655+
* @param name Name to normalize
3656+
*/
3657+
function camelCase(name) {
36483658
return name
3649-
.replace(PREFIX_REGEXP, '')
3650-
.replace(SPECIAL_CHARS_REGEXP, fnCamelCaseReplace);
3659+
.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
3660+
return offset ? letter.toUpperCase() : letter;
3661+
})
3662+
.replace(MOZ_HACK_REGEXP, 'Moz$1');
36513663
}
36523664

36533665
/**

test/ng/compileSpec.js

+1-68
Original file line numberDiff line numberDiff line change
@@ -10658,10 +10658,7 @@ describe('$compile', function() {
1065810658
template:
1065910659
'<div class="a" ng-transclude="ng-transclude"></div>' +
1066010660
'<div class="b" ng:transclude="ng:transclude"></div>' +
10661-
'<div class="c" data-ng-transclude="data-ng-transclude"></div>' +
10662-
'<div class="d" -ng-transclude="-ng-transclude"></div>' +
10663-
'<div class="e" _ng_transclude="_ng_transclude"></div>' +
10664-
'<div class="f" :ng:transclude=":ng:transclude"></div>'
10661+
'<div class="c" data-ng-transclude="data-ng-transclude"></div>'
1066510662
};
1066610663
});
1066710664
});
@@ -10676,21 +10673,12 @@ describe('$compile', function() {
1067610673
var a = element.children().eq(0);
1067710674
var b = element.children().eq(1);
1067810675
var c = element.children().eq(2);
10679-
var d = element.children().eq(3);
10680-
var e = element.children().eq(4);
10681-
var f = element.children().eq(5);
1068210676
expect(a).toHaveClass('a');
1068310677
expect(b).toHaveClass('b');
1068410678
expect(c).toHaveClass('c');
10685-
expect(d).toHaveClass('d');
10686-
expect(e).toHaveClass('e');
10687-
expect(f).toHaveClass('f');
1068810679
expect(a.text()).toEqual('stuartbobkevin');
1068910680
expect(b.text()).toEqual('stuartbobkevin');
1069010681
expect(c.text()).toEqual('stuartbobkevin');
10691-
expect(d.text()).toEqual('stuartbobkevin');
10692-
expect(e.text()).toEqual('stuartbobkevin');
10693-
expect(f.text()).toEqual('stuartbobkevin');
1069410682
});
1069510683
});
1069610684

@@ -11742,18 +11730,6 @@ describe('$compile', function() {
1174211730
expect(element.attr('dash-test4')).toBe('JamieMason');
1174311731
}));
1174411732

11745-
it('should work if they are prefixed with special chars', inject(function() {
11746-
$rootScope.name = 'JamieMason';
11747-
element = $compile('<span -ng-attr-dash-test2="{{name}}" _ng-attr-dash-test3="{{name}}" :ng:attr-dash-test4="{{name}}"></span>')($rootScope);
11748-
expect(element.attr('dash-test2')).toBeUndefined();
11749-
expect(element.attr('dash-test3')).toBeUndefined();
11750-
expect(element.attr('dash-test4')).toBeUndefined();
11751-
$rootScope.$digest();
11752-
expect(element.attr('dash-test2')).toBe('JamieMason');
11753-
expect(element.attr('dash-test3')).toBe('JamieMason');
11754-
expect(element.attr('dash-test4')).toBe('JamieMason');
11755-
}));
11756-
1175711733
it('should keep attributes ending with -start single-element directives', function() {
1175811734
module(function($compileProvider) {
1175911735
$compileProvider.directive('dashStarter', function(log) {
@@ -11818,27 +11794,6 @@ describe('$compile', function() {
1181811794
expect(element.find('feDiffuseLighting').attr('surfaceScale')).toBe('1');
1181911795
expect(element.find('feSpecularLighting').attr('surfaceScale')).toBe('1');
1182011796
}));
11821-
11822-
it('should work if they are prefixed with special chars', inject(function($compile, $rootScope) {
11823-
$rootScope.dimensions = '0 0 0 0';
11824-
$rootScope.number = 0.42;
11825-
$rootScope.scale = 1;
11826-
11827-
element = $compile('<svg -ng-attr-view_box="{{dimensions}}">' +
11828-
'<filter _ng-attr-filter_units="{{number}}">' +
11829-
'<feDiffuseLighting -ng:attr_surface_scale="{{scale}}"' +
11830-
':ng:attr_diffuse_constant="{{number}}"></feDiffuseLighting>' +
11831-
'<feSpecularLighting _ng:attr_surface_scale="{{scale}}"' +
11832-
':ng-attr_diffuse_constant="{{number}}"></feSpecularLighting>')($rootScope);
11833-
expect(element.attr('viewBox')).toBeUndefined();
11834-
$rootScope.$digest();
11835-
expect(element.attr('viewBox')).toBe('0 0 0 0');
11836-
expect(element.find('filter').attr('filterUnits')).toBe('0.42');
11837-
expect(element.find('feDiffuseLighting').attr('surfaceScale')).toBe('1');
11838-
expect(element.find('feDiffuseLighting').attr('diffuseConstant')).toBe('0.42');
11839-
expect(element.find('feSpecularLighting').attr('surfaceScale')).toBe('1');
11840-
expect(element.find('feSpecularLighting').attr('diffuseConstant')).toBe('0.42');
11841-
}));
1184211797
});
1184311798

1184411799
describe('multi-element directive', function() {
@@ -12194,28 +12149,6 @@ describe('$compile', function() {
1219412149
expect(spans.eq(2)).toBeHidden();
1219512150
expect(spans.eq(3)).toBeHidden();
1219612151
}));
12197-
12198-
12199-
it('should support special char prefix', inject(function($compile, $rootScope) {
12200-
$rootScope.show = false;
12201-
element = $compile(
12202-
'<div>' +
12203-
'<span -ng-show-start="show"></span>' +
12204-
'<span -ng-show-end></span>' +
12205-
'<span :ng-show-start="show"></span>' +
12206-
'<span :ng-show-end></span>' +
12207-
'<span _ng-show-start="show"></span>' +
12208-
'<span _ng-show-end></span>' +
12209-
'</div>')($rootScope);
12210-
$rootScope.$digest();
12211-
var spans = element.find('span');
12212-
expect(spans.eq(0)).toBeHidden();
12213-
expect(spans.eq(1)).toBeHidden();
12214-
expect(spans.eq(2)).toBeHidden();
12215-
expect(spans.eq(3)).toBeHidden();
12216-
expect(spans.eq(4)).toBeHidden();
12217-
expect(spans.eq(5)).toBeHidden();
12218-
}));
1221912152
});
1222012153

1222112154
describe('$animate animation hooks', function() {

0 commit comments

Comments
 (0)