The version of vichan running on lainchan.org
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

95 řádky
2.8KB

  1. /*
  2. * no-animated-gif.js - Toggle GIF animated thumbnails when gifsicle is enabled
  3. *
  4. * Copyright (c) 2014 Fredrick Brennan <admin@8chan.co>
  5. * Copyright (c) 2014 Marcin Łabanowski <marcin@6irc.net>
  6. *
  7. * Usage:
  8. * $config['additional_javascript'][] = 'js/jquery.min.js';
  9. * //$config['additional_javascript'][] = 'js/options.js';
  10. * //$config['additional_javascript'][] = 'js/style-select.js';
  11. * //$config['additional_javascript'][] = 'js/options/general.js';
  12. * $config['additional_javascript'][] = 'js/no-animated-gif.js';
  13. */
  14. function unanimate_gif(e) {
  15. if ($(e).closest('.thread').children('.thread-hidden').length > 0) return;
  16. if (active_page === "catalog")
  17. var c = $('<canvas class="thread-image"></canvas>');
  18. else
  19. var c = $('<canvas class="post-image"></canvas>');
  20. $(e).parent().prepend(c);
  21. c.attr('width', $(e).width());
  22. c.attr('height',$(e).height());
  23. function draw_image() {
  24. c[0].getContext('2d').drawImage(e, 0, 0, $(e).width(), $(e).height())
  25. };
  26. // Fix drawing image before loaded. Note that Chrome needs to check .complete because load() is NOT called if loaded from cache.
  27. if (!e.complete) {
  28. e.onload = draw_image;
  29. } else {
  30. draw_image();
  31. }
  32. $(e).addClass("unanimated").hide();
  33. }
  34. $(function(){
  35. var gif_finder = 'img.post-image[src$=".gif"], img.thread-image[src$=".gif"]';
  36. function no_animated_gif() {
  37. var anim_gifs = $(gif_finder);
  38. localStorage.no_animated_gif = true;
  39. $('#no-animated-gif>a').text(_('Animate GIFs'));
  40. $('#no-animated-gif>input').prop('checked', true);
  41. $.each(anim_gifs, function(i, e) {unanimate_gif(e)} );
  42. $(document).on('new_post', new_post_handler);
  43. }
  44. function animated_gif() {
  45. $('canvas.post-image').remove();
  46. $('img.post-image').removeClass("unanimated").show();
  47. localStorage.no_animated_gif = false;
  48. $('#no-animated-gif>a').text(_('Unanimate GIFs'));
  49. $('#no-animated-gif>input').prop('checked', false);
  50. $(document).off('new_post', new_post_handler);
  51. }
  52. function new_post_handler(e, post) {
  53. $(post).find(gif_finder).each(function(k, v) {
  54. unanimate_gif(v);
  55. });
  56. }
  57. if (active_page == 'thread' || active_page == 'index' || active_page == 'ukko' || active_page == 'catalog') {
  58. var selector, event;
  59. if (window.Options && Options.get_tab('general')) {
  60. selector = '#no-animated-gif>input';
  61. event = 'change';
  62. Options.extend_tab("general", "<label id='no-animated-gif'><input type='checkbox' />"+_('Unanimate GIFs')+"</label>");
  63. }
  64. else {
  65. selector = '#no-animated-gif';
  66. event = 'click';
  67. $('hr:first').before('<div id="no-animated-gif" style="text-align:right"><a class="unimportant" href="javascript:void(0)">'+_('Unanimate GIFs')+'</a></div>')
  68. }
  69. $(selector).on(event, function() {
  70. if (localStorage.no_animated_gif === 'true') {
  71. animated_gif();
  72. } else {
  73. no_animated_gif();
  74. }
  75. });
  76. if (localStorage.no_animated_gif === 'true')
  77. no_animated_gif();
  78. }
  79. });