This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/lib/mobile.js.es6
Sam fe7883eeea UX: don't allow user scaling in mobile view
on iOS 10 behavior of zoom restriction has changed.

This does not disable zooming on iOS 10 but it DOES stop it from randomly
zooming when you are composing
2016-09-15 07:36:16 +10:00

79 lines
2.1 KiB
JavaScript

let mobileForced = false;
// An object that is responsible for logic related to mobile devices.
const Mobile = {
isMobileDevice: false,
mobileView: false,
init() {
const $html = $('html');
this.isMobileDevice = mobileForced || $html.hasClass('mobile-device');
this.mobileView = mobileForced || $html.hasClass('mobile-view');
if (Ember.testing || mobileForced) { return; }
try{
if (window.location.search.match(/mobile_view=1/)){
localStorage.mobileView = true;
}
if (window.location.search.match(/mobile_view=0/)){
localStorage.mobileView = false;
}
if (localStorage.mobileView) {
var savedValue = (localStorage.mobileView === 'true');
if (savedValue !== this.mobileView) {
this.reloadPage(savedValue);
}
}
} catch(err) {
// localStorage may be disabled, just skip this
// you get security errors if it is disabled
}
// Sam: I tried this to disable zooming on iOS 10 but it is not consistent
// you can still sometimes trigger zoom and be stuck in a horrible state
//
// let iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
// if (iOS) {
// document.documentElement.addEventListener('touchstart', function (event) {
// if (event.touches.length > 1) {
// event.preventDefault();
// }
// }, false);
// }
},
toggleMobileView() {
try {
if (localStorage) {
localStorage.mobileView = !this.mobileView;
}
} catch(err) {
// localStorage may be disabled, skip
}
this.reloadPage(!this.mobileView);
},
reloadPage(mobile) {
window.location.assign(window.location.pathname + '?mobile_view=' + (mobile ? '1' : '0'));
}
};
export function forceMobile() {
mobileForced = true;
}
export function resetMobile() {
mobileForced = false;
}
// Backwards compatibiltity, deprecated
Object.defineProperty(Discourse, 'Mobile', {
get: function() {
Ember.warn("DEPRECATION: `Discourse.Mobile` is deprecated, use `this.site.mobileView` instead");
return Mobile;
}
});
export default Mobile;