42 lines
1.7 KiB
JavaScript
42 lines
1.7 KiB
JavaScript
/*global Modernizr:true safari:true*/
|
|
|
|
// Initializes an object that lets us know about our capabilities.
|
|
export default {
|
|
name: "sniff-capabilities",
|
|
initialize(container, application) {
|
|
const $html = $('html'),
|
|
touch = $html.hasClass('touch') || (Modernizr.prefixed("MaxTouchPoints", navigator) > 1),
|
|
caps = {touch};
|
|
|
|
// Store the touch ability in our capabilities object
|
|
$html.addClass(touch ? 'discourse-touch' : 'discourse-no-touch');
|
|
|
|
// Detect Devices
|
|
if (navigator) {
|
|
const ua = navigator.userAgent;
|
|
if (ua) {
|
|
caps.isAndroid = ua.indexOf('Android') !== -1;
|
|
caps.isWinphone = ua.indexOf('Windows Phone') !== -1;
|
|
|
|
caps.isOpera = !!window.opera || ua.indexOf(' OPR/') >= 0;
|
|
caps.isFirefox = typeof InstallTrigger !== 'undefined';
|
|
caps.isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);
|
|
caps.isChrome = !!window.chrome && !caps.isOpera;
|
|
caps.canPasteImages = caps.isChrome || caps.isFirefox;
|
|
}
|
|
|
|
caps.isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
}
|
|
|
|
// We consider high res a device with 1280 horizontal pixels. High DPI tablets like
|
|
// iPads should report as 1024.
|
|
caps.highRes = window.screen.width >= 1280;
|
|
|
|
// Inject it
|
|
application.register('capabilities:main', caps, { instantiate: false });
|
|
application.inject('view', 'capabilities', 'capabilities:main');
|
|
application.inject('controller', 'capabilities', 'capabilities:main');
|
|
application.inject('component', 'capabilities', 'capabilities:main');
|
|
}
|
|
};
|