Jeff Cross f14b212dc9 refactor: export core APIs from angular2/core
This change moves many APIs to the angular2/core export.

This change also automatically adds FORM_BINDINGS in
the application root injector.

BREAKING CHANGE:
    Many dependencies that were previously exported from specific
    APIs are now exported from angular2/core. Affected exports, which
    should now be included from angular2/core include:

    angular2/forms
    angular2/di
    angular2/directives
    angular2/change_detection
    angular2/bootstrap (except for dart users)
    angular2/render
    angular2/metadata
    angular2/debug
    angular2/pipes
Closes #3977
2015-09-05 07:01:34 +00:00

80 lines
2.2 KiB
TypeScript

import {ListWrapper} from 'angular2/src/core/facade/collection';
import {Math} from 'angular2/src/core/facade/math';
import {Component, Directive, View} from 'angular2/angular2';
import {
Offering,
ITEMS,
ITEM_HEIGHT,
VISIBLE_ITEMS,
VIEW_PORT_HEIGHT,
ROW_WIDTH,
HEIGHT
} from './common';
import {generateOfferings} from './random_data';
import {ScrollItemComponent} from './scroll_item';
import {NgFor} from 'angular2/core';
@Component({
selector: 'scroll-area',
})
@View({
directives: [ScrollItemComponent, NgFor],
template: `
<div>
<div id="scrollDiv"
[style.height.px]="viewPortHeight"
style="width: 1000px; border: 1px solid #000; overflow: scroll"
on-scroll="onScroll($event)">
<div id="padding"></div>
<div id="inner">
<scroll-item
template="ng-for #item of visibleItems"
[offering]="item">
</scroll-item>
</div>
</div>
</div>`
})
export class ScrollAreaComponent {
_fullList: Offering[];
visibleItems: Offering[];
viewPortHeight: number;
paddingDiv;
innerDiv;
constructor() {
this._fullList = generateOfferings(ITEMS);
this.visibleItems = [];
this.viewPortHeight = VIEW_PORT_HEIGHT;
this.onScroll(null);
}
onScroll(evt) {
var scrollTop = 0;
if (evt != null) {
var scrollDiv = evt.target;
if (this.paddingDiv == null) {
this.paddingDiv = scrollDiv.querySelector('#padding');
}
if (this.innerDiv == null) {
this.innerDiv = scrollDiv.querySelector('#inner');
this.innerDiv.style.setProperty('width', `${ROW_WIDTH}px`);
}
scrollTop = scrollDiv.scrollTop;
}
var iStart = Math.floor(scrollTop / ITEM_HEIGHT);
var iEnd = Math.min(iStart + VISIBLE_ITEMS + 1, this._fullList.length);
var padding = iStart * ITEM_HEIGHT;
if (this.innerDiv != null) {
this.innerDiv.style.setProperty('height', `${HEIGHT - padding}px`);
}
if (this.paddingDiv != null) {
this.paddingDiv.style.setProperty('height', `${padding}px`);
}
this.visibleItems = ListWrapper.slice(this._fullList, iStart, iEnd);
}
}