@triniwiz/nativescript-pager
Version:
A Carousel/Pager plugin for NativeScript
1,005 lines • 38.5 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import { Color, Device, ObservableArray, profile, Property, Screen, StackLayout, View, Utils } from "@nativescript/core";
import { autoplayDelayProperty, autoPlayProperty, disableSwipeProperty, Indicator, indicatorColorProperty, indicatorProperty, indicatorSelectedColorProperty, ITEMLOADING, itemsProperty, itemTemplatesProperty, LOADMOREITEMS, orientationProperty, PagerBase, PagerItem, peakingProperty, selectedIndexProperty, showIndicatorProperty, spacingProperty, Transformer } from "./common";
export * from "./common";
export { Transformer } from "./common";
function notifyForItemAtIndex(owner, nativeView, view, eventName, index) {
let args = {
eventName: eventName,
object: owner,
index: index,
view: view,
ios: undefined,
android: nativeView,
};
owner.notify(args);
return args;
}
const PLACEHOLDER = "PLACEHOLDER";
export class Pager extends PagerBase {
constructor() {
super();
this._oldDisableAnimation = false;
this._realizedItems = new Map();
this._realizedTemplates = new Map();
this.lastEvent = 0;
this._lastSpacing = 0;
this._lastPeaking = 0;
this._selectedIndexBeforeLoad = 0;
this._observableArrayHandler = (args) => {
if (this.indicatorView && this.showIndicator) {
this.indicatorView.setCount(this._childrenCount);
}
if (this.pagerAdapter) {
com.github.triniwiz.pager.Utils.updateCollection(JSON.stringify({
action: args.action,
index: args.index,
addedCount: args.addedCount,
removedCount: args.removed ? args.removed.length : 0
}), this.pagerAdapter);
/*switch (args.action) {
case ChangeType.Add:
this.pagerAdapter.notifyItemRangeInserted(
args.index,
args.addedCount
);
break;
case ChangeType.Delete:
this.pagerAdapter.notifyItemRangeRemoved(
args.index,
args.removed.length
);
break;
case ChangeType.Splice:
if (args.removed.length > 0) {
this.pagerAdapter.notifyItemRangeRemoved(
args.index,
args.removed.length
);
}
if (args.addedCount > 0) {
this.pagerAdapter.notifyItemRangeInserted(
args.index,
args.addedCount
);
}
break;
case ChangeType.Update:
this.pagerAdapter.notifyItemChanged(args.index);
break;
default:
break;
}
*/
this._initAutoPlay(this.autoPlay);
}
};
this._horizontalOffset = 0;
this._verticalOffset = 0;
this._childrenViews = new Map();
this._transformers = [];
}
itemTemplateUpdated(oldData, newData) {
}
get views() {
return this._views;
}
set views(value) {
this._views = value;
}
// @ts-ignore
get android() {
return this.nativeViewProtected;
}
get pager() {
return this._pager;
}
get indicatorView() {
return this._indicatorView;
}
createNativeView() {
const that = new WeakRef(this);
const nativeView = new android.widget.RelativeLayout(this._context);
this._pager = new androidx.viewpager2.widget.ViewPager2(this._context);
const sdkVersion = parseInt(Device.sdkVersion, 10);
if (sdkVersion >= 21) {
this._pager.setNestedScrollingEnabled(true);
}
if (this.orientation === "vertical") {
this._pager.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL);
}
else {
this._pager.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL);
}
initPagerChangeCallback();
this._pageListener = new PageChangeCallback(that);
initPagerRecyclerAdapter();
this._pagerAdapter = new PagerRecyclerAdapter(new WeakRef(this));
this.compositeTransformer = new androidx.viewpager2.widget.CompositePageTransformer();
this.pager.setUserInputEnabled(!this.disableSwipe);
this.on(View.layoutChangedEvent, this.onLayoutChange, this);
nativeView.addView(this.pager, new android.widget.RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, android.widget.RelativeLayout.LayoutParams.MATCH_PARENT));
this._indicatorView = new com.rd.PageIndicatorView2(this._context);
const params = new android.widget.RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT, android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM);
params.addRule(android.widget.RelativeLayout.CENTER_HORIZONTAL);
params.setMargins(0, 0, 0, 10 * Screen.mainScreen.scale);
this._indicatorView.setLayoutParams(params);
// this._indicatorView.setViewPager(this.pager);
this._indicatorView.setDynamicCount(true);
this._indicatorView.setInteractiveAnimation(true);
nativeView.addView(this._indicatorView);
return nativeView;
}
initNativeView() {
super.initNativeView();
// Store disable animation value
this._oldDisableAnimation = this.disableAnimation;
// Disable animation to set currentItem w/o animation
this.disableAnimation = true;
this.pager.registerOnPageChangeCallback(this._pageListener);
this.pager.setAdapter(this._pagerAdapter);
if (this._androidViewId < 0) {
this._androidViewId = android.view.View.generateViewId();
}
if (this.pagesCount > 0) {
this.pager.setOffscreenPageLimit(this.pagesCount);
}
else {
this.pager.setOffscreenPageLimit(3);
}
this._setIndicator(this.indicator);
// this.nativeView.setId(this._androidViewId);
this._setPeaking(this.peaking);
this._setSpacing(this.spacing);
this._setTransformers(this.transformers ? this.transformers : "");
if (this.showIndicator) {
this._indicatorView.setCount(this.items ? this.items.length : 0);
}
else {
this._indicatorView.setCount(0);
}
}
onLayoutChange(args) {
this._setSpacing(args.object.spacing);
this._setPeaking(args.object.peaking);
this._setTransformers(this.transformers ? this.transformers : "");
this._updateScrollPosition();
// Set disableAnimation to original value
this.disableAnimation = this._oldDisableAnimation;
}
_setSpacing(value) {
const size = this.convertToSize(value);
const newSpacing = size !== this._lastSpacing;
if (newSpacing) {
if (this.marginTransformer) {
this.compositeTransformer.removeTransformer(this.marginTransformer);
}
this.marginTransformer = new androidx.viewpager2.widget.MarginPageTransformer(size);
this.compositeTransformer.addTransformer(this.marginTransformer);
this._lastSpacing = size;
}
}
_setPeaking(value) {
const size = this.convertToSize(value);
const newPeaking = size !== this._lastPeaking;
if (newPeaking) {
this.pager.setClipToPadding(false);
const left = this.orientation === "horizontal" ? size : 0;
const top = this.orientation === "horizontal" ? 0 : size;
this.pager.setPadding(left, top, left, top);
this.pager.setClipChildren(false);
this._lastPeaking = size;
}
}
[spacingProperty.setNative](value) {
this._setSpacing(value);
}
[peakingProperty.setNative](value) {
this._setPeaking(value);
}
[indicatorProperty.setNative](value) {
this._setIndicator(value);
}
_setIndicator(value) {
const AnimationType = com.rd.animation.type.AnimationType;
switch (value) {
case Indicator.None:
this.indicatorView.setAnimationType(AnimationType.NONE);
break;
case Indicator.Worm:
this.indicatorView.setAnimationType(AnimationType.WORM);
break;
case Indicator.Fill:
this.indicatorView.setAnimationType(AnimationType.FILL);
break;
case Indicator.Swap:
this.indicatorView.setAnimationType(AnimationType.SWAP);
break;
case Indicator.THIN_WORM:
this.indicatorView.setAnimationType(AnimationType.THIN_WORM);
break;
default:
break;
}
}
_setTransformers(transformers) {
if (!Utils.isString(transformers)) {
return;
}
const transformsArray = transformers.split(" ");
this._transformers.forEach((transformer) => {
this.compositeTransformer.removeTransformer(transformer);
});
for (const transformer of transformsArray) {
if (transformer === Transformer.SCALE) {
initZoomOutPageTransformer();
const nativeTransformer = new ZoomOutPageTransformer();
nativeTransformer.owner = new WeakRef(this);
this._transformers.push(nativeTransformer);
this.compositeTransformer.addTransformer(nativeTransformer);
}
}
if (transformsArray.length === 0) {
this._transformers.forEach((transformer) => {
this.compositeTransformer.removeTransformer(transformer);
});
}
this.pager.setPageTransformer(this.compositeTransformer);
}
disposeNativeView() {
this.off(View.layoutChangedEvent, this.onLayoutChange, this);
this._childrenViews.clear();
this._realizedItems.clear();
this._realizedTemplates.clear();
this._pageListener = null;
this._pagerAdapter = null;
this._transformers = [];
if (this._observableArrayInstance) {
this._observableArrayInstance.off(ObservableArray.changeEvent, this._observableArrayHandler);
this._observableArrayInstance = null;
}
super.disposeNativeView();
}
get disableAnimation() {
return this._disableAnimation;
}
set disableAnimation(value) {
this._disableAnimation = value;
}
get pagerAdapter() {
return this._pagerAdapter;
}
get _childrenCount() {
return this.items
? this.items.length
: this._childrenViews
? this._childrenViews.size
: 0;
}
[indicatorColorProperty.setNative](value) {
if (this.indicatorView) {
if (value instanceof Color) {
this.indicatorView.setUnselectedColor(value.android);
}
else if (Utils.isString(value)) {
this.indicatorView.setUnselectedColor(new Color(value).android);
}
}
}
[indicatorSelectedColorProperty.setNative](value) {
if (this.indicatorView) {
if (value instanceof Color) {
this.indicatorView.setSelectedColor(value.android);
}
else if (Utils.isString(value)) {
this.indicatorView.setSelectedColor(new Color(value).android);
}
}
}
[disableSwipeProperty.setNative](value) {
if (this.pager) {
this.pager.setUserInputEnabled(!value);
}
}
[itemsProperty.getDefault]() {
return null;
}
[itemsProperty.setNative](value) {
if (value && value.length && this.showIndicator) {
this.indicatorView.setCount(this._childrenCount);
}
if (this._observableArrayInstance) {
this._observableArrayInstance.off(ObservableArray.changeEvent, this._observableArrayHandler);
this._observableArrayInstance = null;
}
if (value) {
if (value instanceof ObservableArray) {
const adapter = this.pagerAdapter;
if (!adapter)
return;
selectedIndexProperty.coerce(this);
this._observableArrayInstance = value;
this._observableArrayInstance.on(ObservableArray.changeEvent, this._observableArrayHandler);
}
else {
this.refresh();
selectedIndexProperty.coerce(this);
}
}
}
_updateScrollPosition() {
const index = this.circularMode
? this.selectedIndex + 1
: this.selectedIndex;
if (this.pager.getCurrentItem() !== index) {
this.indicatorView.setInteractiveAnimation(false);
this.pager.setCurrentItem(index, false);
this._indicatorView.setSelected(this.selectedIndex);
}
setTimeout(() => {
this._initAutoPlay(this.autoPlay);
});
}
onLoaded() {
super.onLoaded();
if (!this.items && this._childrenCount > 0) {
initStaticPagerStateAdapter();
if (!(this._pagerAdapter instanceof StaticPagerStateAdapter)) {
this._pagerAdapter = new StaticPagerStateAdapter(new WeakRef(this));
this.pager.setAdapter(this._pagerAdapter);
selectedIndexProperty.coerce(this);
setTimeout(() => {
this.pager.setCurrentItem(this.selectedIndex, false);
if (this.indicatorView) {
this.indicatorView.setSelection(this.selectedIndex);
}
}, 0);
}
}
}
[selectedIndexProperty.setNative](value) {
if (this.isLoaded && this.isLayoutValid && this.pager) {
const index = this.circularMode ? value + 1 : value;
if (this.pager.getCurrentItem() !== index) {
// this.indicatorView.setInteractiveAnimation(!this.disableAnimation);
this.pager.setCurrentItem(index, !this.disableAnimation);
if (this.indicatorView) {
// this.indicatorView.setSelection(value);
}
}
}
}
scrollToIndexAnimated(index, animate) {
if (this.pager) {
this.pager.setCurrentItem(index, animate);
}
}
_onItemsChanged(oldValue, newValue) {
}
refresh() {
if (this.pager && this._pagerAdapter) {
this.pager.requestLayout();
this.pager.getAdapter().notifyDataSetChanged();
}
}
updatePagesCount(value) {
if (this.pager) {
this._pagerAdapter.notifyDataSetChanged();
this.pager.setOffscreenPageLimit(value);
}
}
onUnloaded() {
// this._android.setAdapter(null);
super.onUnloaded();
}
eachChildView(callback) {
if (this._realizedItems && this._realizedItems.size > 0) {
this._realizedItems.forEach((view, key) => {
callback(view);
});
}
}
updateAdapter() {
this._pagerAdapter.notifyDataSetChanged();
}
_selectedIndexUpdatedFromNative(newIndex) {
}
[itemTemplatesProperty.getDefault]() {
return null;
}
[itemTemplatesProperty.setNative](value) {
this._itemTemplatesInternal = new Array(this._defaultTemplate);
if (value) {
this._itemTemplatesInternal = this._itemTemplatesInternal.concat(value);
}
this._pagerAdapter = new PagerRecyclerAdapter();
this._pagerAdapter.owner = new WeakRef(this);
this.pager.setAdapter(this._pagerAdapter);
this.refresh();
}
[showIndicatorProperty.setNative](value) {
//const hasParent = this.indicatorView.getParent();
if (!this.indicatorView) {
return;
}
if (value) {
// if (!hasParent) {
// this.nativeView.addView(this.indicatorView);
// }
//this._indicatorView.setVisibility(android.view.View.VISIBLE);
this.indicatorView.setCount(this.items ? this.items.length : 0);
this.indicatorView.setSelected(this.selectedIndex);
}
else {
this.indicatorView.setCount(0);
// this._indicatorView.setVisibility(android.view.View.GONE);
// if (hasParent) {
// this.nativeView.removeView(this.indicatorView);
// }
}
}
_addChildFromBuilder(name, value) {
if (value instanceof PagerItem) {
if (!value.parent && value.parent !== this) {
this._childrenViews.set(this._childrenViews.size, value);
}
}
}
[orientationProperty.setNative](value) {
if (value === "vertical") {
this._pager.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL);
}
else {
this._pager.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL);
}
}
get horizontalOffset() {
return this._horizontalOffset / Utils.layout.getDisplayDensity();
}
get verticalOffset() {
return this._verticalOffset / Utils.layout.getDisplayDensity();
}
static getProgress(indicator, position, positionOffset, isRtl) {
const count = indicator.getCount();
let selectedPosition = indicator.getSelection();
if (isRtl) {
position = count - 1 - position;
}
if (position < 0) {
position = 0;
}
else if (position > count - 1) {
position = count - 1;
}
let isRightOverScrolled = position > selectedPosition;
let isLeftOverScrolled;
if (isRtl) {
isLeftOverScrolled = position - 1 < selectedPosition;
}
else {
isLeftOverScrolled = position + 1 < selectedPosition;
}
if (isRightOverScrolled || isLeftOverScrolled) {
selectedPosition = position;
indicator.setSelection(selectedPosition);
}
let slideToRightSide = selectedPosition == position && positionOffset != 0;
let selectingPosition;
let selectingProgress;
if (slideToRightSide) {
selectingPosition = isRtl ? position - 1 : position + 1;
selectingProgress = positionOffset;
}
else {
selectingPosition = position;
selectingProgress = 1 - positionOffset;
}
if (selectingProgress > 1) {
selectingProgress = 1;
}
else if (selectingProgress < 0) {
selectingProgress = 0;
}
return [selectingPosition, selectingProgress];
}
[autoPlayProperty.setNative](value) {
this._initAutoPlay(value);
}
[autoplayDelayProperty.setNative](value) {
if (this._autoPlayInterval) {
clearInterval(this._autoPlayInterval);
this._autoPlayInterval = undefined;
this._initAutoPlay(this.autoPlay);
}
}
_nextIndex() {
let next = this.selectedIndex + 1;
if (next > this.lastIndex) {
return 0;
}
return next;
}
_initAutoPlay(value) {
if (!this.items || this.items.length === 0) {
return;
}
if (!value) {
if (this._autoPlayInterval) {
clearInterval(this._autoPlayInterval);
this._autoPlayInterval = undefined;
}
}
else {
if (this.isLayoutValid && !this._autoPlayInterval) {
this._autoPlayInterval = setInterval(() => {
this.selectedIndex = this._nextIndex();
}, this.autoPlayDelay);
}
}
}
get itemCount() {
return this._childrenCount
? this._childrenCount + (this.circularMode ? 2 : 0)
: 0;
}
get lastIndex() {
if (this.items && this.items.length === 0) {
return 0;
}
return this.circularMode ? this.itemCount - 3 : this.itemCount - 1;
}
}
__decorate([
profile(),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Pager.prototype, "createNativeView", null);
export const pagesCountProperty = new Property({
name: "pagesCount",
defaultValue: 0,
valueConverter: (v) => parseInt(v),
valueChanged: (pager, oldValue, newValue) => {
pager.updatePagesCount(pager.pagesCount);
},
});
pagesCountProperty.register(Pager);
let PageChangeCallback;
function initPagerChangeCallback() {
if (PageChangeCallback) {
return PageChangeCallback;
}
var PageChangeCallbackImpl = /** @class */ (function (_super) {
__extends(PageChangeCallbackImpl, _super);
function PageChangeCallbackImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = owner;
return global.__native(_this);
}
PageChangeCallbackImpl.prototype.onPageSelected = function (position) {
var owner = this.owner && this.owner.get();
if (owner) {
owner.notify({
eventName: Pager.swipeEvent,
object: owner,
});
}
};
PageChangeCallbackImpl.prototype.onPageScrolled = function (position, positionOffset, positionOffsetPixels) {
var owner = this.owner && this.owner.get();
if (owner && owner.isLayoutValid) {
if (owner.circularMode) {
position = owner.pagerAdapter.getPosition(position);
}
var offset = position * positionOffsetPixels;
if (owner.orientation === "vertical") {
owner._horizontalOffset = 0;
owner._verticalOffset = offset;
}
else if (owner.orientation === "horizontal") {
owner._horizontalOffset = offset;
owner._verticalOffset = 0;
}
owner.notify({
eventName: Pager.scrollEvent,
object: owner,
selectedIndex: position,
scrollX: owner.horizontalOffset,
scrollY: owner.verticalOffset,
});
if (owner.items &&
position ===
owner.pagerAdapter.lastIndex() - owner.loadMoreCount) {
owner.notify({ eventName: LOADMOREITEMS, object: owner });
}
if (owner.showIndicator && owner.indicatorView) {
var progress = Pager.getProgress(owner.indicatorView, position, positionOffset, false);
var selectingPosition = progress[0];
var selectingProgress = progress[1];
owner.indicatorView.setInteractiveAnimation(true);
owner.indicatorView.setProgress(selectingPosition, selectingProgress);
}
}
};
PageChangeCallbackImpl.prototype.onPageScrollStateChanged = function (state) {
var owner = this.owner && this.owner.get();
if (owner) {
if (owner.lastEvent === 0 && state === 1) {
owner.notify({
eventName: Pager.swipeStartEvent,
object: owner,
});
owner.lastEvent = 1;
}
else if (owner.lastEvent === 1 && state === 1) {
owner.notify({
eventName: Pager.swipeOverEvent,
object: owner,
});
owner.lastEvent = 1;
}
else if (owner.lastEvent === 1 && state === 2) {
owner.notify({
eventName: Pager.swipeEndEvent,
object: owner,
});
owner.lastEvent = 2;
}
else {
owner.lastEvent = 0;
}
if (owner.isLayoutValid &&
state ===
androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE) {
// ts-ignore
var count = owner.pagerAdapter.getItemCount();
var index = owner.pager.getCurrentItem();
if (owner.circularMode) {
if (index === 0) {
// last item
owner.indicatorView.setInteractiveAnimation(false);
owner.pager.setCurrentItem(count - 2, false);
selectedIndexProperty.nativeValueChange(owner, count - 3);
owner.indicatorView.setSelected(count - 3);
owner.indicatorView.setInteractiveAnimation(true);
}
else if (index === count - 1) {
// first item
owner.indicatorView.setInteractiveAnimation(false);
owner.indicatorView.setSelected(0);
owner.pager.setCurrentItem(1, false);
selectedIndexProperty.nativeValueChange(owner, 0);
owner.indicatorView.setInteractiveAnimation(true);
}
else {
selectedIndexProperty.nativeValueChange(owner, index - 1);
}
}
else {
selectedIndexProperty.nativeValueChange(owner, index);
owner.indicatorView.setSelected(index);
}
}
}
};
return PageChangeCallbackImpl;
}(androidx.viewpager2.widget.ViewPager2
.OnPageChangeCallback));
PageChangeCallback = PageChangeCallbackImpl;
}
let PagerRecyclerAdapter;
function initPagerRecyclerAdapter() {
if (PagerRecyclerAdapter) {
return;
}
var PagerRecyclerAdapterImpl = /** @class */ (function (_super) {
__extends(PagerRecyclerAdapterImpl, _super);
function PagerRecyclerAdapterImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = owner;
return global.__native(_this);
}
PagerRecyclerAdapterImpl.prototype.onCreateViewHolder = function (param0, type) {
var owner = this.owner ? this.owner.get() : null;
if (!owner) {
return null;
}
var template = owner._itemTemplatesInternal[type];
var view = template.createView();
if (!view && owner._itemViewLoader !== undefined) {
view = owner._itemViewLoader(template.key);
}
var sp = new StackLayout();
if (view) {
sp.addChild(view);
}
else {
sp[PLACEHOLDER] = true;
}
owner._addView(sp);
sp.nativeView.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT));
owner._realizedItems.set(sp.nativeView, sp);
initPagerViewHolder();
return new PagerViewHolder(new WeakRef(sp), new WeakRef(owner));
};
PagerRecyclerAdapterImpl.prototype.getPosition = function (index) {
var owner = this.owner && this.owner.get();
var position = index;
if (owner && owner.circularMode) {
if (position === 0) {
position = this.lastDummy();
}
else if (position === this.firstDummy()) {
position = 0;
}
else {
position = position - 1;
}
}
return position;
};
PagerRecyclerAdapterImpl.prototype.onBindViewHolder = function (holder, index) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
if (owner.circularMode) {
if (index === 0) {
index = this.lastDummy();
}
else if (index === this.firstDummy()) {
index = 0;
}
else {
index = index - 1;
}
}
var bindingContext = owner._getDataItem(index);
var args = {
eventName: ITEMLOADING,
object: owner,
android: holder,
ios: undefined,
index: index,
bindingContext: bindingContext,
view: holder.view[PLACEHOLDER] ? null : holder.view
};
owner.notify(args);
if (holder.view[PLACEHOLDER]) {
if (args.view) {
holder.view.addChild(args.view);
}
else {
holder.view.addChild(owner._getDefaultItemContent(index));
}
holder.view[PLACEHOLDER] = false;
}
owner._prepareItem(holder.view, index);
}
};
PagerRecyclerAdapterImpl.prototype.getItemId = function (i) {
var owner = this.owner ? this.owner.get() : null;
var id = i;
if (owner && owner.items) {
var item = owner.items.getItem ? owner.items.getItem(i) : owner.items[i];
if (item) {
id = owner.itemIdGenerator(item, i, owner.items);
}
}
return long(id);
};
PagerRecyclerAdapterImpl.prototype.getItemCount = function () {
var owner = this.owner ? this.owner.get() : null;
return owner && owner.items && owner.items.length
? owner.items.length + (owner.circularMode ? 2 : 0)
: 0;
};
PagerRecyclerAdapterImpl.prototype.getItemViewType = function (index) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
var template = owner._getItemTemplate(index);
return owner._itemTemplatesInternal.indexOf(template);
}
return 0;
};
PagerRecyclerAdapterImpl.prototype.lastIndex = function () {
var owner = this.owner && this.owner.get();
if (owner) {
if (owner.items.length === 0) {
return 0;
}
return owner.circularMode ? this.getItemCount() - 3 : this.getItemCount() - 1;
}
return 0;
};
PagerRecyclerAdapterImpl.prototype.firstDummy = function () {
var count = this.getItemCount();
if (count === 0) {
return 0;
}
return this.getItemCount() - 1;
};
PagerRecyclerAdapterImpl.prototype.lastDummy = function () {
return this.lastIndex();
};
PagerRecyclerAdapterImpl.prototype.hasStableIds = function () {
return true;
};
return PagerRecyclerAdapterImpl;
}(androidx.recyclerview.widget.RecyclerView.Adapter));
PagerRecyclerAdapter = PagerRecyclerAdapterImpl;
}
let StaticPagerStateAdapter;
function initStaticPagerStateAdapter() {
if (StaticPagerStateAdapter) {
return;
}
var StaticPagerStateAdapterImpl = /** @class */ (function (_super) {
__extends(StaticPagerStateAdapterImpl, _super);
function StaticPagerStateAdapterImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = owner;
return global.__native(_this);
}
StaticPagerStateAdapterImpl.prototype.onCreateViewHolder = function (param0, type) {
var owner = this.owner ? this.owner.get() : null;
if (!owner) {
return null;
}
var view = owner._childrenViews.get(type);
var sp = new StackLayout(); // Pager2 requires match_parent so add a parent with to fill
if (view && !view.parent) {
sp.addChild(view);
}
else {
sp[PLACEHOLDER] = true;
}
owner._addView(sp);
sp.nativeView.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT));
initPagerViewHolder();
return new PagerViewHolder(new WeakRef(sp), new WeakRef(owner));
};
StaticPagerStateAdapterImpl.prototype.onBindViewHolder = function (holder, index) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
var args = {
eventName: ITEMLOADING,
object: owner,
android: holder,
ios: undefined,
index: index,
view: holder.view[PLACEHOLDER] ? null : holder.view
};
owner.notify(args);
if (holder.view[PLACEHOLDER]) {
if (args.view) {
holder.view.addChild(args.view);
}
holder.view[PLACEHOLDER] = false;
}
}
};
StaticPagerStateAdapterImpl.prototype.hasStableIds = function () {
return true;
};
StaticPagerStateAdapterImpl.prototype.getItem = function (i) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
if (owner._childrenViews) {
return owner._childrenViews.get(i);
}
}
return null;
};
StaticPagerStateAdapterImpl.prototype.getItemId = function (i) {
var owner = this.owner ? this.owner.get() : null;
var id = i;
if (owner) {
var item = this.getItem(i);
if (item) {
id = owner.itemIdGenerator(item, i, Array.from(owner._childrenViews));
}
}
return long(id);
};
StaticPagerStateAdapterImpl.prototype.getItemCount = function () {
var owner = this.owner ? this.owner.get() : null;
return owner && owner._childrenViews
? owner._childrenViews.size
: 0;
};
StaticPagerStateAdapterImpl.prototype.getItemViewType = function (index) {
return index;
};
return StaticPagerStateAdapterImpl;
}(androidx.recyclerview.widget.RecyclerView.Adapter));
StaticPagerStateAdapter = StaticPagerStateAdapterImpl;
}
let PagerViewHolder;
function initPagerViewHolder() {
if (PagerViewHolder) {
return;
}
var PagerViewHolderImpl = /** @class */ (function (_super) {
__extends(PagerViewHolderImpl, _super);
function PagerViewHolderImpl(owner, pager) {
var _this = _super.call(this, owner.get().nativeViewProtected) || this;
_this.owner = owner;
_this.pager = pager;
return global.__native(_this);
}
Object.defineProperty(PagerViewHolderImpl.prototype, "view", {
get: function () {
return this.owner ? this.owner.get() : null;
},
enumerable: true,
configurable: true
});
return PagerViewHolderImpl;
}(androidx.recyclerview.widget.RecyclerView.ViewHolder));
PagerViewHolder = PagerViewHolderImpl;
}
let ZoomOutPageTransformer;
function initZoomOutPageTransformer() {
if (ZoomOutPageTransformer) {
return;
}
var ZoomOutPageTransformerImpl = /** @class */ (function (_super) {
__extends(ZoomOutPageTransformerImpl, _super);
function ZoomOutPageTransformerImpl() {
var _this = _super.call(this) || this;
return global.__native(_this);
}
ZoomOutPageTransformerImpl.prototype.transformPage = function (view, position) {
var MIN_SCALE = 0.85;
if (position <= 1 || position >= -1) {
var scale = Math.max(MIN_SCALE, 1 - Math.abs(position));
view.setScaleX(scale);
view.setScaleY(scale);
}
else {
view.setScaleX(1);
view.setScaleY(1);
}
};
ZoomOutPageTransformerImpl = __decorate([
Interfaces([androidx.viewpager2.widget.ViewPager2.PageTransformer])
], ZoomOutPageTransformerImpl);
return ZoomOutPageTransformerImpl;
}(java.lang.Object));
ZoomOutPageTransformer = ZoomOutPageTransformerImpl;
}
let ZoomInPageTransformer;
function initZoomInPageTransformer() {
if (ZoomInPageTransformer) {
return;
}
var ZoomInPageTransformerImpl = /** @class */ (function (_super) {
__extends(ZoomInPageTransformerImpl, _super);
function ZoomInPageTransformerImpl() {
var _this = _super.call(this) || this;
return global.__native(_this);
}
ZoomInPageTransformerImpl.prototype.transformPage = function (view, position) {
var scale = position < 0 ? position + 1.0 : Math.abs(1.0 - position);
view.setScaleX(scale);
view.setScaleY(scale);
view.setPivotX(view.getWidth() * 0.5);
view.setPivotY(view.getHeight() * 0.5);
view.setAlpha(view < -1.0 || position > 1.0 ? 0.0 : 1.0 - (scale - 1.0));
};
ZoomInPageTransformerImpl = __decorate([
Interfaces([androidx.viewpager2.widget.ViewPager2.PageTransformer])
], ZoomInPageTransformerImpl);
return ZoomInPageTransformerImpl;
}(java.lang.Object));
ZoomInPageTransformer = ZoomInPageTransformerImpl;
}
//# sourceMappingURL=index.android.js.map