-
-
Notifications
You must be signed in to change notification settings - Fork 48
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
715 additions
and
231 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import { ElementRef, TemplateRef, ViewContainerRef } from "@angular/core"; | ||
import { Pager } from "../pager"; | ||
export declare class PagerDirective { | ||
private element; | ||
pager: Pager; | ||
private _selectedIndex; | ||
private viewInitialized; | ||
selectedIndex: number; | ||
constructor(element: ElementRef); | ||
ngAfterViewInit(): void; | ||
} | ||
export declare class PagerItemDirective { | ||
private owner; | ||
private templateRef; | ||
private viewContainer; | ||
private item; | ||
constructor(owner: PagerDirective, templateRef: TemplateRef<any>, viewContainer: ViewContainerRef); | ||
private ensureItem(); | ||
ngOnInit(): void; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
import { ElementRef, Directive, Input, TemplateRef, ViewContainerRef } from "@angular/core"; | ||
import { Pager, PagerItem } from "../pager"; | ||
import { View } from "ui/core/view"; | ||
import * as platform from "platform"; | ||
@Directive({ | ||
selector: 'Pager', | ||
inputs: ['selectedIndex'] | ||
}) | ||
export class PagerDirective { | ||
public pager: Pager; | ||
private _selectedIndex: number; | ||
private viewInitialized: boolean; | ||
|
||
get selectedIndex(): number { | ||
return this._selectedIndex; | ||
} | ||
|
||
set selectedIndex(value) { | ||
this._selectedIndex = value; | ||
if (this.viewInitialized) { | ||
this.pager.selectedIndex = this._selectedIndex; | ||
} | ||
} | ||
|
||
constructor(private element: ElementRef) { | ||
this.pager = element.nativeElement; | ||
if (platform.isIOS) { | ||
this.pager.items = []; | ||
} | ||
} | ||
|
||
ngAfterViewInit() { | ||
this.viewInitialized = true; | ||
this.pager.selectedIndex = this._selectedIndex; | ||
} | ||
} | ||
|
||
@Directive({ | ||
selector: '[pagerItem]' | ||
}) | ||
export class PagerItemDirective { | ||
private item: PagerItem; | ||
constructor( | ||
private owner: PagerDirective, | ||
private templateRef: TemplateRef<any>, | ||
private viewContainer: ViewContainerRef | ||
) { | ||
} | ||
|
||
private ensureItem() { | ||
if (!this.item) { | ||
this.item = new PagerItem(); | ||
} | ||
} | ||
|
||
ngOnInit() { | ||
this.ensureItem(); | ||
|
||
const viewRef = this.viewContainer.createEmbeddedView(this.templateRef); | ||
//Filter out text nodes, etc | ||
const realViews = viewRef.rootNodes.filter((node) => | ||
node.nodeName && node.nodeName !== '#text') | ||
if (realViews.length > 0) { | ||
if (platform.isIOS) { | ||
this.item = realViews[0]; | ||
let newItems: Array<any> = (this.owner.pager.views || []).concat([this.item]); | ||
this.owner.pager.views = newItems; | ||
newItems.forEach((item, index) => { | ||
this.owner.pager.items.push(item); | ||
}); | ||
} else if (platform.isAndroid) { | ||
this.item._addView(realViews[0]); | ||
const newItems = (this.owner.pager.items || []).concat([this.item]); | ||
this.owner.pager.items = newItems; | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"main": "index.js" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1 @@ | ||
import { StackLayout } from "ui/layouts/stack-layout"; | ||
import { Property } from "ui/core/dependency-observable"; | ||
export declare class Pager extends StackLayout { | ||
private _androidViewId; | ||
private _pagerAdapter; | ||
private _transformer; | ||
private _android; | ||
private _disableSwipe; | ||
static selectedIndexProperty: Property; | ||
constructor(); | ||
disableSwipe: boolean; | ||
readonly android: android.support.v4.view.ViewPager; | ||
readonly _nativeView: android.support.v4.view.ViewPager; | ||
readonly pagerAdapter: android.support.v4.view.PagerAdapter; | ||
transformer: any; | ||
selectedIndex: number; | ||
_createUI(): void; | ||
onLoaded(): void; | ||
updateIndex(index: number): void; | ||
runUpdate(): void; | ||
} | ||
export * from './src/android/pager'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,199 +1 @@ | ||
import { StackLayout } from "ui/layouts/stack-layout"; | ||
import { PropertyMetadataSettings, Property, PropertyChangeData } from "ui/core/dependency-observable"; | ||
import { PropertyMetadata } from "ui/core/proxy"; | ||
import { View } from "ui/core/view"; | ||
declare var com; | ||
function onSelectedIndexChanged(data: PropertyChangeData) { | ||
const item = <Pager>data.object; | ||
item.updateIndex(item.selectedIndex); | ||
} | ||
export class Pager extends StackLayout { | ||
private _androidViewId: number; | ||
private _pagerAdapter: android.support.v4.view.PagerAdapter; | ||
private _transformer; | ||
private _android: android.support.v4.view.ViewPager; | ||
private _disableSwipe: boolean; | ||
public static selectedIndexProperty = new Property("selectedIndex", "Pager", new PropertyMetadata(undefined, PropertyMetadataSettings.None)); | ||
constructor() { | ||
super(); | ||
} | ||
get disableSwipe(): boolean { | ||
return this._disableSwipe; | ||
} | ||
set disableSwipe(value: boolean) { | ||
this._disableSwipe = value; | ||
} | ||
get android() { | ||
return this._android; | ||
} | ||
get _nativeView() { | ||
return this._android; | ||
} | ||
get pagerAdapter() { | ||
return this._pagerAdapter; | ||
} | ||
set transformer(value) { | ||
switch (value) { | ||
case "AccordionTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.AccordionTransformer; | ||
break; | ||
case "BackgroundToForegroundTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.BackgroundToForegroundTransformer; | ||
break; | ||
case "CubeInTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.CubeInTransformer; | ||
break; | ||
case "CubeOutTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.CubeOutTransformer; | ||
break; | ||
case "DefaultTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.DefaultTransformer; | ||
break; | ||
case "DepthPageTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.DepthPageTransformer; | ||
break; | ||
case "DrawFromBackTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.DrawFromBackTransformer; | ||
break; | ||
case "FlipHorizontalTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.FlipHorizontalTransformer; | ||
break; | ||
case "FlipVerticalTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.FlipVerticalTransformer; | ||
break; | ||
case "ForegroundToBackgroundTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.ForegroundToBackgroundTransformer; | ||
break; | ||
case "RotateDownTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.RotateDownTransformer; | ||
break; | ||
case "RotateUpTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.RotateUpTransformer; | ||
break; | ||
case "StackTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.StackTransformer; | ||
break; | ||
case "TabletTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.TabletTransformer; | ||
break; | ||
case "ZoomInTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.ZoomInTransformer; | ||
break; | ||
case "ZoomOutSlideTransformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.ZoomOutSlideTransformer; | ||
break; | ||
case "ZoomOutTranformer": | ||
this._transformer = com.eftimoff.viewpagertransformers.ZoomOutTranformer; | ||
break; | ||
} | ||
} | ||
get transformer() { | ||
return this._transformer; | ||
} | ||
get selectedIndex() { | ||
return this._getValue(Pager.selectedIndexProperty); | ||
} | ||
set selectedIndex(value: number) { | ||
this._setValue(Pager.selectedIndexProperty, value); | ||
} | ||
_createUI() { | ||
if (!this._androidViewId) { | ||
this._androidViewId = android.view.View.generateViewId(); | ||
}; | ||
if (this.disableSwipe) { | ||
this._android = new TNSViewPager(this._context, true); //new android.support.v4.view.ViewPager(this._context); | ||
} else { | ||
this._android = new TNSViewPager(this._context); //new android.support.v4.view.ViewPager(this._context); | ||
} | ||
|
||
this._android.setId(this._androidViewId); | ||
} | ||
|
||
onLoaded() { | ||
super.onLoaded(); | ||
const that = new WeakRef(this); | ||
this._pagerAdapter = new PagerAdapter(this); | ||
this._android.addOnPageChangeListener(new android.support.v4.view.ViewPager.OnPageChangeListener({ | ||
onPageSelected: function (position: number) { | ||
that.get().selectedIndex = position; | ||
}, | ||
onPageScrolled: function (position, positionOffset, positionOffsetPixels) { | ||
}, | ||
onPageScrollStateChanged: function (state) { | ||
} | ||
})); | ||
this._android.setAdapter(this._pagerAdapter); | ||
if (this.transformer) { | ||
this._android.setPageTransformer(false, new this._transformer()); | ||
} | ||
if (this.selectedIndex) { | ||
this._android.setCurrentItem(this.selectedIndex); | ||
} | ||
} | ||
updateIndex(index: number) { | ||
if (this._android && index) { | ||
this._android.setCurrentItem(index); | ||
} | ||
} | ||
runUpdate() { | ||
if (this._android.getChildAt(0) instanceof org.nativescript.widgets.ContentLayout) { | ||
this._android.removeViewAt(0); | ||
} | ||
this._pagerAdapter.notifyDataSetChanged(); | ||
if (this._pagerAdapter.getCount() > 0) { | ||
this._android.setOffscreenPageLimit(this._pagerAdapter.getCount()); | ||
} | ||
|
||
} | ||
|
||
} | ||
Pager.selectedIndexProperty.onValueChanged = onSelectedIndexChanged; | ||
class PagerAdapter extends android.support.v4.view.PagerAdapter { | ||
private owner: Pager; | ||
constructor(owner) { | ||
super(); | ||
this.owner = owner; | ||
return global.__native(this); | ||
} | ||
|
||
instantiateItem(collection: android.view.ViewGroup, position: number) { | ||
return this.owner.android.getChildAt(position); | ||
} | ||
|
||
destroyItem(container: android.view.ViewGroup, position: number, object) { | ||
container.removeView(object); | ||
} | ||
getCount(): number { | ||
|
||
return this.owner.android ? this.owner.android.getChildCount() : 0; | ||
} | ||
isViewFromObject(view: android.view.View, object) { | ||
return view === object; | ||
} | ||
} | ||
|
||
class TNSViewPager extends android.support.v4.view.ViewPager { | ||
disableSwipe: boolean; | ||
constructor(context, disableSwipe?: boolean) { | ||
super(context); | ||
if (disableSwipe) { | ||
this.disableSwipe = disableSwipe; | ||
} | ||
return global.__native(this); | ||
} | ||
onInterceptTouchEvent(ev) { | ||
if (this.disableSwipe) { | ||
return false; | ||
} else { | ||
return super.onInterceptTouchEvent(ev); | ||
} | ||
} | ||
onTouchEvent(ev) { | ||
if (this.disableSwipe) { | ||
return false; | ||
} | ||
else { | ||
return super.onTouchEvent(ev); | ||
} | ||
} | ||
} | ||
export * from './src/android/pager'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1 @@ | ||
import { StackLayout } from "ui/layouts/stack-layout"; | ||
export declare class Pager extends StackLayout { | ||
constructor(); | ||
} | ||
export * from './src/ios/pager'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1 @@ | ||
import { StackLayout } from "ui/layouts/stack-layout"; | ||
export class Pager extends StackLayout { | ||
constructor() { | ||
super(); | ||
} | ||
} | ||
export * from './src/ios/pager'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import { Property } from "ui/core/dependency-observable"; | ||
import { View } from "ui/core/view"; | ||
import * as common from "../common"; | ||
export declare class Pager extends common.Pager { | ||
private _android; | ||
private _pagerAdapter; | ||
private _views; | ||
private _transformer; | ||
static pagesCountProperty: Property; | ||
constructor(); | ||
readonly android: android.support.v4.view.ViewPager; | ||
pagesCount: number; | ||
readonly _nativeView: android.support.v4.view.ViewPager; | ||
_createUI(): void; | ||
updateIndex(index: number): void; | ||
updatePagesCount(value: number): void; | ||
updateItems(oldItems: Array<View>, newItems: Array<View>): void; | ||
readonly _childrenCount: number; | ||
_eachChildView(callback: (child: View) => boolean): void; | ||
transformer: any; | ||
} | ||
export declare class PagerItem extends common.PagerItem { | ||
constructor(); | ||
} |
Oops, something went wrong.