Advertisement
AHOHNMYC

Hide frame

Apr 17th, 2017
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name       Hide frame
  3. // @namespace  0chan
  4. // @include    https://0chan.hk/*
  5. // @author     incognito ( https://0chan.hk/s/2840#85120 ), AHOHNMYC
  6. // @version    v0.0.6
  7. // @grant      GM_addStyle
  8. // ==/UserScript==
  9.  
  10. // Скрытие/открытие панели доступно по нажатию клавиши 's'
  11.  
  12. const ANIMATION_DURATION = 0.3,
  13.       HIDDEN_SYMBOL = '>>',
  14.       SHOWED_SYMBOL = '<<';
  15.      
  16. GM_addStyle(`#sidebarSwitcher {background-color:#2C333D;
  17.   display: table;
  18.   position: fixed;
  19.   top: 0;
  20.   left: 250px;
  21.   width: 30px;
  22.   padding: 0 2px 2px 0;
  23.   border-radius: 0 0 6px 0;
  24.   font-size: 20px;
  25.   opacity: .3;
  26.   z-index: 15;
  27.   cursor: pointer;
  28. }
  29. #sidebarSwitcher > span {display: table-cell; vertical-align: middle;}
  30. #sidebarSwitcher, #sidebar, #content, .headmenu {transition-duration: ${ANIMATION_DURATION}s; transition-timing-function: ease-out;}
  31. body.hiddenSidebar #sidebar {left: -250px;}
  32. body.hiddenSidebar #content {margin-left: 0px;}
  33. body.hiddenSidebar #sidebarSwitcher, body.hiddenSidebar .headmenu {left: 0px;}`);
  34.  
  35. try {localStorage;} catch (e){alert('Ты зачем localStorage выключил? Совсем ебанутый? А ну включил обратно!');}
  36.  
  37. // Крафтим глобальную переменную-интерфейс к localStorage
  38. Object.defineProperty(this, 'isHidden', {
  39.   get: ()=>!!localStorage.hiddenSidebar,
  40.   set: bool=>{localStorage.hiddenSidebar = bool ? '1' : '';}
  41. });
  42.  
  43. let label = document.createElement('div'),
  44.     arrow = document.createElement('span');
  45. label.appendChild(arrow);
  46. label.classList.add('label');
  47. label.id = 'sidebarSwitcher';
  48. document.body.appendChild(label);
  49.  
  50. function actualizeSidebar() {
  51.   document.body.classList[isHidden ? 'add' : 'remove']('hiddenSidebar');
  52.   setTimeout(
  53.     ()=>{arrow.innerHTML = isHidden ? HIDDEN_SYMBOL : SHOWED_SYMBOL;},
  54.     ANIMATION_DURATION*1000/2
  55.   );
  56. }
  57.  
  58. // При загрузке вкладки устанавливаем сохранённое ранее состояние
  59. actualizeSidebar();
  60. // Отслеживаем, не изменили ли чего на других вкладках
  61. window.addEventListener('focus', actualizeSidebar);
  62.  
  63. function switchSidebar() {
  64.   isHidden = !isHidden;
  65.   actualizeSidebar();
  66. }
  67.  
  68. label.addEventListener('click', switchSidebar);
  69.  
  70. const KEYCODE_S = 83;
  71. window.addEventListener('keyup', e=>{
  72.   if ( e.keyCode !== KEYCODE_S || e.ctrlKey || e.shiftKey || e.altKey ) return;
  73.   // Проверяем, не является ли активный элемент полем ввода
  74.   let node = document.activeElement.nodeName;
  75.   if ( node == 'TEXTAREA' || node == 'INPUT' ) return;
  76.   switchSidebar();
  77. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement