123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. var __extends = (this && this.__extends) || (function () {
  2. var extendStatics = Object.setPrototypeOf ||
  3. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  4. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  5. return function (d, b) {
  6. extendStatics(d, b);
  7. function __() { this.constructor = d; }
  8. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9. };
  10. })();
  11. (function (factory) {
  12. if (typeof module === "object" && typeof module.exports === "object") {
  13. var v = factory(require, exports);
  14. if (v !== undefined) module.exports = v;
  15. }
  16. else if (typeof define === "function" && define.amd) {
  17. define(["require", "exports", "../animations/animation", "../util/util", "./page-transition"], factory);
  18. }
  19. })(function (require, exports) {
  20. "use strict";
  21. Object.defineProperty(exports, "__esModule", { value: true });
  22. var animation_1 = require("../animations/animation");
  23. var util_1 = require("../util/util");
  24. var page_transition_1 = require("./page-transition");
  25. var DURATION = 500;
  26. var EASING = 'cubic-bezier(0.36,0.66,0.04,1)';
  27. var OPACITY = 'opacity';
  28. var TRANSFORM = 'transform';
  29. var TRANSLATEX = 'translateX';
  30. var CENTER = '0%';
  31. var OFF_OPACITY = 0.8;
  32. var SHOW_BACK_BTN_CSS = 'show-back-button';
  33. var IOSTransition = (function (_super) {
  34. __extends(IOSTransition, _super);
  35. function IOSTransition() {
  36. return _super !== null && _super.apply(this, arguments) || this;
  37. }
  38. IOSTransition.prototype.init = function () {
  39. _super.prototype.init.call(this);
  40. var plt = this.plt;
  41. var OFF_RIGHT = plt.isRTL ? '-99.5%' : '99.5%';
  42. var OFF_LEFT = plt.isRTL ? '33%' : '-33%';
  43. var enteringView = this.enteringView;
  44. var leavingView = this.leavingView;
  45. var opts = this.opts;
  46. this.duration(util_1.isPresent(opts.duration) ? opts.duration : DURATION);
  47. this.easing(util_1.isPresent(opts.easing) ? opts.easing : EASING);
  48. var backDirection = (opts.direction === 'back');
  49. var enteringHasNavbar = (enteringView && enteringView.hasNavbar());
  50. var leavingHasNavbar = (leavingView && leavingView.hasNavbar());
  51. if (enteringView) {
  52. // get the native element for the entering page
  53. var enteringPageEle = enteringView.pageRef().nativeElement;
  54. // entering content
  55. var enteringContent = new animation_1.Animation(plt, enteringView.contentRef());
  56. enteringContent.element(enteringPageEle.querySelectorAll('ion-header > *:not(ion-navbar),ion-footer > *'));
  57. this.add(enteringContent);
  58. if (backDirection) {
  59. // entering content, back direction
  60. enteringContent
  61. .fromTo(TRANSLATEX, OFF_LEFT, CENTER, true)
  62. .fromTo(OPACITY, OFF_OPACITY, 1, true);
  63. }
  64. else {
  65. // entering content, forward direction
  66. enteringContent
  67. .beforeClearStyles([OPACITY])
  68. .fromTo(TRANSLATEX, OFF_RIGHT, CENTER, true);
  69. }
  70. if (enteringHasNavbar) {
  71. // entering page has a navbar
  72. var enteringNavbarEle = enteringPageEle.querySelector('ion-navbar');
  73. var enteringNavBar = new animation_1.Animation(plt, enteringNavbarEle);
  74. this.add(enteringNavBar);
  75. var enteringTitle = new animation_1.Animation(plt, enteringNavbarEle.querySelector('ion-title'));
  76. var enteringNavbarItems = new animation_1.Animation(plt, enteringNavbarEle.querySelectorAll('ion-buttons,[menuToggle]'));
  77. var enteringNavbarBg = new animation_1.Animation(plt, enteringNavbarEle.querySelector('.toolbar-background'));
  78. var enteringBackButton = new animation_1.Animation(plt, enteringNavbarEle.querySelector('.back-button'));
  79. enteringNavBar
  80. .add(enteringTitle)
  81. .add(enteringNavbarItems)
  82. .add(enteringNavbarBg)
  83. .add(enteringBackButton);
  84. enteringTitle.fromTo(OPACITY, 0.01, 1, true);
  85. enteringNavbarItems.fromTo(OPACITY, 0.01, 1, true);
  86. // set properties depending on direction
  87. if (backDirection) {
  88. // entering navbar, back direction
  89. enteringTitle.fromTo(TRANSLATEX, OFF_LEFT, CENTER, true);
  90. if (enteringView.enableBack()) {
  91. // back direction, entering page has a back button
  92. enteringBackButton
  93. .beforeAddClass(SHOW_BACK_BTN_CSS)
  94. .fromTo(OPACITY, 0.01, 1, true);
  95. }
  96. }
  97. else {
  98. // entering navbar, forward direction
  99. enteringTitle.fromTo(TRANSLATEX, OFF_RIGHT, CENTER, true);
  100. enteringNavbarBg
  101. .beforeClearStyles([OPACITY])
  102. .fromTo(TRANSLATEX, OFF_RIGHT, CENTER, true);
  103. if (enteringView.enableBack()) {
  104. // forward direction, entering page has a back button
  105. enteringBackButton
  106. .beforeAddClass(SHOW_BACK_BTN_CSS)
  107. .fromTo(OPACITY, 0.01, 1, true);
  108. var enteringBackBtnText = new animation_1.Animation(plt, enteringNavbarEle.querySelector('.back-button-text'));
  109. enteringBackBtnText.fromTo(TRANSLATEX, (plt.isRTL ? '-100px' : '100px'), '0px');
  110. enteringNavBar.add(enteringBackBtnText);
  111. }
  112. else {
  113. enteringBackButton.beforeRemoveClass(SHOW_BACK_BTN_CSS);
  114. }
  115. }
  116. }
  117. }
  118. // setup leaving view
  119. if (leavingView && leavingView.pageRef()) {
  120. // leaving content
  121. var leavingPageEle = leavingView.pageRef().nativeElement;
  122. var leavingContent = new animation_1.Animation(plt, leavingView.contentRef());
  123. leavingContent.element(leavingPageEle.querySelectorAll('ion-header > *:not(ion-navbar),ion-footer > *'));
  124. this.add(leavingContent);
  125. if (backDirection) {
  126. // leaving content, back direction
  127. leavingContent
  128. .beforeClearStyles([OPACITY])
  129. .fromTo(TRANSLATEX, CENTER, (plt.isRTL ? '-100%' : '100%'));
  130. }
  131. else {
  132. // leaving content, forward direction
  133. leavingContent
  134. .fromTo(TRANSLATEX, CENTER, OFF_LEFT)
  135. .fromTo(OPACITY, 1, OFF_OPACITY)
  136. .afterClearStyles([TRANSFORM, OPACITY]);
  137. }
  138. if (leavingHasNavbar) {
  139. // leaving page has a navbar
  140. var leavingNavbarEle = leavingPageEle.querySelector('ion-navbar');
  141. var leavingNavBar = new animation_1.Animation(plt, leavingNavbarEle);
  142. var leavingTitle = new animation_1.Animation(plt, leavingNavbarEle.querySelector('ion-title'));
  143. var leavingNavbarItems = new animation_1.Animation(plt, leavingNavbarEle.querySelectorAll('ion-buttons,[menuToggle]'));
  144. var leavingNavbarBg = new animation_1.Animation(plt, leavingNavbarEle.querySelector('.toolbar-background'));
  145. var leavingBackButton = new animation_1.Animation(plt, leavingNavbarEle.querySelector('.back-button'));
  146. leavingNavBar
  147. .add(leavingTitle)
  148. .add(leavingNavbarItems)
  149. .add(leavingBackButton)
  150. .add(leavingNavbarBg);
  151. this.add(leavingNavBar);
  152. // fade out leaving navbar items
  153. leavingBackButton.fromTo(OPACITY, 0.99, 0);
  154. leavingTitle.fromTo(OPACITY, 0.99, 0);
  155. leavingNavbarItems.fromTo(OPACITY, 0.99, 0);
  156. if (backDirection) {
  157. // leaving navbar, back direction
  158. leavingTitle.fromTo(TRANSLATEX, CENTER, (plt.isRTL ? '-100%' : '100%'));
  159. // leaving navbar, back direction, and there's no entering navbar
  160. // should just slide out, no fading out
  161. leavingNavbarBg
  162. .beforeClearStyles([OPACITY])
  163. .fromTo(TRANSLATEX, CENTER, (plt.isRTL ? '-100%' : '100%'));
  164. var leavingBackBtnText = new animation_1.Animation(plt, leavingNavbarEle.querySelector('.back-button-text'));
  165. leavingBackBtnText.fromTo(TRANSLATEX, CENTER, (plt.isRTL ? -300 : 300) + 'px');
  166. leavingNavBar.add(leavingBackBtnText);
  167. }
  168. else {
  169. // leaving navbar, forward direction
  170. leavingTitle
  171. .fromTo(TRANSLATEX, CENTER, OFF_LEFT)
  172. .afterClearStyles([TRANSFORM]);
  173. leavingBackButton.afterClearStyles([OPACITY]);
  174. leavingTitle.afterClearStyles([OPACITY]);
  175. leavingNavbarItems.afterClearStyles([OPACITY]);
  176. }
  177. }
  178. }
  179. };
  180. return IOSTransition;
  181. }(page_transition_1.PageTransition));
  182. exports.IOSTransition = IOSTransition;
  183. });
  184. //# sourceMappingURL=transition-ios.js.map