The version of vichan running on lainchan.org
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

238 lignes
10KB

  1. /*
  2. * compact-boardlist.js - a compact boardlist implementation making it
  3. * act more like a menubar
  4. * https://github.com/vichan-devel/Tinyboard/blob/master/js/compact-boardlist.js
  5. *
  6. * Released under the MIT license
  7. * Copyright (c) 2014 Marcin Łabanowski <marcin@6irc.net>
  8. *
  9. * Usage:
  10. * $config['boards'] = array(
  11. * "icon_vichan" => array('*'), # would refer to /static/icons/vichan.png
  12. * "Regular" => array('b', 'cp', 'r+oc', 'id', 'waifu'),
  13. * "Topical" => array('sci', "Offsite board name" => '//int.vichan.net/s/'),
  14. * "fa_search" => array("search" => "/search.php") # would refer to a search
  15. * # font-awesome icon
  16. * )
  17. *
  18. * $config['additional_javascript'][] = 'js/jquery.min.js';
  19. * $config['additional_javascript'][] = 'js/mobile-style.js';
  20. * $config['additional_javascript'][] = 'js/compact-boardlist.js';
  21. * //$config['additional_javascript'][] = 'js/watch.js';
  22. *
  23. */
  24. $(document).on("ready", function() {
  25. if (window.Options && Options.get_tab('general')) {
  26. Options.extend_tab("general",
  27. "<fieldset><legend> Compact Board List </legend>"
  28. + ("<label class='compact-boardlist' id='compactboardlist' style='padding:0px;'><input type='checkbox' /> Enable Compact Board List </label>")
  29. + ("<label class='compact-boardlisttinyalias' id='compactboardlisttinyalias'><input type='checkbox' /> Tiny Alias for Compact Board List </label>")
  30. + ("<label class='compact-boardlistshortalias' id='compactboardlistshortalias'><input type='checkbox' /> Short Alias for Compact Board List </label>")
  31. + ("<label class='compact-boardlistunicodealias' id='compactboardlistunicodealias'><input type='checkbox' /> Unicode Alias for Compact Board List </label>")
  32. + "</fieldset>");
  33. }
  34. $('.compact-boardlist').on('change', function(){
  35. var setting = $(this).attr('id');
  36. localStorage[setting] = $(this).children('input').is(':checked');
  37. location.reload();
  38. });
  39. $('.compact-boardlisttinyalias').on('change', function(){
  40. var setting = $(this).attr('id');
  41. localStorage[setting] = $(this).children('input').is(':checked');
  42. location.reload();
  43. });
  44. $('.compact-boardlistshortalias').on('change', function(){
  45. var setting = $(this).attr('id');
  46. localStorage[setting] = $(this).children('input').is(':checked');
  47. location.reload();
  48. });
  49. $('.compact-boardlistunicodealias').on('change', function(){
  50. var setting = $(this).attr('id');
  51. localStorage[setting] = $(this).children('input').is(':checked');
  52. location.reload();
  53. });
  54. if (!localStorage.compactboardlist) {
  55. localStorage.compactboardlist = 'false';
  56. }
  57. if (!localStorage.compactboardlisttinyalias) {
  58. localStorage.compactboardlistshortalias = 'false';
  59. }
  60. if (!localStorage.compactboardlistshortalias) {
  61. localStorage.compactboardlistshortalias = 'false';
  62. }
  63. if (!localStorage.compactboardlistunicodealias) {
  64. localStorage.compactboardlistunicodealias = 'false';
  65. }
  66. function getSetting(key) {
  67. return (localStorage[key] == 'true');
  68. }
  69. if (getSetting('compactboardlist')) $('#compactboardlist>input').prop('checked', 'checked');
  70. if (getSetting('compactboardlisttinyalias')) $('#compactboardlisttinyalias>input').prop('checked', 'checked');
  71. if (getSetting('compactboardlistshortalias')) $('#compactboardlistshortalias>input').prop('checked', 'checked');
  72. if (getSetting('compactboardlistunicodealias')) $('#compactboardlistunicodealias>input').prop('checked', 'checked');
  73. function initCompactBoardList() { //Pashe, influenced by tux, et al, WTFPL
  74. if (!getSetting("compactboardlist")) {return;}
  75. do_boardlist = function() {
  76. var categories = [];
  77. var topbl = $('.boardlist:first');
  78. topbl.find('>.sub').each(function() {
  79. var cat = {name: $(this).data('description'), boards: []};
  80. $(this).find('a').each(function() {
  81. var board = {name: $(this).prop('title'), uri: $(this).html(), href: $(this).prop('href') }
  82. cat.boards.push(board);
  83. });
  84. categories.push(cat);
  85. });
  86. topbl.addClass("compact-boardlist")
  87. .html("");
  88. for (var i in categories) {
  89. var item = categories[i];
  90. if (item.name.match(/^icon_/)) {
  91. var icon = item.name.replace(/^icon_/, '')
  92. $("<a class='cb-item cb-icon' href='"+categories[i].boards[0].href+"'><img src='/static/icons/"+icon+".png'></a>")
  93. .appendTo(topbl)
  94. }
  95. else if (item.name.match(/^fa_/)) {
  96. var icon = item.name.replace(/^fa_/, '')
  97. $('<a class="cb-item cb-fa" href="'+categories[i].boards[0].href+'"><i class="fa-'+icon+' fa"></i></a>')
  98. .appendTo(topbl)
  99. }
  100. else if (item.name.match(/^d_/)) {
  101. var icon = item.name.replace(/^d_/, '')
  102. $('<a class="cb-item cb-cat" href="'+categories[i].boards[0].href+'">'+icon+'</a>')
  103. .appendTo(topbl)
  104. }
  105. else {
  106. var menuitemname = item.name;
  107. var tinyalias = {"Notices" : "/n/", "STEM" : "/s/" , "People" : "/p/" , "Overboards 1" : "/ob1/" , "Overboards 2" : "/ob2/", "Elsewhere" : "/e/", "Services" : "/s/", "Misc" : '/m/', "Affiliates" : "/af/" };
  108. var shortalias = {"Notices" : "/not/", "STEM" : "/stem/" , "People" : "/people/" , "Overboards 1" : "/ob1/" , "Overboards 2" : "/ob2/", "Elsewhere" : "/else/", "Services" : "/serv/", "Misc" : "/misc/", "Affiliates" : "/uboa and sushi/" };
  109. var unicodealias = {"Notices" : "&#x2139&#xFE0F", "STEM" : "&#x1F468&#x200D&#x1F4BB " , "People" : "&#x1F465" , "Overboards 1" : "&#x1F4AC" , "Overboards 2" : "&#x1F4AD", "Elsewhere" : "&#x1F50D", "Services" : "&#x1F202", "Misc" : "&#x2049", "Affiliates" : "&#x1F363" };
  110. if (getSetting("compactboardlisttinyalias")) {
  111. menuitemname = tinyalias[item.name];
  112. }
  113. else if (getSetting("compactboardlistshortalias")){
  114. menuitemname = shortalias[item.name];
  115. }
  116. else if (getSetting("compactboardlistunicodealias")){
  117. menuitemname = unicodealias[item.name];
  118. }
  119. $("<a class='cb-item cb-cat' href='javascript:void(0)'>"+ menuitemname+"</a>")
  120. .appendTo(topbl)
  121. .mouseenter(function() {
  122. var list = $("<div class='boardlist top cb-menu'></div>")
  123. .css("top", $(this).position().top + 13 + $(this).height())
  124. .css("left", $(this).position().left)
  125. .css("right", "auto")
  126. .appendTo(this);
  127. for (var j in this.item.boards) {
  128. var board = this.item.boards[j];
  129. var tag;
  130. var menuitemname = board.uri;
  131. var tinyalias = {"$$$" : "$", "rules" : "law" , "faq" : "?" , "news" : "n" , "diy" : "Δ", "sec" : "s", "tech" : "Ω", "inter" : 'i', "lit" : "l", "music" : "mu" , "vis" : "v" , "hum" : "h", "drg" : "d" , "zzz" : "z" , "layer" : "ddt" ,"cult" : "c" , "psy" : "p", "mega" : "me" , "random" : "ra", "radio" : "rad", "stream" : "mov", "cal" : "ca"};
  132. var legacyalias = { "Δ" : "diy", "Ω" : "tech", "drug" : "drg", "hum" : "feels"};
  133. var unicodealias = {"$$$": "&#x1F4B8", "rules" : "&#x2696&#xFE0F" , "faq" : "&#x2049&#xFE0F" , "news" : "&#x1F4F0" , "diy" : "&#x1F527" , "Δ" : "&#x1F527", "sec" : "&#x1F512", "tech" : "&#x1F4BB", "Ω" : "&#x1F4BB", "inter" : "&#x1F3AE", "lit" : "&#x270D&#xFE0F", "music" : "&#x1F3BC" , "vis" : "&#x1F3A8" , "hum" : "&#x1F465", "drg" : "&#x1F48A" , "drug" : "&#x1F48A" , "zzz" : "&#x1F4A4" , "layer" : "&#x3299&#xFE0F" ,"cult" : "&#x1F3AD" , "psy" : "&#x1F386", "mega" : "&#x1F4E3" , "random" : "&#x1F3B2", "radio" : "&#x1F4FB", "stream" : "&#x1F4FA", "zine" : "&#x1F4D3", "irc" : "&#x1F4DD", "q" : "&#x2753", "r" : "&#x1F3B2", "cal" : "&#x1f4c5"};
  134. if (getSetting("compactboardlisttinyalias")) {
  135. menuitemname = tinyalias[board.uri];
  136. }
  137. else if (getSetting("compactboardlistshortalias")){
  138. menuitemname = shortalias[board.uri];
  139. }
  140. else if (getSetting("compactboardlistunicodealias")){
  141. menuitemname = unicodealias[board.uri];
  142. }
  143. if (typeof menuitemname === "undefined"){
  144. menuitemname = board.uri;
  145. }
  146. if (getSetting("boardlistmegaq")) {
  147. if (board === "mega"){
  148. $(this).attr("href", "https://lainchan.org/megaq/index.html");
  149. }
  150. }
  151. if (board.name) {
  152. tag = $("<a href='"+board.href+"'><span>"+board.name+"</span><span class='cb-uri'>"+menuitemname+"</span></a>")
  153. }
  154. else {
  155. tag = $("<a href='"+board.href+"'><span>"+board.uri+"</span><span class='cb-uri'><i class='fa fa-globe'></i></span></a>")
  156. }
  157. tag
  158. .addClass("cb-menuitem")
  159. .appendTo(list)
  160. }
  161. })
  162. .mouseleave(function() {
  163. topbl.find(".cb-menu").remove();
  164. })[0].item = item;
  165. }
  166. }
  167. do_boardlist = undefined;
  168. };
  169. do_boardlist();
  170. options_handler = $("<div id='options_handler'></div>").css("display", "none");
  171. options_background = $("<div id='options_background'></div>").on("click", Options.hide).appendTo(options_handler);
  172. options_div = $("<div id='options_div'></div>").appendTo(options_handler);
  173. options_close = $("<a id='options_close' href='javascript:void(0)'><i class='fa fa-times'></i></div>")
  174. .on("click", Options.hide).appendTo(options_div);
  175. options_tablist = $("<div id='options_tablist'></div>").appendTo(options_div);
  176. options_button = $("<a href='javascript:void(0)' title='"+_("Options")+"'>["+_("Options")+"]</a>");
  177. if ($(".boardlist.compact-boardlist").length) {
  178. options_button.addClass("cb-item cb-fa").html("<i class='fa fa-gear'></i>");
  179. }
  180. if ($(".boardlist:first").length) {
  181. options_button.css('float', 'right').appendTo($(".boardlist:first"));
  182. }
  183. else {
  184. var optsdiv = $('<div style="text-align: right"></div>');
  185. options_button.appendTo(optsdiv);
  186. optsdiv.prependTo($(document.body));
  187. }
  188. options_button.on("click", Options.show);
  189. options_handler.appendTo($(document.body));
  190. if (typeof watchlist.render !== 'undefined') {
  191. $('.boardlist.compact-boardlist').append(' <a class="watchlist-toggle cb-item cb-cat" href="#"><span>['+_('watchlist')+']</span></a>');
  192. watchlist.render();
  193. }
  194. if (typeof twemoji.parse !== 'undefined') {
  195. if (!getSetting("emojiimagefallback")) {return;}
  196. var twemoji_opts = {
  197. callback: function(icon, options, variant) {
  198. switch ( icon ) {
  199. case 'a9': // copyright
  200. case 'ae': // (R)
  201. case '2122': // TM
  202. case '25b6': // post filter
  203. return false;
  204. }
  205. return ''.concat(options.base, options.size, '/', icon, options.ext);
  206. }
  207. }
  208. twemoji.parse(document.body, twemoji_opts);
  209. }
  210. }
  211. initCompactBoardList();
  212. });