mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-23 01:40:25 +00:00
we now have two types of namespaces: - true namespace: angular.* - used for all global apis - virtual namespace: ng.*, ngMock.*, ... - used for all DI modules the virual namespaces have services under the second namespace level (e.g. ng.) and filters and directives prefixed with filter: and directive: respectively (e.g. ng.filter:orderBy, ng.directive:ngRepeat) this simplifies urls and makes them a lot shorter while still avoiding name collisions
46 lines
1.7 KiB
JavaScript
46 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* !!! This is an undocumented "private" service !!!
|
|
*
|
|
* @name ng.$sniffer
|
|
* @requires $window
|
|
*
|
|
* @property {boolean} history Does the browser support html5 history api ?
|
|
* @property {boolean} hashchange Does the browser support hashchange event ?
|
|
*
|
|
* @description
|
|
* This is very simple implementation of testing browser's features.
|
|
*/
|
|
function $SnifferProvider() {
|
|
this.$get = ['$window', function($window) {
|
|
var eventSupport = {},
|
|
android = int((/android (\d+)/.exec(lowercase($window.navigator.userAgent)) || [])[1]);
|
|
|
|
return {
|
|
// Android has history.pushState, but it does not update location correctly
|
|
// so let's not use the history API at all.
|
|
// http://code.google.com/p/android/issues/detail?id=17471
|
|
// https://github.com/angular/angular.js/issues/904
|
|
history: !!($window.history && $window.history.pushState && !(android < 4)),
|
|
hashchange: 'onhashchange' in $window &&
|
|
// IE8 compatible mode lies
|
|
(!$window.document.documentMode || $window.document.documentMode > 7),
|
|
hasEvent: function(event) {
|
|
// IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
|
|
// it. In particular the event is not fired when backspace or delete key are pressed or
|
|
// when cut operation is performed.
|
|
if (event == 'input' && msie == 9) return false;
|
|
|
|
if (isUndefined(eventSupport[event])) {
|
|
var divElm = $window.document.createElement('div');
|
|
eventSupport[event] = 'on' + event in divElm;
|
|
}
|
|
|
|
return eventSupport[event];
|
|
},
|
|
// TODO(i): currently there is no way to feature detect CSP without triggering alerts
|
|
csp: false
|
|
};
|
|
}];
|
|
}
|