Added platform provider. Fixes #67

Now you can easily detect the running platform and wait for the device
to be ready even if that ready even already fired.
This commit is contained in:
Max Lynch
2013-11-04 11:52:57 -06:00
parent 1a70d10ce3
commit 8cb701a3da
3 changed files with 151 additions and 4 deletions

View File

@ -0,0 +1,67 @@
(function() {
'use strict';
angular.module('ionic.platform', [])
/**
* The platformProvider makes it easy to set and detect which platform
* the app is currently running on. It has some auto detection built in
* for PhoneGap and Cordova. This provider also takes care of
* initializing some defaults that depend on the platform, such as the
* height of header bars on iOS 7.
*/
.provider('platform', function() {
var platform = 'unknown';
var isPlatformReady = false;
if(window.cordova || window.PhoneGap || window.phonegap) {
platform = 'cordova';
}
console.log('Detected platform', platform);
var isReady = function() {
if(platform == 'cordova') {
return window.device;
}
return true;
};
// We need to do some stuff as soon as we know the platform,
// like adjust header margins for iOS 7, etc.
setTimeout(function afterReadyWait() {
if(isReady()) {
ionic.Platform.detect();
} else {
setTimeout(afterReadyWait, 50);
}
}, 10);
return {
setPlatform: function(p) {
platform = p;
},
$get: ['$q', '$timeout', function($q, $timeout) {
return {
ready: function(cb) {
var self = this;
var q = $q.defer();
$timeout(function readyWait() {
if(isReady()) {
isPlatformReady = true;
q.resolve();
cb();
} else {
$timeout(readyWait, 50);
}
}, 50);
return q.promise;
}
};
}]
};
});
})(ionic);

View File

@ -2,12 +2,18 @@
* Create a wrapping module to ease having to include too many
* modules.
*/
angular.module('ionic.ui', ['ionic.ui.content',
angular.module('ionic.ui', [
'ionic.ui.content',
'ionic.ui.tabs',
'ionic.ui.nav',
'ionic.ui.sideMenu',
'ionic.ui.list',
'ionic.ui.checkbox',
'ionic.ui.toggle'
'ionic.ui.toggle',
]);
angular.module('ionic', [
'ionic.platform',
'ionic.ui'
])