all files / src/ dom-manager.ts

70% Statements 21/30
100% Branches 0/0
35.71% Functions 5/14
68.97% Lines 20/29
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69                                                                                                 
declare var angular;
 
export interface IDOMManager {
    CreateRevealerElement(): ng.IAugmentedJQuery;
 
    AppendElement(element: ng.IAugmentedJQuery): void;
    PrependElement(element: ng.IAugmentedJQuery): void;
    AppendElementToContainer(element: ng.IAugmentedJQuery, containerToAppend: ng.IAugmentedJQuery): void;
    PrependElementToContainer(element: ng.IAugmentedJQuery, containerToPrepend: ng.IAugmentedJQuery): void;
 
    GetScrollBottomPosition(): number;
    GetScrollTopPosition(): number;
    GetRelativePositionOf(elementRatio: number): number;
 
    GetElementBottomPosition(element: ng.IAugmentedJQuery): number;
    GetElementTopPosition(element: ng.IAugmentedJQuery): number;
 
    FixScroll(relativePosition: number);
    Remove(element: ng.IAugmentedJQuery): void;
}
 
export class DOMManager implements IDOMManager {
    private container: ng.IAugmentedJQuery;
    private containerElement: HTMLElement;
 
    constructor(element: ng.IAugmentedJQuery) {
        this.container = element.parent();
        this.containerElement = this.container[0];
    }
 
    CreateRevealerElement(): ng.IAugmentedJQuery {
        return angular.element('<div class="revealer"></div>');
    }
 
    GetElementTopPosition(element: ng.IAugmentedJQuery): number {
        return element[0].offsetTop;
    }
    Remove(element: ng.IAugmentedJQuery): void {
        element.remove();
    }
    GetScrollTopPosition = () => {
        return this.containerElement.offsetTop + this.containerElement.scrollTop;
    }
    GetElementBottomPosition(element: ng.IAugmentedJQuery) {
        return element[0].offsetTop + element[0].offsetHeight;
    }
    GetScrollBottomPosition = () => {
        return this.containerElement.offsetTop + this.containerElement.scrollTop + this.containerElement.offsetHeight;
    }
    GetRelativePositionOf(elementRatio: number): number {
        return this.containerElement.offsetTop + this.containerElement.offsetHeight * elementRatio;
    }
    AppendElement = (element: ng.IAugmentedJQuery) => {
        this.container.append(element);
    }
    PrependElement = (element: ng.IAugmentedJQuery) => {
        this.container.prepend(element);
    }
    AppendElementToContainer = (element: ng.IAugmentedJQuery, containerToAppend: ng.IAugmentedJQuery) => {
        containerToAppend.append(element);
    }
    PrependElementToContainer = (element: ng.IAugmentedJQuery, containerToPrepend: ng.IAugmentedJQuery) => {
        containerToPrepend.prepend(element);
    }
    FixScroll(relativePosition: number) {
        this.containerElement.scrollTo(0, this.containerElement.offsetHeight * relativePosition);
    }
}