Skip to content

Commit

Permalink
Merge pull request #7 from khajjit/master
Browse files Browse the repository at this point in the history
Directive - pull request
  • Loading branch information
dhilt authored Dec 28, 2017
2 parents dafa537 + 6bf7c5e commit 1f2ddcb
Show file tree
Hide file tree
Showing 23 changed files with 3,200 additions and 1,550 deletions.
4,229 changes: 2,925 additions & 1,304 deletions package-lock.json

Large diffs are not rendered by default.

36 changes: 18 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,38 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^4.2.4",
"@angular/common": "^4.2.4",
"@angular/compiler": "^4.2.4",
"@angular/core": "^4.2.4",
"@angular/forms": "^4.2.4",
"@angular/http": "^4.2.4",
"@angular/platform-browser": "^4.2.4",
"@angular/platform-browser-dynamic": "^4.2.4",
"@angular/router": "^4.2.4",
"core-js": "^2.4.1",
"rxjs": "^5.4.2",
"@angular/animations": "^5.1.2",
"@angular/common": "^5.1.2",
"@angular/compiler": "^5.1.2",
"@angular/core": "^5.1.2",
"@angular/forms": "^5.1.2",
"@angular/http": "^5.1.2",
"@angular/platform-browser": "^5.1.2",
"@angular/platform-browser-dynamic": "^5.1.2",
"@angular/router": "^5.1.2",
"core-js": "^2.5.3",
"rxjs": "^5.5.6",
"zone.js": "^0.8.14"
},
"devDependencies": {
"@angular/cli": "1.4.4",
"@angular/compiler-cli": "^4.2.4",
"@angular/language-service": "^4.2.4",
"@angular/cli": "^1.6.2",
"@angular/compiler-cli": "^5.1.2",
"@angular/language-service": "^5.1.2",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"@types/node": "^6.0.95",
"codelyzer": "~3.2.0",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-coverage-istanbul-reporter": "^1.3.1",
"karma-jasmine": "^1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"typescript": "~2.3.3"
"typescript": "~2.4.2"
}
}
8 changes: 6 additions & 2 deletions src/app/app.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ <h1>
{{title}}
</h1>

<ui-scroll [datasource]="datasource" class="viewport">
<!--ui-scroll [datasource]="datasource" class="viewport">
<ng-template let-myItem="item" let-index="index">
<span>{{index}}</span> : <b>{{myItem?.text}}</b>
</ng-template>
</ui-scroll>
</ui-scroll-->

<div *uiScroll="let item of datasource">
<span>{{item.id}}</span> : <b>{{item.text}}</b>
</div>
35 changes: 19 additions & 16 deletions src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,33 @@ import { Observable } from 'rxjs/Observable';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
templateUrl: './app.component.html'
})
export class AppComponent {
private title = 'app works!';
private test: Boolean = true;

private datasource = {
get: (index: number, count: number) => Observable.create(observer => {
console.log('requested index = ' + index + ', count = ' + count);
setTimeout(() => {
let data = [];
for (let i = index; i <= index + count - 1; i++) {
data.push({
id: i,
text: "item #" + i
});
}
console.log('resolved ' + data.length + ' items (index = ' + index + ', count = ' + count + ')');
observer.next(data);
}, 50);
})
// list: [1,2,3,4,5,6,7,8,9]
test: [1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0],
get: (index: number, count: number) => Observable.create(observer => {
console.log('requested index = ' + index + ', count = ' + count);
setTimeout(() => {
let data = [];
for (let i = index; i <= index + count - 1; i++) {
data.push({
id: i,
text: "item #" + i
});
}
console.log('resolved ' + data.length + ' items (index = ' + index + ', count = ' + count + ')');
observer.next(data);
}, 50);
})
};

constructor() {
this.test = true;
}

}
12 changes: 6 additions & 6 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { UiScrollComponent } from './ui-scroll/ui-scroll.component';
import { UiScrollComponent } from './ui-scroll-directive/ui-scroll.component';
import { UiScrollDirective } from './ui-scroll-directive/ui-scroll.directive';

