| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- // TODO: This file was created by bulk-decaffeinate.
- // Sanity-check the conversion and remove this comment.
- /*
- * decaffeinate suggestions:
- * DS002: Fix invalid constructor
- * DS102: Remove unnecessary code created because of implicit returns
- * DS206: Consider reworking classes to avoid initClass
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
- */
- const Cls = (app.views.Mobile = class Mobile extends app.View {
- static initClass() {
- this.className = '_mobile';
-
- this.elements = {
- body: 'body',
- content: '._container',
- sidebar: '._sidebar',
- docPicker: '._settings ._sidebar'
- };
-
- this.shortcuts =
- {escape: 'onEscape'};
-
- this.routes =
- {after: 'afterRoute'};
- }
- static detect() {
- if (Cookies.get('override-mobile-detect') != null) {
- return JSON.parse(Cookies.get('override-mobile-detect'));
- }
- try {
- return (window.matchMedia('(max-width: 480px)').matches) ||
- (window.matchMedia('(max-width: 767px)').matches) ||
- (window.matchMedia('(max-height: 767px) and (max-width: 1024px)').matches) ||
- // Need to sniff the user agent because some Android and Windows Phone devices don't take
- // resolution (dpi) into account when reporting device width/height.
- ((navigator.userAgent.indexOf('Android') !== -1) && (navigator.userAgent.indexOf('Mobile') !== -1)) ||
- (navigator.userAgent.indexOf('IEMobile') !== -1);
- } catch (error) {
- return false;
- }
- }
- static detectAndroidWebview() {
- try {
- return /(Android).*( Version\/.\.. ).*(Chrome)/.test(navigator.userAgent);
- } catch (error) {
- return false;
- }
- }
- constructor() {
- this.showSidebar = this.showSidebar.bind(this);
- this.hideSidebar = this.hideSidebar.bind(this);
- this.onClickBack = this.onClickBack.bind(this);
- this.onClickForward = this.onClickForward.bind(this);
- this.onClickToggleSidebar = this.onClickToggleSidebar.bind(this);
- this.onClickDocPickerTab = this.onClickDocPickerTab.bind(this);
- this.onClickSettingsTab = this.onClickSettingsTab.bind(this);
- this.onTapSearch = this.onTapSearch.bind(this);
- this.onEscape = this.onEscape.bind(this);
- this.afterRoute = this.afterRoute.bind(this);
- this.el = document.documentElement;
- super(...arguments);
- }
- init() {
- $.on($('._search'), 'touchend', this.onTapSearch);
- this.toggleSidebar = $('button[data-toggle-sidebar]');
- this.toggleSidebar.removeAttribute('hidden');
- $.on(this.toggleSidebar, 'click', this.onClickToggleSidebar);
- this.back = $('button[data-back]');
- this.back.removeAttribute('hidden');
- $.on(this.back, 'click', this.onClickBack);
- this.forward = $('button[data-forward]');
- this.forward.removeAttribute('hidden');
- $.on(this.forward, 'click', this.onClickForward);
- this.docPickerTab = $('button[data-tab="doc-picker"]');
- this.docPickerTab.removeAttribute('hidden');
- $.on(this.docPickerTab, 'click', this.onClickDocPickerTab);
- this.settingsTab = $('button[data-tab="settings"]');
- this.settingsTab.removeAttribute('hidden');
- $.on(this.settingsTab, 'click', this.onClickSettingsTab);
- app.document.sidebar.search
- .on('searching', this.showSidebar);
- this.activate();
- }
- showSidebar() {
- let selection;
- if (this.isSidebarShown()) {
- window.scrollTo(0, 0);
- return;
- }
- this.contentTop = window.scrollY;
- this.content.style.display = 'none';
- this.sidebar.style.display = 'block';
- if (selection = this.findByClass(app.views.ListSelect.activeClass)) {
- const scrollContainer = window.scrollY === this.body.scrollTop ? this.body : document.documentElement;
- $.scrollTo(selection, scrollContainer, 'center');
- } else {
- window.scrollTo(0, (this.findByClass(app.views.ListFold.activeClass) && this.sidebarTop) || 0);
- }
- }
- hideSidebar() {
- if (!this.isSidebarShown()) { return; }
- this.sidebarTop = window.scrollY;
- this.sidebar.style.display = 'none';
- this.content.style.display = 'block';
- window.scrollTo(0, this.contentTop || 0);
- }
- isSidebarShown() {
- return this.sidebar.style.display !== 'none';
- }
- onClickBack() {
- return history.back();
- }
- onClickForward() {
- return history.forward();
- }
- onClickToggleSidebar() {
- if (this.isSidebarShown()) { this.hideSidebar(); } else { this.showSidebar(); }
- }
- onClickDocPickerTab(event) {
- $.stopEvent(event);
- this.showDocPicker();
- }
- onClickSettingsTab(event) {
- $.stopEvent(event);
- this.showSettings();
- }
- showDocPicker() {
- window.scrollTo(0, 0);
- this.docPickerTab.classList.add('active');
- this.settingsTab.classList.remove('active');
- this.docPicker.style.display = 'block';
- this.content.style.display = 'none';
- }
- showSettings() {
- window.scrollTo(0, 0);
- this.docPickerTab.classList.remove('active');
- this.settingsTab.classList.add('active');
- this.docPicker.style.display = 'none';
- this.content.style.display = 'block';
- }
- onTapSearch() {
- return window.scrollTo(0, 0);
- }
- onEscape() {
- return this.hideSidebar();
- }
- afterRoute(route) {
- this.hideSidebar();
- if (route === 'settings') {
- this.showDocPicker();
- } else {
- this.content.style.display = 'block';
- }
- if (page.canGoBack()) {
- this.back.removeAttribute('disabled');
- } else {
- this.back.setAttribute('disabled', 'disabled');
- }
- if (page.canGoForward()) {
- this.forward.removeAttribute('disabled');
- } else {
- this.forward.setAttribute('disabled', 'disabled');
- }
- }
- });
- Cls.initClass();
|