/* * compact-boardlist.js - a compact boardlist implementation making it * act more like a menubar * https://github.com/vichan-devel/Tinyboard/blob/master/js/compact-boardlist.js * * Released under the MIT license * Copyright (c) 2014 Marcin Łabanowski * * Usage: * $config['boards'] = array( * "icon_vichan" => array('*'), # would refer to /static/icons/vichan.png * "Regular" => array('b', 'cp', 'r+oc', 'id', 'waifu'), * "Topical" => array('sci', "Offsite board name" => '//int.vichan.net/s/'), * "fa_search" => array("search" => "/search.php") # would refer to a search * # font-awesome icon * ) * * $config['additional_javascript'][] = 'js/jquery.min.js'; * $config['additional_javascript'][] = 'js/mobile-style.js'; * $config['additional_javascript'][] = 'js/compact-boardlist.js'; * //$config['additional_javascript'][] = 'js/watch.js'; * */ $(document).on("ready", function() { if (window.Options && Options.get_tab('general')) { Options.extend_tab("general", "
Compact Board List " + ("") + ("") + ("") + ("") + "
"); } $('.compact-boardlist').on('change', function(){ var setting = $(this).attr('id'); localStorage[setting] = $(this).children('input').is(':checked'); location.reload(); }); $('.compact-boardlisttinyalias').on('change', function(){ var setting = $(this).attr('id'); localStorage[setting] = $(this).children('input').is(':checked'); location.reload(); }); $('.compact-boardlistshortalias').on('change', function(){ var setting = $(this).attr('id'); localStorage[setting] = $(this).children('input').is(':checked'); location.reload(); }); $('.compact-boardlistunicodealias').on('change', function(){ var setting = $(this).attr('id'); localStorage[setting] = $(this).children('input').is(':checked'); location.reload(); }); if (!localStorage.compactboardlist) { localStorage.compactboardlist = 'false'; } if (!localStorage.compactboardlisttinyalias) { localStorage.compactboardlistshortalias = 'false'; } if (!localStorage.compactboardlistshortalias) { localStorage.compactboardlistshortalias = 'false'; } if (!localStorage.compactboardlistunicodealias) { localStorage.compactboardlistunicodealias = 'false'; } function getSetting(key) { return (localStorage[key] == 'true'); } if (getSetting('compactboardlist')) $('#compactboardlist>input').prop('checked', 'checked'); if (getSetting('compactboardlisttinyalias')) $('#compactboardlisttinyalias>input').prop('checked', 'checked'); if (getSetting('compactboardlistshortalias')) $('#compactboardlistshortalias>input').prop('checked', 'checked'); if (getSetting('compactboardlistunicodealias')) $('#compactboardlistunicodealias>input').prop('checked', 'checked'); function initCompactBoardList() { //Pashe, influenced by tux, et al, WTFPL if (!getSetting("compactboardlist")) {return;} do_boardlist = function() { var categories = []; var topbl = $('.boardlist:first'); topbl.find('>.sub').each(function() { var cat = {name: $(this).data('description'), boards: []}; $(this).find('a').each(function() { var board = {name: $(this).prop('title'), uri: $(this).html(), href: $(this).prop('href') } cat.boards.push(board); }); categories.push(cat); }); topbl.addClass("compact-boardlist") .html(""); for (var i in categories) { var item = categories[i]; if (item.name.match(/^icon_/)) { var icon = item.name.replace(/^icon_/, '') $("") .appendTo(topbl) } else if (item.name.match(/^fa_/)) { var icon = item.name.replace(/^fa_/, '') $('') .appendTo(topbl) } else if (item.name.match(/^d_/)) { var icon = item.name.replace(/^d_/, '') $(''+icon+'') .appendTo(topbl) } else { var menuitemname = item.name; var tinyalias = {"Notices" : "/n/", "STEM" : "/s/" , "People" : "/p/" , "Overboards 1" : "/ob1/" , "Overboards 2" : "/ob2/", "Elsewhere" : "/e/", "Services" : "/s/", "Misc" : '/m/', "Affiliates" : "/af/" }; var shortalias = {"Notices" : "/not/", "STEM" : "/stem/" , "People" : "/people/" , "Overboards 1" : "/ob1/" , "Overboards 2" : "/ob2/", "Elsewhere" : "/else/", "Services" : "/serv/", "Misc" : "/misc/", "Affiliates" : "/uboa and sushi/" }; var unicodealias = {"Notices" : "ℹ️", "STEM" : "👨‍💻 " , "People" : "👥" , "Overboards 1" : "💬" , "Overboards 2" : "💭", "Elsewhere" : "🔍", "Services" : "🈂", "Misc" : "⁉", "Affiliates" : "🍣" }; if (getSetting("compactboardlisttinyalias")) { menuitemname = tinyalias[item.name]; } else if (getSetting("compactboardlistshortalias")){ menuitemname = shortalias[item.name]; } else if (getSetting("compactboardlistunicodealias")){ menuitemname = unicodealias[item.name]; } $(""+ menuitemname+"") .appendTo(topbl) .mouseenter(function() { var list = $("
") .css("top", $(this).position().top + 13 + $(this).height()) .css("left", $(this).position().left) .css("right", "auto") .appendTo(this); for (var j in this.item.boards) { var board = this.item.boards[j]; var tag; var menuitemname = board.uri; 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"}; var legacyalias = { "Δ" : "diy", "Ω" : "tech", "drug" : "drg", "hum" : "feels"}; var unicodealias = {"$$$": "💸", "rules" : "⚖️" , "faq" : "⁉️" , "news" : "📰" , "diy" : "🔧" , "Δ" : "🔧", "sec" : "🔒", "tech" : "💻", "Ω" : "💻", "inter" : "🎮", "lit" : "✍️", "music" : "🎼" , "vis" : "🎨" , "hum" : "👥", "drg" : "💊" , "drug" : "💊" , "zzz" : "💤" , "layer" : "㊙️" ,"cult" : "🎭" , "psy" : "🎆", "mega" : "📣" , "random" : "🎲", "radio" : "📻", "stream" : "📺", "zine" : "📓", "irc" : "📝", "q" : "❓", "r" : "🎲", "cal" : "📅"}; if (getSetting("compactboardlisttinyalias")) { menuitemname = tinyalias[board.uri]; } else if (getSetting("compactboardlistshortalias")){ menuitemname = shortalias[board.uri]; } else if (getSetting("compactboardlistunicodealias")){ menuitemname = unicodealias[board.uri]; } if (typeof menuitemname === "undefined"){ menuitemname = board.uri; } if (getSetting("boardlistmegaq")) { if (board === "mega"){ $(this).attr("href", "https://lainchan.org/megaq/index.html"); } } if (board.name) { tag = $(""+board.name+""+menuitemname+"") } else { tag = $(""+board.uri+"") } tag .addClass("cb-menuitem") .appendTo(list) } }) .mouseleave(function() { topbl.find(".cb-menu").remove(); })[0].item = item; } } do_boardlist = undefined; }; do_boardlist(); options_handler = $("
").css("display", "none"); options_background = $("
").on("click", Options.hide).appendTo(options_handler); options_div = $("
").appendTo(options_handler); options_close = $("") .on("click", Options.hide).appendTo(options_div); options_tablist = $("
").appendTo(options_div); options_button = $("
["+_("Options")+"]"); if ($(".boardlist.compact-boardlist").length) { options_button.addClass("cb-item cb-fa").html(""); } if ($(".boardlist:first").length) { options_button.css('float', 'right').appendTo($(".boardlist:first")); } else { var optsdiv = $('
'); options_button.appendTo(optsdiv); optsdiv.prependTo($(document.body)); } options_button.on("click", Options.show); options_handler.appendTo($(document.body)); if (typeof watchlist.render !== 'undefined') { $('.boardlist.compact-boardlist').append(' ['+_('watchlist')+']'); watchlist.render(); } if (typeof twemoji.parse !== 'undefined') { if (!getSetting("emojiimagefallback")) {return;} var twemoji_opts = { callback: function(icon, options, variant) { switch ( icon ) { case 'a9': // copyright case 'ae': // (R) case '2122': // TM case '25b6': // post filter return false; } return ''.concat(options.base, options.size, '/', icon, options.ext); } } twemoji.parse(document.body, twemoji_opts); } } initCompactBoardList(); });