2016-06-23 09:47:54 -07:00

61 lines
1.6 KiB
TypeScript

/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {ListWrapper} from '../facade/collection';
import {isPresent} from '../facade/lang';
export class StylesCollectionEntry {
constructor(public time: number, public value: string|number) {}
matches(time: number, value: string|number): boolean {
return time == this.time && value == this.value;
}
}
export class StylesCollection {
styles: {[key: string]: StylesCollectionEntry[]} = {};
insertAtTime(property: string, time: number, value: string|number) {
var tuple = new StylesCollectionEntry(time, value);
var entries = this.styles[property];
if (!isPresent(entries)) {
entries = this.styles[property] = [];
}
// insert this at the right stop in the array
// this way we can keep it sorted
var insertionIndex = 0;
for (var i = entries.length - 1; i >= 0; i--) {
if (entries[i].time <= time) {
insertionIndex = i + 1;
break;
}
}
ListWrapper.insert(entries, insertionIndex, tuple);
}
getByIndex(property: string, index: number): StylesCollectionEntry {
var items = this.styles[property];
if (isPresent(items)) {
return index >= items.length ? null : items[index];
}
return null;
}
indexOfAtOrBeforeTime(property: string, time: number): number {
var entries = this.styles[property];
if (isPresent(entries)) {
for (var i = entries.length - 1; i >= 0; i--) {
if (entries[i].time <= time) return i;
}
}
return null;
}
}