@NgModule({
declarations: [
AppComponent,
UiScrollComponent
UiScrollComponent,
UiScrollDirective
],
imports: [
BrowserModule
],
providers: [],
imports: [BrowserModule],
entryComponents: [UiScrollComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
Original file line number Diff line number Diff line change
@@ -1,76 +1,76 @@
class Data {

static scrollerId;
static source;

static startIndex = 90;
static bufferSize = 5;
static padding = 0.5; // of viewport height

static items = [];
static bof = false;
static eof = false;
static position = 0;

static lastIndex = null;

static setSource(datasource: any) {
if (!datasource || typeof datasource !== 'object' || typeof datasource.get !== 'function') {
throw new Error('Invalid datasource!');
}
self.source = datasource;
}

static setScrollerId() {
// todo dhilt : need to calculate
self.scrollerId = '0';
}

static getItemId(index: number): string {
return 'i-' + self.scrollerId + '-' + index.toString();
}

static getFirstVisibleItemIndex() {
for(let i = 0; i < self.items.length; i++) {
if(!self.items[i].invisible) {
return i;
}
}
return -1;
}

static getFirstVisibleItem() {
const index = self.getFirstVisibleItemIndex();
if(index >= 0) {
return self.items[index];
}
}

static getLastVisibleItemIndex() {
for(let i = self.items.length - 1; i >= 0; i--) {
if(!self.items[i].invisible) {
return i;
}
}
return -1;
}

static getLastVisibleItem() {
const index = self.getLastVisibleItemIndex();
if(index >= 0) {
return self.items[index];
}
}

static initialize(context) {
self.setSource(context.datasource);
self.setScrollerId();

context.getItems = () => self.items;
context.getItemId = self.getItemId.bind(context);
}

}

const self = Data;
export default Data
class Data {

static scrollerId;
static source;

static startIndex = 90;
static bufferSize = 5;
static padding = 0.5; // of viewport height

static items = [];
static bof = false;
static eof = false;
static position = 0;

static lastIndex = null;

static setSource(datasource: any) {
if (!datasource || typeof datasource !== 'object' || typeof datasource.get !== 'function') {
throw new Error('Invalid datasource!');
}
self.source = datasource;
}

static setScrollerId() {
// todo dhilt : need to calculate
self.scrollerId = '0';
}

static getItemId(index: number): string {
return 'i-' + self.scrollerId + '-' + index.toString();
}

static getFirstVisibleItemIndex() {
for(let i = 0; i < self.items.length; i++) {
if(!self.items[i].invisible) {
return i;
}
}
return -1;
}

static getFirstVisibleItem() {
const index = self.getFirstVisibleItemIndex();
if(index >= 0) {
return self.items[index];
}
}

static getLastVisibleItemIndex() {
for(let i = self.items.length - 1; i >= 0; i--) {
if(!self.items[i].invisible) {
return i;
}
}
return -1;
}

static getLastVisibleItem() {
const index = self.getLastVisibleItemIndex();
if(index >= 0) {
return self.items[index];
}
}

static initialize(context) {
self.setSource(context.datasource);
self.setScrollerId();

context.getItems = () => self.items;
context.getItemId = self.getItemId.bind(context);
}

}

const self = Data;
export default Data
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
let timer = null;
let next = null;

const runTimer = (delay) => {
timer = setTimeout(() => {
timer = null;
if(next) {
next();
next = null;
runTimer(delay);
}
}, delay)
};

const debouncedRound = (cb, delay) => {
if(!timer) {
cb();
}
else {
next = cb;
clearTimeout(timer);
}
runTimer(delay);
};

let timer = null;
let next = null;

const runTimer = (delay) => {
timer = setTimeout(() => {
timer = null;
if(next) {
next();
next = null;
runTimer(delay);
}
}, delay)
};

const debouncedRound = (cb, delay) => {
if(!timer) {
cb();
}
else {
next = cb;
clearTimeout(timer);
}
runTimer(delay);
};

export default debouncedRound
Loading

0 comments on commit 1f2ddcb

Please sign in to comment.