Files
PurpleMine2/src/javascripts/modules/SidebarToggler.js
2020-02-22 14:41:40 +00:00

147 lines
3.4 KiB
JavaScript

var PurpleMine = PurpleMine || {} // eslint-disable-line no-use-before-define
PurpleMine.SidebarToggler = (function () {
'use strict'
var instance
var translations = {
en: {
toggler: 'Toggle sidebar'
},
ro: {
toggler: 'Deschide/închide bara laterală'
},
fr: {
toggler: 'Basculer la barre latérale'
},
pl: {
toggler: 'Pokaż/ukryj panel boczny'
},
ja: {
toggler: 'サイドバーの切り替え'
}
}
function SidebarToggler () {
if (instance) {
return instance
}
instance = this
this.sidebarVisible = true
this.sidebarHiding = null
this.$toggler = null
this.$main = $('#main')
this.$sidebar = $('#sidebar')
this.lang = document.documentElement.lang
if (typeof translations[this.lang] === 'undefined') {
this.lang = 'en'
}
this._ = translations[this.lang]
// Fix issue with context menu position
if (this.$main.css('position') === 'relative') {
$(window).on('load', function () {
$('#context-menu').appendTo('#wrapper3')
})
}
handleSidebar()
}
function handleSidebar () {
if (window.localStorage) {
instance.sidebarVisible =
localStorage.getItem('PurpleMine:sidebarHidden') === null
}
if (
instance.$sidebar.length > 0 &&
instance.$main.hasClass('nosidebar') === false
) {
buildButton()
bindKeyHandler()
if (instance.sidebarVisible === false) {
instance.hideSidebar(true)
}
}
}
function bindKeyHandler () {
var body = document.getElementsByTagName('body')[0]
window.onkeydown = function (event) {
if (
body === event.target &&
event.keyCode === 83 && // "s"
event.ctrlKey === false &&
event.altKey === false &&
event.shiftKey === false
) {
instance.toggleSidebar()
}
}
}
function buildButton () {
var togglerClass = 'sidebar-toggler'
var togglerHtml = '<a href="javascript:;" class="' +
togglerClass +
'" title="' +
instance._.toggler +
'"></a>'
instance.$toggler = $(togglerHtml)
instance.$main.append(instance.$toggler)
instance.$toggler.on('click', instance.toggleSidebar)
}
SidebarToggler.prototype.toggleSidebar = function () {
if (instance.sidebarVisible) {
instance.hideSidebar()
} else {
instance.showSidebar()
}
}
SidebarToggler.prototype.hideSidebar = function (immediate) {
if (immediate === true) {
this.$sidebar.addClass('sidebar-hiding sidebar-hidden')
} else {
this.$sidebar.addClass('sidebar-hiding')
this.sidebarHiding = setTimeout(function sidebarTimeout () {
instance.$sidebar.addClass('sidebar-hidden')
}, 500)
}
this.$toggler.addClass('sidebar-hidden')
this.sidebarVisible = false
if (window.localStorage) {
localStorage.setItem('PurpleMine:sidebarHidden', 'x')
}
}
SidebarToggler.prototype.showSidebar = function () {
clearTimeout(this.sidebarHiding)
instance.$sidebar.removeClass('sidebar-hidden')
setTimeout(function sidebarTimeout () {
instance.$sidebar.removeClass('sidebar-hiding')
}, 50)
this.$toggler.removeClass('sidebar-hidden')
this.sidebarVisible = true
if (window.localStorage) {
localStorage.removeItem('PurpleMine:sidebarHidden')
}
}
return SidebarToggler
}())