From cc1eb02337976eb053f5235c4530bbd466b82426 Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Mon, 24 Apr 2017 15:19:34 +0200 Subject: [PATCH 01/11] fix(navcontrollerbase): fixes crash when it is destroyed fixes #11338 --- src/navigation/nav-controller-base.ts | 12 ++++++++++++ src/navigation/test/nav-controller.spec.ts | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/navigation/nav-controller-base.ts b/src/navigation/nav-controller-base.ts index 2b95718258..99f8c209c0 100644 --- a/src/navigation/nav-controller-base.ts +++ b/src/navigation/nav-controller-base.ts @@ -216,6 +216,10 @@ export class NavControllerBase extends Ion implements NavController { } _success(result: NavResult, ti: TransitionInstruction) { + if (this._queue === null) { + this._fireError('nav controller was destroyed', ti); + return; + } this._init = true; this._trnsId = null; @@ -237,6 +241,10 @@ export class NavControllerBase extends Ion implements NavController { } _failed(rejectReason: any, ti: TransitionInstruction) { + if (this._queue === null) { + this._fireError('nav controller was destroyed', ti); + return; + } this._trnsId = null; this._queue.length = 0; @@ -245,6 +253,10 @@ export class NavControllerBase extends Ion implements NavController { this._swipeBackCheck(); this._nextTrns(); + this._fireError(rejectReason, ti); + } + + _fireError(rejectReason: any, ti: TransitionInstruction) { if (ti.done) { ti.done(false, false, rejectReason); } diff --git a/src/navigation/test/nav-controller.spec.ts b/src/navigation/test/nav-controller.spec.ts index 641f6388e9..4feaacdbbc 100644 --- a/src/navigation/test/nav-controller.spec.ts +++ b/src/navigation/test/nav-controller.spec.ts @@ -1068,6 +1068,23 @@ describe('NavController', () => { }); + describe('destroy', () => { + + it('should not crash when destroyed while transitioning', (done) => { + let view1 = mockView(MockView1); + nav.push(view1).then(() => { + fail('it should not succeed'); + done(); + }).catch((err: any) => { + expect(err).toEqual('nav controller was destroyed'); + done(); + }); + nav.destroy(); + }, 10000); + + }); + + let nav: NavControllerBase; let trnsDone: jasmine.Spy; From 0ec71cd188677eab61e84cbf0387d44a71472cca Mon Sep 17 00:00:00 2001 From: Sina Date: Mon, 24 Apr 2017 20:20:47 +0430 Subject: [PATCH 02/11] feat(label): fix positioning of floating label for rtl (#11324) * floating label rtl fix add rtl fix to floating label * single block, not nesting * fix(floating-label): wp and ios issue for rtl problems with transform-origin with both windows and ios platform for rtl and also wrong translate3d for rtl for windows platform * style(floating-label): remove html, 2 space indent remove reference of "html", just plain '[dir="rtl"] indent 2 space instead of 4 * refactor(floating-label): remove duplicate rule remove unnecessary duplicate rule --- src/components/label/label.ios.scss | 4 ++++ src/components/label/label.md.scss | 4 ++++ src/components/label/label.wp.scss | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/src/components/label/label.ios.scss b/src/components/label/label.ios.scss index 7bb6c0f0fe..8b686b40c0 100644 --- a/src/components/label/label.ios.scss +++ b/src/components/label/label.ios.scss @@ -44,6 +44,10 @@ $label-ios-margin: $item-ios-padding-top ($item-ios-padding-right / transition: transform 150ms ease-in-out; } +[dir="rtl"] .label-ios[floating] { + transform-origin: right top; +} + .input-has-focus .label-ios[floating], .input-has-value .label-ios[floating] { transform: translate3d(0, 0, 0) scale(.8); diff --git a/src/components/label/label.md.scss b/src/components/label/label.md.scss index 2ad4403803..484e157f91 100644 --- a/src/components/label/label.md.scss +++ b/src/components/label/label.md.scss @@ -48,6 +48,10 @@ $label-md-margin: $item-md-padding-top ($item-md-padding-rig transition: transform 150ms ease-in-out; } +[dir="rtl"] .label-md[floating] { + transform-origin: right top; +} + .label-md[stacked], .label-md[floating] { margin-bottom: 0; diff --git a/src/components/label/label.wp.scss b/src/components/label/label.wp.scss index f39fc91587..ccb55ddcad 100644 --- a/src/components/label/label.wp.scss +++ b/src/components/label/label.wp.scss @@ -40,6 +40,11 @@ $label-wp-text-color-focused: color($colors-wp, primary) !default; transform-origin: left top; } +[dir="rtl"] .label-wp[floating] { + transform: translate3d(-8px, 34px, 0); + transform-origin: right top; +} + .label-wp[stacked], .label-wp[floating] { margin-bottom: 0; From e31a4da9ce45b4d627bf4bf4ca43fa41593a09c8 Mon Sep 17 00:00:00 2001 From: Sina Date: Mon, 24 Apr 2017 20:31:22 +0430 Subject: [PATCH 03/11] feat(list): RTL support for list-header (#11328) RTL fix (scss changes) for list-header for wp, ios and android platform --- src/components/list/list.ios.scss | 4 ++++ src/components/list/list.md.scss | 5 +++++ src/components/list/list.wp.scss | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/src/components/list/list.ios.scss b/src/components/list/list.ios.scss index 76bdfa848a..d36c3a6341 100644 --- a/src/components/list/list.ios.scss +++ b/src/components/list/list.ios.scss @@ -182,6 +182,10 @@ $list-ios-header-background-color: transparent !default; background: $list-ios-header-background-color; } +[dir="rtl"] .list-header-ios { + padding-right: $list-ios-header-padding-left; + padding-left: 0; +} // Generate iOS List Header Colors // -------------------------------------------------- diff --git a/src/components/list/list.md.scss b/src/components/list/list.md.scss index bed52d80b8..d4f6167ee9 100644 --- a/src/components/list/list.md.scss +++ b/src/components/list/list.md.scss @@ -168,6 +168,11 @@ $list-md-header-color: #757575 !default; color: $list-md-header-color; } +[dir="rtl"] .list-header-md { + padding-right: $list-md-header-padding-left; + padding-left: 0; +} + // Generate Material Design List Header Colors // -------------------------------------------------- diff --git a/src/components/list/list.wp.scss b/src/components/list/list.wp.scss index 64593d5680..84f952c33c 100644 --- a/src/components/list/list.wp.scss +++ b/src/components/list/list.wp.scss @@ -165,6 +165,11 @@ $list-wp-header-color: $list-wp-text-color !default; color: $list-wp-header-color; } +[dir="rtl"] .list-header-wp { + padding-right: $list-wp-header-padding-left; + padding-left: 0; +} + // Generate Windows List Header Colors // -------------------------------------------------- From 2357bb47491a1d2a49d803793d3dbf11943dcaf0 Mon Sep 17 00:00:00 2001 From: Brandy Carney Date: Mon, 24 Apr 2017 16:45:20 -0400 Subject: [PATCH 04/11] docs(demos): update path to images in slides demo --- demos/src/slides/pages/page-one/page-one.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/src/slides/pages/page-one/page-one.html b/demos/src/slides/pages/page-one/page-one.html index b4dd4f6a8f..4e67e33737 100644 --- a/demos/src/slides/pages/page-one/page-one.html +++ b/demos/src/slides/pages/page-one/page-one.html @@ -1,5 +1,5 @@ - + From 78d427dfcf49bba89999e514ebff5008c61d76f7 Mon Sep 17 00:00:00 2001 From: Myck Date: Mon, 24 Apr 2017 23:33:19 +0200 Subject: [PATCH 05/11] fix(ion-slides): fast rerendering causes a crash (#11100) * fix #10830 add condition, to check if slider exist before remove * Update swiper.ts * Fixes minor style issues --- src/components/slides/swiper/swiper.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/slides/swiper/swiper.ts b/src/components/slides/swiper/swiper.ts index 21fc1f1499..6af4c1084a 100644 --- a/src/components/slides/swiper/swiper.ts +++ b/src/components/slides/swiper/swiper.ts @@ -891,6 +891,11 @@ export function enableTouchControl(s: Slides) { // Cleanup dynamic styles function cleanupStyles(s: Slides) { + if (!s.container || !s._wrapper) { + //fix #10830 + return; + } + // Container removeClass(s.container, s._classNames); s.container.removeAttribute('style'); From 67af71bd9b9a30b3f737732bbe7cc7d1c7a198bf Mon Sep 17 00:00:00 2001 From: Manuel Mtz-Almeida Date: Mon, 24 Apr 2017 23:48:23 +0200 Subject: [PATCH 06/11] fix(virtual-scroll): supports null records fixes 11093 --- src/components/slides/swiper/swiper.ts | 2 +- src/components/virtual-scroll/virtual-util.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/slides/swiper/swiper.ts b/src/components/slides/swiper/swiper.ts index 6af4c1084a..3bbb07b748 100644 --- a/src/components/slides/swiper/swiper.ts +++ b/src/components/slides/swiper/swiper.ts @@ -892,7 +892,7 @@ export function enableTouchControl(s: Slides) { // Cleanup dynamic styles function cleanupStyles(s: Slides) { if (!s.container || !s._wrapper) { - //fix #10830 + // fix #10830 return; } diff --git a/src/components/virtual-scroll/virtual-util.ts b/src/components/virtual-scroll/virtual-util.ts index cb9bad9fff..391faef745 100644 --- a/src/components/virtual-scroll/virtual-util.ts +++ b/src/components/virtual-scroll/virtual-util.ts @@ -21,7 +21,7 @@ export function processRecords(stopAtHeight: number, let startRecordIndex: number; let previousCell: VirtualCell; let tmpData: any; - let lastRecordIndex = (records.length - 1); + let lastRecordIndex = records ? (records.length - 1) : -1; if (cells.length) { // we already have cells @@ -131,11 +131,11 @@ export function populateNodeData(startCellIndex: number, endCellIndex: number, v cells: VirtualCell[], records: any[], nodes: VirtualNode[], viewContainer: ViewContainerRef, itmTmp: TemplateRef, hdrTmp: TemplateRef, ftrTmp: TemplateRef, initialLoad: boolean): boolean { - const recordsLength = records.length; - if (!recordsLength) { + if (!records || records.length === 0) { nodes.length = 0; return true; } + const recordsLength = records.length; let hasChanges = false; let node: VirtualNode; From 7bcf5a05f70b015196e82e1d338132dac83638e0 Mon Sep 17 00:00:00 2001 From: Brandy Carney Date: Tue, 25 Apr 2017 13:54:37 -0400 Subject: [PATCH 07/11] fix(util): pass an option to default to right side in isRightSide --- src/components/item/item-options.ts | 2 +- src/util/util.ts | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/item/item-options.ts b/src/components/item/item-options.ts index 22cc117db7..13b86ca30c 100644 --- a/src/components/item/item-options.ts +++ b/src/components/item/item-options.ts @@ -51,7 +51,7 @@ export class ItemOptions { * @hidden */ isRightSide(): boolean { - return isRightSide(this.side, this._plt.isRTL); + return isRightSide(this.side, this._plt.isRTL, true); } /** diff --git a/src/util/util.ts b/src/util/util.ts index abb67fb51d..1c577b97f0 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -128,15 +128,24 @@ export function isCheckedProperty(a: any, b: any): boolean { return (a == b); // tslint:disable-line }; +/** @hidden */ export type Side = 'left' | 'right' | 'start' | 'end'; -export function isRightSide(side: Side, isRTL: boolean): boolean { +/** + * @hidden + * Given a side, return if it should be on the right + * based on the value of dir + * @param side the side + * @param isRTL whether the application dir is rtl + * @param defaultRight whether the default side is right + */ +export function isRightSide(side: Side, isRTL: boolean, defaultRight: boolean = false): boolean { switch (side) { case 'right': return true; case 'left': return false; case 'end': return !isRTL; - // 'start' by default - default: return isRTL; + case 'start': return isRTL; + default: return defaultRight ? !isRTL : isRTL; } } From 3b32b8e64847085966850f317cca4e9b9ba5ee50 Mon Sep 17 00:00:00 2001 From: Manuel Mtz-Almeida Date: Tue, 25 Apr 2017 21:33:30 +0200 Subject: [PATCH 08/11] fix(sliding-gesture): missing return value --- src/gestures/slide-edge-gesture.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gestures/slide-edge-gesture.ts b/src/gestures/slide-edge-gesture.ts index 3f4c54e66a..7ea0355ce2 100644 --- a/src/gestures/slide-edge-gesture.ts +++ b/src/gestures/slide-edge-gesture.ts @@ -14,7 +14,7 @@ export class SlideEdgeGesture extends SlideGesture { constructor(plt: Platform, element: HTMLElement, opts: any = {}) { defaults(opts, { - edge: 'left', + edge: 'start', maxEdgeStart: 50 }); super(plt, element, opts); @@ -29,7 +29,7 @@ export class SlideEdgeGesture extends SlideGesture { switch (value) { case 'start': return isRTL ? 'right' : 'left'; case 'end': return isRTL ? 'left' : 'right'; - default: value; + default: return value; } }); } From ba44780df0d6ae41ab1a2e3ba70ad1f66205bcff Mon Sep 17 00:00:00 2001 From: Manuel Mtz-Almeida Date: Tue, 25 Apr 2017 22:55:13 +0200 Subject: [PATCH 09/11] fix(select): stores string | string[] fixes #11337 --- src/components/select/select.ts | 17 ++++++----------- src/components/select/test/select.spec.ts | 2 +- src/util/base-input.ts | 17 +++++++++++------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/components/select/select.ts b/src/components/select/select.ts index b5d4acfaba..19da56ae24 100644 --- a/src/components/select/select.ts +++ b/src/components/select/select.ts @@ -147,12 +147,13 @@ import { SelectPopover, SelectPopoverOption } from './select-popover-component'; providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: Select, multi: true } ], encapsulation: ViewEncapsulation.None, }) -export class Select extends BaseInput implements AfterViewInit, OnDestroy { +export class Select extends BaseInput implements AfterViewInit, OnDestroy { _multi: boolean = false; _options: QueryList