mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-04-09 09:31:01 +00:00
feat(ng:include): enable/disable scrolling through autoscroll attribute
This commit is contained in:
parent
f2119c7524
commit
5c19766063
2 changed files with 80 additions and 4 deletions
|
|
@ -43,6 +43,13 @@
|
|||
* instance of angular.module.ng.$rootScope.Scope to set the HTML fragment to.
|
||||
* @param {string=} onload Expression to evaluate when a new partial is loaded.
|
||||
*
|
||||
* @param {string=} autoscroll Whether `ng:include` should call {@link angular.module.ng.$autoScroll
|
||||
* $autoScroll} to scroll the viewport after the content is loaded.
|
||||
*
|
||||
* - If the attribute is not set, disable scrolling.
|
||||
* - If the attribute is set without value, enable scrolling.
|
||||
* - Otherwise enable scrolling only if the expression evaluates to truthy value.
|
||||
*
|
||||
* @example
|
||||
<doc:example>
|
||||
<doc:source jsfiddle="false">
|
||||
|
|
@ -84,7 +91,9 @@ angularWidget('ng:include', function(element){
|
|||
var compiler = this,
|
||||
srcExp = element.attr("src"),
|
||||
scopeExp = element.attr("scope") || '',
|
||||
onloadExp = element[0].getAttribute('onload') || ''; //workaround for jquery bug #7537
|
||||
onloadExp = element[0].getAttribute('onload') || '', //workaround for jquery bug #7537
|
||||
autoScrollExp = element.attr('autoscroll');
|
||||
|
||||
if (element[0]['ng:compiled']) {
|
||||
this.descend(true);
|
||||
this.directives(true);
|
||||
|
|
@ -123,7 +132,9 @@ angularWidget('ng:include', function(element){
|
|||
if (childScope) childScope.$destroy();
|
||||
childScope = useScope ? useScope : scope.$new();
|
||||
compiler.compile(element)(childScope);
|
||||
$autoScroll();
|
||||
if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
|
||||
$autoScroll();
|
||||
}
|
||||
scope.$eval(onloadExp);
|
||||
}
|
||||
}).error(clearContent);
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ describe('widget', function() {
|
|||
});
|
||||
|
||||
|
||||
describe('ng:include', inject(function($rootScope, $compile) {
|
||||
describe('ng:include', function() {
|
||||
|
||||
function putIntoCache(url, content) {
|
||||
return function($templateCache) {
|
||||
|
|
@ -227,9 +227,74 @@ describe('widget', function() {
|
|||
expect(log.join('; ')).toEqual('url2; url2'); // it's here twice because we go through at
|
||||
// least two digest cycles
|
||||
}));
|
||||
}));
|
||||
|
||||
|
||||
describe('autoscoll', function() {
|
||||
var autoScrollSpy;
|
||||
|
||||
function spyOnAutoScroll() {
|
||||
return function($provide) {
|
||||
autoScrollSpy = jasmine.createSpy('$autoScroll');
|
||||
$provide.value('$autoScroll', autoScrollSpy);
|
||||
};
|
||||
}
|
||||
|
||||
function compileAndLink(tpl) {
|
||||
return function($compile, $rootScope) {
|
||||
$compile(tpl)($rootScope);
|
||||
};
|
||||
}
|
||||
|
||||
function changeTplAndValueTo(template, value) {
|
||||
return function($rootScope, $browser) {
|
||||
$rootScope.$apply(function() {
|
||||
$rootScope.tpl = template;
|
||||
$rootScope.value = value;
|
||||
});
|
||||
$browser.defer.flush();
|
||||
};
|
||||
}
|
||||
|
||||
beforeEach(inject(
|
||||
spyOnAutoScroll(),
|
||||
putIntoCache('template.html', 'CONTENT'),
|
||||
putIntoCache('another.html', 'CONTENT')));
|
||||
|
||||
|
||||
it('should call $autoScroll if autoscroll attribute is present', inject(
|
||||
compileAndLink('<ng:include src="tpl" autoscroll></ng:include>'),
|
||||
changeTplAndValueTo('template.html'), function() {
|
||||
expect(autoScrollSpy).toHaveBeenCalledOnce();
|
||||
}));
|
||||
|
||||
|
||||
it('should call $autoScroll if autoscroll evaluates to true', inject(
|
||||
compileAndLink('<ng:include src="tpl" autoscroll="value"></ng:include>'),
|
||||
changeTplAndValueTo('template.html', true),
|
||||
changeTplAndValueTo('another.html', 'some-string'),
|
||||
changeTplAndValueTo('template.html', 100), function() {
|
||||
expect(autoScrollSpy).toHaveBeenCalled();
|
||||
expect(autoScrollSpy.callCount).toBe(3);
|
||||
}));
|
||||
|
||||
|
||||
it('should not call $autoScroll if autoscroll attribute is not present', inject(
|
||||
compileAndLink('<ng:include src="tpl"></ng:include>'),
|
||||
changeTplAndValueTo('template.html'), function() {
|
||||
expect(autoScrollSpy).not.toHaveBeenCalled();
|
||||
}));
|
||||
|
||||
|
||||
it('should not call $autoScroll if autoscroll evaluates to false', inject(
|
||||
compileAndLink('<ng:include src="tpl" autoscroll="value"></ng:include>'),
|
||||
changeTplAndValueTo('template.html', false),
|
||||
changeTplAndValueTo('template.html', undefined),
|
||||
changeTplAndValueTo('template.html', null), function() {
|
||||
expect(autoScrollSpy).not.toHaveBeenCalled();
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
describe('a', function() {
|
||||
it('should prevent default action to be executed when href is empty',
|
||||
inject(function($rootScope, $compile) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue