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
79 lines
2.1 KiB
JavaScript
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;
|