Skip to content

Commit

Permalink
Added platform provider. Fixes #67
Browse files Browse the repository at this point in the history
Now you can easily detect the running platform and wait for the device
to be ready even if that ready even already fired.
  • Loading branch information
mlynch committed Nov 4, 2013
1 parent 1a70d10 commit 8cb701a
Show file tree
Hide file tree
Showing 3 changed files with 151 additions and 4 deletions.
78 changes: 76 additions & 2 deletions dist/js/ionic-angular.js
Expand Up @@ -2,15 +2,21 @@
* 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'
])
;
angular.module('ionic.service.actionSheet', ['ionic.service.templateLoad', 'ionic.ui.actionSheet'])

Expand Down Expand Up @@ -736,6 +742,74 @@ angular.module('ionic.ui.nav', ['ionic.service.templateLoad', 'ionic.service.ges

})();
;
(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);
;
;
(function() {
'use strict';
Expand Down
67 changes: 67 additions & 0 deletions js/ext/angular/src/directive/ionicPlatform.js
@@ -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);
10 changes: 8 additions & 2 deletions js/ext/angular/src/ionicAngular.js
Expand Up @@ -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'
])

0 comments on commit 8cb701a

Please sign in to comment.