You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
4.0 KiB

  1. // Main JS File
  2. // Start Wrapper
  3. jQuery(document).ready(function ($) {
  4. $(window).load(function () {
  5. $('[data-em]').each( function() {
  6. var address = $(this).attr('data-em');
  7. $(this).attr('href', 'mailto:'+address+'@protonvpn.com');
  8. if ($(this).text()==='') {
  9. $(this).text(address+'@protonvpn.com');
  10. }
  11. });
  12. var $list_items = $('.pagination li');
  13. $list_items.addClass('btn btn-secondary');
  14. $list_items.each(function() {
  15. var $this = $(this);
  16. if ($this.find('.dots').length !== 0) {
  17. $this.addClass('no-pointer-cursor');
  18. }
  19. });
  20. // Nav setup
  21. function setupNav() {
  22. // Prevent menu text from jumping by applying dynamic padding
  23. $('#navbar-main .nav-link').each( function() {
  24. $(this).css('width', '');
  25. var w = $(this).outerWidth();
  26. $(this).css('width', w+10);
  27. });
  28. }
  29. // cat nav, hide uncategorized
  30. $('#cat-nav .cat-item-1').remove();
  31. // Header
  32. function vpnHeader() {
  33. var scrollTop = $(window).scrollTop();
  34. var opacity = (scrollTop < 100) ? scrollTop : 100;
  35. opacity = opacity/100;
  36. if (opacity>=1) {
  37. $('#topbar, #navbar-main').addClass('active');
  38. }
  39. else {
  40. $('#topbar, #navbar-main').removeClass('active');
  41. }
  42. }
  43. // Mobile Nav
  44. function mobileNav() {
  45. $('.navbar-toggler').on('click', function() {
  46. $('#navbar-mobile, #navbar-mobile-overlay').toggleClass('show');
  47. return false;
  48. });
  49. $('#navbar-mobile-overlay').on('click', function() {
  50. $('#navbar-mobile, #navbar-mobile-overlay').removeClass('show');
  51. return false;
  52. });
  53. }
  54. $(window).on('scroll', vpnHeader);
  55. $(window).on('load', vpnHeader);
  56. $(window).on('resize', function() {
  57. vpnHeader();
  58. setupNav();
  59. });
  60. // Init
  61. $(window).ready( function () {
  62. vpnHeader();
  63. setupNav();
  64. mobileNav();
  65. });
  66. // HT fade in #ht-to-top
  67. $(function () {
  68. $(window).scroll(function () {
  69. if ($(this).scrollTop() > 100) {
  70. $('#ht-to-top').fadeIn('1000');
  71. } else {
  72. $('#ht-to-top').fadeOut('1000');
  73. }
  74. });
  75. // scroll body to 0px on click
  76. $('#ht-to-top').click(function () {
  77. $('body,html').animate({
  78. scrollTop: 0
  79. }, 800);
  80. return false;
  81. });
  82. });
  83. // Search icon setup
  84. $('.ht-kb-article-search').append('<span class="fa fa-spin fa-spinner"></span>');
  85. // Search event
  86. var searchLoader, searchCheck = false;
  87. $( "#s" ).on('keypress', function() {
  88. clearTimeout(searchLoader);
  89. clearTimeout(searchCheck);
  90. searchLoader = setTimeout( function() {
  91. if ($('#s').hasClass('live-search-loading')) {
  92. $('.ht-kb-article-search').addClass('loading');
  93. }
  94. else {
  95. $('.ht-kb-article-search').removeClass('loading');
  96. }
  97. }, 100);
  98. searchCheck = setTimeout( function() {
  99. if ($('#s').hasClass('live-search-loading')) {
  100. $('.ht-kb-article-search').addClass('loading');
  101. }
  102. else {
  103. $('.ht-kb-article-search').removeClass('loading');
  104. }
  105. }, 2500);
  106. });
  107. // Comment form styles
  108. $('#respond textarea, #respond input[type="text"], #respond input[type="password"], #respond input[type="email"], #respond input[type="url"]').addClass('form-control');
  109. $('#respond .form-submit').addClass('text-right');
  110. $('#respond #submit').addClass('btn btn-success');
  111. $('#commentform .comment-form-email .required').text("(not published)");
  112. // 404 search styles
  113. $('.error404 .search-field').addClass('form-control');
  114. $('.error404 .search-submit').addClass('btn btn-success');
  115. $('.search .search-field').addClass('form-control');
  116. $('.search .search-submit').addClass('btn btn-success');
  117. // comment form order
  118. if ( $('.comment-form-email').length ) {
  119. var respond = $('.comment-form-comment').detach();
  120. respond.insertAfter('.comment-form-email');
  121. }
  122. // Entry/Post Classes
  123. $('.entry table').addClass('table');
  124. });
  125. })
  126. // End Wrapper