The version of vichan running on lainchan.org
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

238 rindas
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. });