platform-registry.js 8.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. (function (factory) {
  2. if (typeof module === "object" && typeof module.exports === "object") {
  3. var v = factory(require, exports);
  4. if (v !== undefined) module.exports = v;
  5. }
  6. else if (typeof define === "function" && define.amd) {
  7. define(["require", "exports", "@angular/core", "./platform-utils"], factory);
  8. }
  9. })(function (require, exports) {
  10. "use strict";
  11. Object.defineProperty(exports, "__esModule", { value: true });
  12. var core_1 = require("@angular/core");
  13. var platform_utils_1 = require("./platform-utils");
  14. exports.PLATFORM_CONFIGS = {
  15. /**
  16. * core
  17. */
  18. 'core': {
  19. settings: {
  20. mode: 'md',
  21. keyboardHeight: 290
  22. }
  23. },
  24. /**
  25. * mobile
  26. */
  27. 'mobile': {},
  28. /**
  29. * phablet
  30. */
  31. 'phablet': {
  32. isMatch: function (plt) {
  33. var smallest = Math.min(plt.width(), plt.height());
  34. var largest = Math.max(plt.width(), plt.height());
  35. return (smallest > 390 && smallest < 520) &&
  36. (largest > 620 && largest < 800);
  37. }
  38. },
  39. /**
  40. * tablet
  41. */
  42. 'tablet': {
  43. isMatch: function (plt) {
  44. var smallest = Math.min(plt.width(), plt.height());
  45. var largest = Math.max(plt.width(), plt.height());
  46. return (smallest > 460 && smallest < 820) &&
  47. (largest > 780 && largest < 1400);
  48. }
  49. },
  50. /**
  51. * android
  52. */
  53. 'android': {
  54. superset: 'mobile',
  55. subsets: [
  56. 'phablet',
  57. 'tablet'
  58. ],
  59. settings: {
  60. activator: function (plt) {
  61. // md mode defaults to use ripple activator
  62. // however, under-powered devices shouldn't use ripple
  63. // if this a linux device, and is using Android Chrome v36 (Android 5.0)
  64. // or above then use ripple, otherwise do not use a ripple effect
  65. if (plt.testNavigatorPlatform('linux')) {
  66. var chromeVersion = plt.matchUserAgentVersion(/Chrome\/(\d+).(\d+)?/);
  67. if (chromeVersion) {
  68. // linux android device using modern android chrome browser gets ripple
  69. if (parseInt(chromeVersion.major, 10) < 36 || plt.version().major < 5) {
  70. return 'none';
  71. }
  72. else {
  73. return 'ripple';
  74. }
  75. }
  76. // linux android device not using chrome browser checks just android's version
  77. if (plt.version().major < 5) {
  78. return 'none';
  79. }
  80. }
  81. // fallback to always use ripple
  82. return 'ripple';
  83. },
  84. autoFocusAssist: 'immediate',
  85. inputCloning: true,
  86. scrollAssist: true,
  87. hoverCSS: false,
  88. keyboardHeight: 300,
  89. mode: 'md',
  90. },
  91. isMatch: function (plt) {
  92. return plt.isPlatformMatch('android', ['android', 'silk'], ['windows phone']);
  93. },
  94. versionParser: function (plt) {
  95. return plt.matchUserAgentVersion(/Android (\d+).(\d+)?/);
  96. }
  97. },
  98. /**
  99. * ios
  100. */
  101. 'ios': {
  102. superset: 'mobile',
  103. subsets: [
  104. 'ipad',
  105. 'iphone'
  106. ],
  107. settings: {
  108. autoFocusAssist: 'delay',
  109. hideCaretOnScroll: true,
  110. hoverCSS: false,
  111. inputBlurring: platform_utils_1.isIos,
  112. inputCloning: platform_utils_1.isIos,
  113. keyboardHeight: 250,
  114. mode: 'ios',
  115. statusbarPadding: platform_utils_1.isCordova,
  116. swipeBackEnabled: platform_utils_1.isIos,
  117. tapPolyfill: platform_utils_1.isIosUIWebView,
  118. virtualScrollEventAssist: platform_utils_1.isIosUIWebView,
  119. disableScrollAssist: platform_utils_1.isIos,
  120. scrollAssist: platform_utils_1.isIos,
  121. keyboardResizes: keyboardResizes,
  122. },
  123. isMatch: function (plt) {
  124. return plt.isPlatformMatch('ios', ['iphone', 'ipad', 'ipod'], ['windows phone']);
  125. },
  126. versionParser: function (plt) {
  127. return plt.matchUserAgentVersion(/OS (\d+)_(\d+)?/);
  128. }
  129. },
  130. /**
  131. * ipad
  132. */
  133. 'ipad': {
  134. superset: 'tablet',
  135. settings: {
  136. keyboardHeight: 500,
  137. },
  138. isMatch: function (plt) {
  139. return plt.isPlatformMatch('ipad');
  140. }
  141. },
  142. /**
  143. * iphone
  144. */
  145. 'iphone': {
  146. subsets: [
  147. 'phablet'
  148. ],
  149. isMatch: function (plt) {
  150. return plt.isPlatformMatch('iphone');
  151. }
  152. },
  153. /**
  154. * Windows
  155. */
  156. 'windows': {
  157. superset: 'mobile',
  158. subsets: [
  159. 'phablet',
  160. 'tablet'
  161. ],
  162. settings: {
  163. mode: 'wp',
  164. autoFocusAssist: 'immediate',
  165. hoverCSS: false
  166. },
  167. isMatch: function (plt) {
  168. return plt.isPlatformMatch('windows', ['windows phone']);
  169. },
  170. versionParser: function (plt) {
  171. return plt.matchUserAgentVersion(/Windows Phone (\d+).(\d+)?/);
  172. }
  173. },
  174. /**
  175. * cordova
  176. */
  177. 'cordova': {
  178. isEngine: true,
  179. initialize: function (plt) {
  180. // prepare a custom "ready" for cordova "deviceready"
  181. plt.prepareReady = function () {
  182. // 1) ionic bootstrapped
  183. plt.windowLoad(function (win, doc) {
  184. // 2) window onload triggered or completed
  185. doc.addEventListener('deviceready', function () {
  186. // 3) cordova deviceready event triggered
  187. // add cordova listeners to emit platform events
  188. doc.addEventListener('backbutton', function (ev) {
  189. plt.zone.run(function () {
  190. plt.backButton.emit(ev);
  191. });
  192. });
  193. doc.addEventListener('pause', function (ev) {
  194. plt.zone.run(function () {
  195. plt.pause.emit(ev);
  196. });
  197. });
  198. doc.addEventListener('resume', function (ev) {
  199. plt.zone.run(function () {
  200. plt.resume.emit(ev);
  201. });
  202. });
  203. // cordova has its own exitApp method
  204. plt.exitApp = function () {
  205. win['navigator']['app'].exitApp();
  206. };
  207. // cordova has fully loaded and we've added listeners
  208. plt.triggerReady('cordova');
  209. });
  210. });
  211. };
  212. },
  213. isMatch: function (plt) {
  214. return platform_utils_1.isCordova(plt);
  215. }
  216. },
  217. /**
  218. * electron
  219. */
  220. 'electron': {
  221. superset: 'core',
  222. initialize: function (plt) {
  223. plt.prepareReady = function () {
  224. // 1) ionic bootstrapped
  225. plt.windowLoad(function () {
  226. plt.triggerReady('electron');
  227. });
  228. };
  229. },
  230. isMatch: function (plt) {
  231. return platform_utils_1.isElectron(plt);
  232. }
  233. }
  234. };
  235. function keyboardResizes(plt) {
  236. var win = plt.win();
  237. if (win.Ionic && win.Ionic.keyboardResizes === true) {
  238. return true;
  239. }
  240. return false;
  241. }
  242. exports.PlatformConfigToken = new core_1.InjectionToken('PLTCONFIG');
  243. function providePlatformConfigs() {
  244. return exports.PLATFORM_CONFIGS;
  245. }
  246. exports.providePlatformConfigs = providePlatformConfigs;
  247. });
  248. //# sourceMappingURL=platform-registry.js.map