您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Кнопка цитирования выделенного и панель тегов для LORCode
// ==UserScript== // @name LORCode Tools // @description Кнопка цитирования выделенного и панель тегов для LORCode // @author Алексей Соловьев aka moscwich; Емельянов Эдуард aka Eddy_Em -- Fork && upgrade // @license Creative Commons Attribution 3.0 Unported // @version 0.0.3 // @grant none // @namespace http://www.linux.org.ru/* // @namespace https://www.linux.org.ru/* // @include http://www.linux.org.ru/* // @include https://www.linux.org.ru/* // ==/UserScript== // Based on MultiCodePanel 2.2 (v. 0.22) // http://al-moscwich.tk/tag/multicodepanel /* * CHANGELOG * * 25.12.2014 Eddy_Em * Fixed bug with menu "sort tracker" * Warning! refresh your stylish rules to see normal menu * * 16.07.2014 Eddy_Em * Some little fixes with JS syntax + no quotes substitution in [inline] * * 16.05.2014 Eddy_Em * Fixed regular Maxcom's caprice with "tracker/?filter=all" instead of simple "tracker" * * 07.02.2014 Eddy_Em * Hiding of "Similar topics" * * 02.12.2013 Eddy_Em * Latex imaging + quotation * * 08.11.2013 Edward V. Emelianoff <[email protected]> * Add collapsing of large code blocks * * 13.02.2013 Eddy_Em * Add "replace quotes by quotes" to fight with hizel's shit * * 4.02.2013 Eddy_Em * Add "Show seconds in datetime" * * 14.12.2012 Eddy_Em * Fixed small bug with editing of topics * * 13.12.2012 Eddy_Em * Fixed bug with no panels in edit form * Fixed tag focusing * Modified [list] tag in case of nonempty selection * * 29.11.2012 Eddy_Em * Fixed problems with new LOR formatting * Now script works in tango too * * 22.11.2012 Eddy_Em * Fix problem with citing & add tags in block-quote * * 21.11.2012 Eddy_Em * Some little fixes + add global settings in user profile * * 19.11.2012 Eddy_Em * Some little fixes * * TODO: * - don't change <<>> to "" in [code] and [inline] * - changing of <<>> to "" in topic form * - direct change of user comment * - preview of links to images * - messages preview */ (function(){ const TEST = false; // set to false in release if(window.parent != window){ unsafeWindow.console.log("INFRAME!!!"); return; } const pluginVersion = "0.0.3"; // версия скрипта; нужна для оповещения при внесении изменений unsafeWindow.console.log("start"); function tlog__(msg){unsafeWindow.console.log(msg);} var tlog; if(TEST) tlog = tlog__; else tlog = function(msg){}; /* * GLOBAL FUNCTIONS */ tlog("begin"); var Glob; // global settings /* * Load object nm from local storage * if it's absent set it to defval or return null if devfal undefined */ function LoadObject(nm, defval){ var val = JSON.parse(localStorage.getItem(nm)); if(val == null && typeof(defval) != "undefined"){ tlog("Can't load object, try to use defaults"); val = defval; } return val; } /* * Save object obj in local storage as nm */ function SaveObject(obj, nm){ tlog("save " + obj); localStorage.setItem(nm, JSON.stringify(obj)); } function $(id){ return document.getElementById(id); } function noDef(evt){ // remove default event action evt.stopPropagation(); evt.preventDefault(); } function rmElement(el){ // remove element from DOM tree if(typeof(el) != "undefined" && el) el.parentNode.removeChild(el); } function getURL(full){ // get URL of current page // if full defined && true, don't cut GET parameters from URL var qpos, CurURL = location.href; if(typeof(full) == "undefined" || !full){ qpos = CurURL.indexOf("?"); if(qpos > -1) CurURL = CurURL.substring(0,qpos); } qpos = CurURL.indexOf("//") + 2; CurURL = CurURL.substring(qpos); if(CurURL.charAt(CurURL.length - 1) == "/") CurURL = CurURL.substring(0,CurURL.length - 1); return CurURL; } // insert newElement after targetElement function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if(parent.lastchild == targetElement) parent.appendChild(newElement); else parent.insertBefore(newElement, targetElement.nextSibling); } // indicate that iframe content is loaded var iframeLoaded = false, nTries = 0; function iframeIsLoaded(){ var F = $("innerFrame"); if (F.src == "") return; var D = (F.contentDocument) ? F.contentDocument : F.contentWindow.document; if(D.getElementsByClassName("head").length == 0 && D.getElementsByClassName("menu").length == 0){ nTries = 100; return; // frame is blocked by AdBlock } iframeLoaded = true; nTries = 0; tlog("IFRAME loaded " + F.src); } // alert that iframe could be blocked by adBlock function IFRMerror(){ tlog("CAN'T LOAD IFRAME!"); alert("Не могу подгрузить дополнительные сообщения!\n"+ "Проверьте, не блокирует ли adBlock элементы iframe на ЛОРе\n"+ "(нажмите в меню adBlock \"Открыть список элементов\" и снимите "+ "блокировку с элемента \"фрейм\""); } /* * USERSCRIPT ITSELF */ function AlertOnFirstRun(){ alert("Вы запускаете в первый раз LOR-panel, либо обновили ее!\n" +"Обратите внимание на то, что настройки скрипта находятся в вашем профиле" +"(«Настройки пользовательского скрипта»)\n" +"для полноценного отображения меню добавьте в ЛОР-стиль Stylish следующее:\n\n" +".SortTrackMenu{position: absolute; margin: auto;" +"background: none repeat scroll 0 0 #0000ff !important; text-align: left;}\n" +".SortTrackMenuItem{left: 0px; margin: 1px; background-color: #c0c0c0 !important; color: black;}\n\n" +"либо что-нибудь свое" ) SaveObject(pluginVersion, "LOR-panel.version"); } var savedVersion = LoadObject("LOR-panel.version", false); if(pluginVersion != savedVersion) AlertOnFirstRun(); // parent with class "msg" for element el of first element with class "msg" function getMsg(el){ while(el && el.className != "msg") el = el.parentElement; if(!el) el = document.getElementsByClassName("msg")[0]; return el; } // get URL of message, aMsg -- article element function getMsgURL(aMsg){ aMsg = getMsg(aMsg);//while(aMsg.className != "msg") aMsg = aMsg.parentElement; var id = aMsg.id; var href = ""; if(id.indexOf("topic") != -1){ // topic var H = aMsg.getElementsByTagName("h1"); if(H.length > 0) href = H[0].firstElementChild.href; }else{ // message //href = pMsg.firstElementChild.firstElementChild.href; var As = aMsg.getElementsByTagName("a"); for(var l in As) if(As[l].innerHTML == "Ссылка"){href = As[l].href; break;} //href = pMsg.getElementsByClassName("reply")[0].firstElementChild.lastElementChild.firstElementChild.href; } return href; } /* * Global settings */ function GlobSettings(){ function nope(){}; // array: item name, defval, menu name, appr. function var GMitems = [ ["addSortMenu", true, "фильтрация трекера", addSortMenu], ["rmAttInAll", false, "удалить прикрепленные везде", rmAttInAll], ["rmAttInTalks", true, "удалить прикрепленные только в Talks", rmAttInTalks], ["expandCollapseCODE", true, "сворачивать большие блоки CODE", expandCollapseCODE], //["tagsInSpoiler",true, "помещать теги в профиле в спойлер", mkSpoiler], Broken by Maxcom & Hizel // ["noSymbols", true, "удалить «страшный глаз»", idioticSymbolsRemove], Мне глаз нужен ["addUserPanel" ,true, "добавить пользовательскую панель", AddUserPanel], ["showSeconds", true, "отображать секунды в дате", ShowSecondsInDate], ["reparceQuots",false, "заменять кавычки кавычками", nope], ["SortBackwards", false, "отображать новые сообщения первыми", SortBackwards], ["HideSimilar", true, "скрывать «Похожие темы»", HideSimilar] ]; var milen = GMitems.length; var i, defvar = new Object(); for(i = 0; i < milen; i++) defvar[GMitems[i][0]] = GMitems[i][1]; Glob = LoadObject("GlobalLORoptions", defvar); if(TEST)for(i = 0; i < milen; i++) tlog("GL["+GMitems[i][0]+"] = "+Glob[GMitems[i][0]]); if(location.href == getProfile()){tlog("Load global menu"); UserGlobMenu();} for(i = 0; i < milen; i++) if(Glob[GMitems[i][0]])GMitems[i][3](); function getProfile(){ // check whether this is "black" or "tango" → get URL of user's profile var hd = document.getElementsByClassName("head"); if(hd.length > 0){ var ankor = hd[0].getElementsByTagName("a"); if(ankor.length > 1) return ankor[1].href; // black } // no? maybe tango ??? var grt = $("loginGreating"); if(typeof(grt) != "undefined"){ var ankor = grt.getElementsByTagName("a"); if(ankor.length > 0) return ankor[0].href; // tango } unsafeWindow.console.log("Incorrect style or document"); return ""; } function UserGlobMenu(){ function onkey(evt){ noDef(evt); if(evt.keyCode != 27) return; menuShowHide(); } var oldkeyd; function menuShowHide(){ var M = $('UserSettingsButton').nextSibling; if(M.style.display != "block"){ M.style.display = "block"; oldkeyd = document.body.onkeydown; document.body.onkeydown = onkey; return; }else{ document.body.onkeydown = oldkeyd; M.style.display = "none"; var boxes = M.getElementsByTagName("input"); for(var b in boxes){ var B = boxes[b]; if(B.type != "checkbox") continue; Glob[B.id] = B.checked; } SaveObject(Glob, "GlobalLORoptions"); } } function SaveMenu(evt){ noDef(evt); menuShowHide(); return; } function genMenuBoxes(parent){ // generate menu for(var i = 0; i < milen; i++){ var str = document.createElement('div'); str.className = "SortTrackMenuItem"; var inp = document.createElement('input'); inp.type = "checkbox"; inp.id = GMitems[i][0]; inp.checked = Glob[GMitems[i][0]]; str.appendChild(inp); var txt = document.createTextNode(GMitems[i][2]); str.appendChild(txt); parent.appendChild(str); } } var ul, found = false, h2 = document.getElementsByTagName("h2"); for(var el in h2) if(h2[el].innerHTML == "Действия"){ found = true; ul = h2[el].nextElementSibling; break; } if(!found) return; var msi = document.createElement('li'); var mitem = document.createElement('a'); mitem.href = "'#'"; mitem.innerHTML = "Настройки пользовательского скрипта"; mitem.id = "UserSettingsButton"; mitem.onclick = SaveMenu; msi.appendChild(mitem); var Smenu = document.createElement('div'); Smenu.className = "UserSettingsMenu"; Smenu.style.display = "none"; genMenuBoxes(Smenu); msi.appendChild(Smenu); ul.appendChild(msi); } } tlog("BEFORE"); GlobSettings(); tlog("AFTER"); /* * Expand/collapse large (more than 6 lines) code blocks */ function expandCollapseCODE(){ tlog("expandCollapseCODE()"); var Code_blocks = document.getElementsByTagName("code"); function codeshowhihide(E){ if(E.style.maxHeight == "100px"){ E.style.maxHeight = ""; E.title = "Click to collapse"; }else{ E.style.maxHeight = "100px"; E.title = "Click to expand"; } } function ShowBlk(e){ var E = e.target; if(E.tagName != "PRE") E = E.parentNode; codeshowhihide(E); } for(var i in Code_blocks){ var tN = Code_blocks[i].tagName; if(tN != "CODE") continue; var lines = Code_blocks[i].textContent.split("\n"); if(lines.length < 6) continue; var P = Code_blocks[i].parentNode; codeshowhihide(P); P.style.overflowY = "auto"; P.onclick = ShowBlk; } } /* * sort tracker */ function addSortMenu(){ tlog("addSortMenu()"); var CurURL = getURL(true); // don't sort sorted tracker tlog("URL: "+CurURL); if(CurURL.indexOf("www.linux.org.ru/tracker") == -1) return; const maxElems = 50; // maximum amount of records in tracker var WasSorted = false; // whether tracker was sorted? var menuitems = ["general", "desktop", "admin", "linux-install", "development", "linux-org-ru", "security", "linux-hardware", "talks", "science", "job", "games", "web-development", "lor-source", "mobile", "multimedia", "midnight"]; var milen = menuitems.length; var ichkd = LoadObject("FilterTracker"); if(!ichkd) ichkd = new Array(); var ichkdlen = ichkd.length; var TotalElements = 0; function onkey(evt){ // Sort tracker by ESC noDef(evt); if(evt.keyCode != 27) return; menuShowHide(); } function getCheckedItems(){ // save checked menu items in local storage ichkd = []; for(var i = 0; i < milen; i++) if($('MB'+i).checked) ichkd.push(i); ichkdlen = ichkd.length; SaveObject(ichkd, "FilterTracker"); } function checkHref(a, tbl){ // check if topic is selected var H = a.href; var addEl = (typeof(tbl) != "undefined"); // whether add needed or remove unneeded if(H.charAt(H.length - 1) == "/") // cut forum name H = H.slice(0,-1); var slashpos = H.lastIndexOf("/"); H = H.slice(slashpos+1); var found = false; for(var i = 0; i < ichkdlen; i++) if(H == menuitems[ichkd[i]]){ found = true; break; } if(!found){ if(!addEl) rmElement(a.parentNode.parentNode); }else{ TotalElements++; if(addEl) tbl.appendChild(a.parentNode.parentNode); } } function genMenuBoxes(parent){ // generate menu var i; for(i = 0; i < milen; i++){ var str = document.createElement('div'); str.className = "SortTrackMenuItem"; var inp = document.createElement('input'); inp.type = "checkbox"; inp.onclick = function(){menuwaschanged = true;}; inp.id = "MB"+i; str.appendChild(inp); var txt = document.createTextNode(menuitems[i]); str.appendChild(txt); parent.appendChild(str); } } /* * Добавить в Stylish для ЛОРа [ОБЯЗАТЕЛЬНО!]: .SortTrackMenu{position: absolute; margin: auto; background: none repeat scroll 0 0 #0000ff !important; text-align: left;} .SortTrackMenuItem{left: 0px; margin: 1px; background-color: #c0c0c0 !important; color: black;} */ function appendMenu(genmenu){ // add menu //var menu = document.getElementsByClassName('nav-buttons')[0]; var menu = document.getElementsByTagName('nav')[0]; //var C = menu.firstElementChild; //var unneed = C.firstElementChild; var unneed = menu.firstElementChild; var msi = document.createElement('span'); var mitem = document.createElement('a'); mitem.href = "'#'"; mitem.innerHTML = "Фильтрация"; mitem.id = "SortTrackerButton"; //if(unneed.getElementsByClassName("current").length)mitem.className = "current"; mitem.className = "btn btn-default"; if(genmenu) mitem.onclick = SortTracker; msi.appendChild(mitem); if(genmenu){ var Smenu = document.createElement('div'); Smenu.className = "SortTrackMenu"; Smenu.style.display = "none"; genMenuBoxes(Smenu); msi.appendChild(Smenu); }else mitem.href = "/tracker"; //C.insertBefore(msi, C.firstChild); menu.insertBefore(msi, unneed); rmElement(unneed); for(i = 0; i < ichkdlen; i++) $("MB"+ichkd[i]).checked = "true"; } if(CurURL != "www.linux.org.ru/tracker"){ appendMenu(false); return; } appendMenu(true); // create iframe var innerFrame = document.createElement('iframe'); innerFrame.id = "innerFrame"; innerFrame.width = 0; innerFrame.height = 0; innerFrame.style.display = "none"; document.body.appendChild(innerFrame); innerFrame.onload = iframeIsLoaded; innerFrame.src = "/tracker/?offset=50"; function collectHrefs(doc, tbl){ // add more topics from iframe function chkA(A){ if(typeof(A) != "undefined" && typeof(A.href) != "undefined" && A.parentNode.nodeName == "TD") checkHref(A, tbl); } var i, hrefs = doc.getElementsByClassName("secondary"); if(typeof(tbl) == "undefined") for(i = hrefs.length-1; i > -1; i--){ if(TotalElements >= maxElems) return; chkA(hrefs[i]); } else for(i in hrefs){ if(TotalElements >= maxElems) return; chkA(hrefs[i]); } } var Wto; function AddMoreItems(){ // find table with topics & try to add to it more items clearTimeout(Wto); if(!iframeLoaded){ if(nTries > 10){ IFRMerror(); return; } nTries++; Wto = setTimeout(AddMoreItems, 300); return; } mTbl = document.getElementsByClassName("message-table")[0]; if(typeof(mTbl) == "undefined") return; var chlds = mTbl.childNodes; for(var n in chlds) if(chlds[n].nodeName == "TBODY"){ mTbl = chlds[n]; break; } var innerDoc = (innerFrame.contentDocument) ? innerFrame.contentDocument : innerFrame.contentWindow.document; var hrefs = innerDoc.getElementsByClassName("secondary"); collectHrefs(innerDoc, mTbl); } function StartSorting(){ // Start filtering of tracker var nav = document.getElementsByClassName("nav"); rmElement(nav[nav.length - 1]); // remove navigation since it won't work WasSorted = true; TotalElements = 0; collectHrefs(document); if(TotalElements < 50){ if(!iframeLoaded){ nTries = 0; Wto = setTimeout(AddMoreItems, 300); } else AddMoreItems(); } } var oldkeyd; var menuwaschanged = false; function menuShowHide(){ // show menu || start filtering var M = $('SortTrackerButton').nextSibling; if(M.style.display != "block"){ menuwaschanged = false; M.style.display = "block"; oldkeyd = document.body.onkeydown; document.body.onkeydown = onkey; return; } if(!menuwaschanged){ document.body.onkeydown = oldkeyd; M.style.display = "none"; return; } getCheckedItems(); location.reload(true); document.location.reload(true); } function SortTracker(evt){ // menu's "onclick" noDef(evt); menuShowHide(); return false; } if(ichkdlen) StartSorting(); } /* * Remove glued topics */ var filtered = false; function goodtalks(isAll){ tlog("goodtalks()"); var CurURL = getURL(); if(isAll){ var pos = CurURL.indexOf("/"), count; for(count = 0; pos != -1; count++) pos = CurURL.indexOf("/", pos + 1); if(count != 2) return; // remove attached anywhere }else if(CurURL != "www.linux.org.ru/forum/talks" && !filtered) return; var i, blk = document.getElementsByClassName("infoblock"); for(i = blk.length-1; i > -1; i--){ rmElement(blk[i]); } blk = document.getElementsByTagName("td"); // remove attached for(i = blk.length-1; i > -1; i--){ for (var c in blk[i].children){ var C = blk[i].children[c]; if(C.nodeName == "IMG" && C.title == "Прикреплено"){ rmElement(blk[i].parentNode); break; } } } filtered = true; } function rmAttInAll(){ goodtalks(true); } function rmAttInTalks(){ goodtalks(false); } /* * button "knock-knock!" */ var knockHref = "", badHref = ""; function knock_knock(e){ tlog("knock-knock!"); noDef(e); var T = e.target; rmElement($("RePoRtFoRm")); rmElement($("cnockFrame")); if(knockHref == ""){ var iF = document.createElement('iframe'); iF.id = "innerFrame"; iF.width = 0; iF.height = 0; iF.style.display = "none"; document.body.appendChild(iF); iF.onload = iframeIsLoaded; iF.src = "/forum/linux-org-ru/"; var Wto = setTimeout(LORready, 300); return false; }else MKmalyava(); function LORready(){ clearTimeout(Wto); if(!iframeLoaded){ if(nTries > 10){ rmElement($("innerFrame")); IFRMerror(); return; } nTries++; Wto = setTimeout(LORready, 300); return; }; var iF = $("innerFrame"); var D = (iF.contentDocument) ? iF.contentDocument : iF.contentWindow.document; var i, blk = D.getElementsByTagName("td"); for(i in blk){ for (var c in blk[i].children){ var C = blk[i].children[c]; if(C.nodeName == "I"){ var A = C.nextElementSibling; if(A.nodeName == "I") // пропускаем знак "Решето" A = A.nextElementSibling; tlog(A.innerHTML); if(A.innerHTML.indexOf("Ссылки на некорректные сообщения") > -1){ var hr = A.href.replace(/.*\//,""); knockHref = "/comment-message.jsp?topic=" + hr.replace(/\?.*/, ""); i = blk.length + 1; } break; } } } rmElement(iF); if(knockHref != "") MKmalyava(); } var pMsg; function MKmalyava(){ var i, href = ""; pMsg = T; while(pMsg.className != "msg") pMsg = pMsg.parentElement; href = getMsgURL(pMsg); if(href == ""){ alert("Упс. Ссылка потерялась!"); return;} badHref = href; var iF = document.createElement('iframe'); iF.id = "cnockFrame"; iF.width = 0; iF.height = 0; iF.style.display = "none"; document.body.appendChild(iF); iF.onload = fillFrame; iF.src = knockHref; } function fillFrame(){ var iF = $("cnockFrame"); var D = (iF.contentDocument) ? iF.contentDocument : iF.contentWindow.document; var msg, form = D.getElementById("commentForm"); if(typeof(form) == "undefined" || form == null){ alert("Ошибка загрузки формы"); rmElement(iF); return; } var F = document.createElement('div'); F.style.border = "2px dotted"; F.style.padding = "5px"; F.id = "RePoRtFoRm"; //F.innerHTML = form.outerHTML; F.innerHTML = "<textarea id=\"RepMsg\" required=\"\" cols=\"100\" rows=\"5\"></textarea>"+ "<br><br><button id=\"putMSG\">Поместить</button> "+ "<button id=\"cnslMSG\">Отмена</button>"; insertAfter(F, pMsg); $("putMSG").onclick = sbmForm; $("cnslMSG").onclick = rmForm; msg = $("RepMsg"); msg.value = "Некорректное сообщение:\n\n" + badHref; msg.focus(); } function rmForm(){rmElement($("RePoRtFoRm")); rmElement($("cnockFrame"));} function sbmForm(){ var iF = $("cnockFrame"); iF.onload = delFrm; var D = (iF.contentDocument) ? iF.contentDocument : iF.contentWindow.document; var form = D.getElementById("commentForm"); var msg = D.getElementById("msg"); var ori = $("RepMsg"); msg.value = ori.value; rmElement($("RePoRtFoRm")); form.submit(); } function delFrm(){rmElement($("cnockFrame")); alert("Жалоба принята");} return false; } /* * Spoiler-like show/hide tags in profile */ function mkSpoiler(){ tlog("mkSpoiler()"); function SwitchVis(e){ var F = e.target; if(F.nodeName == "LEGEND") F = F.parentNode; if(F.nodeName != "FIELDSET") return; noDef(e); for (var c in F.children) { var C = F.children[c]; if(C.nodeName != "LEGEND" && C.nodeType == 1) C.style.display = (C.style.display == "none") ? "block" : "none"; } } var fields = document.getElementsByTagName("fieldset"); var L = fields.length; for(var i = 0; i < L; i++){ var F = fields[i]; var invis = 0; for (var c in F.children) { var C = F.children[c]; if(C.nodeName == "LEGEND" && C.innerHTML.indexOf("теги") > -1){ invis = 1; F.onclick = SwitchVis; C.onclick = SwitchVis;; }else{ str = "invis = " + invis + " text = " + C.innerHTML + " type=" + C.nodeType; if(invis && C.nodeType == 1){ C.style.display = "none"; } } } } } /* * Remove idiot symbols of quasy-eye and so on */ function idioticSymbolsRemove(){ tlog("idioticSymbolsRemove()"); // original of next functions was snatched from LOR code, don't beat me for it!s if(!$("memories_count") || !$("favs_count")) return; var memcntr = Number($("memories_count").innerHTML); var favcntr = Number($("favs_count").innerHTML); function memories_add(event, id, w) { event.preventDefault(); var target = $(id); var evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, true); target.dispatchEvent(evt); memories_form_setup(w,0); } function memories_remove(event, id, w){ event.preventDefault(); var target = $(id); var evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, true); target.dispatchEvent(evt); memories_form_setup(w,0); } function memories_form_setup(watch, clear) { var el, Id, ParentId, text; var memcntr = Number($("memories_count").innerHTML); var favcntr = Number($("favs_count").innerHTML); if (watch){ Id = 'memories0_button'; ParentId = 'memories_button'; }else{ Id = 'favs0_button'; ParentId = 'favs_button'; } el = $(Id); if(typeof(clear) != "undefined"){ text = "Подождите, пожалуйста"; }else{ parCls = $(ParentId).className; if (parCls=="") { text = watch?"Отслеживать ("+memcntr+")":"В избранное ("+favcntr+")"; el.onclick = function(evt){ memories_add(evt, ParentId,watch);}; } else { text = watch?"Не отслеживать ("+memcntr+")":"Удалить из избранного ("+favcntr+")"; el.onclick = function(evt){ memories_remove(evt, ParentId,watch);}; } } el.title = text; el.innerHTML = text; } var NonShown = document.getElementsByClassName("fav-buttons"); for(var i=0,j=NonShown.length; i<j; i++) NonShown[i].style.display = "none"; var TM = $("topicMenu"); if(!TM) return; // edit topic var favs = document.createElement("li"); var mems = document.createElement("li"); favs.innerHTML = "<a id='favs0_button' href='#'></a>"; mems.innerHTML = "<a id='memories0_button' href='#'></a>"; TM.appendChild(favs); TM.appendChild(mems); var Itimeout = window.setInterval(initForms, 300); function initForms(){ clearInterval(Itimeout); memories_form_setup(false); memories_form_setup(true); Itimeout = window.setInterval(initForms, 3000); } var shit = document.getElementsByClassName("icon-tag"); if(shit.length > 0) for(var i = shit.length - 1; i > -1; i--) rmElement(shit[i]); } /* * Format datetime */ function ShowSecondsInDate(){ tlog("ShowSecondsInDate()"); var Tt = document.getElementsByTagName("time"); for(var T in Tt){ var A = Tt[T].attributes; if(!A || !A.datetime) continue; var aDate = new Date(A.datetime.value); Tt[T].innerHTML = aDate.toLocaleDateString() + " " + aDate.toLocaleTimeString(); } } function SortBackwards(){ var comments = document.getElementsByClassName("msg"); var nav = $("comments"); var L = comments.length; for(var l = L - 1; l > 0; l--) nav.appendChild(comments[l]); } function HideSimilar(){ rmElement($("related-topics")); } /* * Script originally written by moscwich */ function AddUserPanel(){ tlog("AddUserPanel()"); function removeElements () { tlog("remove "+arguments.length+" elements"); for (i = arguments.length-1; i > -1; i--) { var p = arguments[i].parentNode; if (p) p.removeChild (arguments[i]); } } function set (p, z) { for (i = 0; i < arguments.length && (arguments[i] === undefined); i++) {} return arguments[i]; } i = j = undefined; a = b = undefined; form = document.getElementById ("commentForm") || document.getElementById ("messageForm") || document.getElementById ("changeForm").getElementsByTagName ("label")[7]; msg = document.getElementById ("msg") || document.getElementById ("form_msg") || document.getElementById ("info"); var u = window.location.href; // Panel var panel = document.createElement ("div"); panel.id = 'atag'; panel.createBlock = function () { block = document.createElement ("span"); for (i = 0; i < arguments.length; i++) { link = document.createElement ("a"); link.textContent = arguments[i][0]; link.title = arguments[i][1]; link.exec = arguments[i][2]; link.onclick = function(e){ noDef(e) eval(this.exec); return false; } block.appendChild (link); } return this.appendChild (block); } panel.createBlock ( ["[b]", "Полужирный", 'intag ("b");'] ,["[i]", "Курсив", 'intag ("i");'] ,["[s]", "Зачеркнутый", 'intag ("s");'] /* ,["[u]", "Подчеркнутый", 'intag ("u");']*/ ); panel.createBlock ( ["[quote]", "Цитата", 'intag ("quote", "\\n");'] ,["[latex]", "Формула латех", 'intag ("latex");'] ,["[code]", "Код", 'intag ("code", "\\n");'] ,["[inline]", "Внутристрочный код", 'intag ("inline");'] ); panel.createBlock ( ["[url]", "URL", 'url ();'] ,["[user]", "Участник", 'intag ("user");'] ); panel.createBlock ( ["[list]", "Список", 'lst();'] ,["[*]", "Элемент списка", 'wrtSel ("[*]", "");'] ); panel.createBlock ( ["«»", "Кавычки", 'wrtSel ("«", "»");'], ["„“", "Кавычки", 'wrtSel ("„", "“");'], ["[br]", "Перевод строки", 'wrtSel ("[br]", "");'] ); panel.createBlock ( [" fix ", "Превратить знаки и обозначения в соответствующие спец. символы", 'fix();'] /*,[" deltags-in ", "Удалить крайнее входящие обрамление тегами", 'deltagsin ();']*/ ,[" brs ", "Добавить [br] к переводам строк", 'brs ();'] ); msg.parentNode.insertBefore (panel, msg); msg.cols = 100; msg.rows = 20; // Styles obj = document.createElement ("style"); obj.innerHTML = '#atag a {\ padding:2px 3px; margin:2px; cursor: pointer;\ text-decoration: none; color: #FFF !important;\ background-color:#004; border: #888 outset 1px;\ }\ #atag a:hover {background-color:#008; border-color:#888;}\ #atag {\ margin-top: 5px; margin-bottom: 5px;\ padding: 3px 1px; font-size: 0.9em;\ }\ #atag > span {margin-right: 4px;}\ label[for="msg"] {display: inline-block; margin-top: 5px;}\ #msg {width: 50em !important;}\ label[for="title"], label[for="form_mode"] {display: inline-block; margin: 5px 0 3px 0;\ .msg_body p {margin: 0.3em 0 !important;}\ .quote > p {margin: 0.5em 0 0.3em 0 !important;}'; document.getElementsByTagName ("head")[0].appendChild (obj); // Add quote links function cre_links(o, L){ var S = document.createElement("span"); tlog("LEN: " + L.length + " obj: " + o); var Ll = L.length; for (j = 0; j < Ll; j++){ qlink = document.createElement ("a"); qlink.textContent = L[j][0]; d = document.createElement("span"); if(L[j][0] == "#"){ qlink.href = getMsgURL(o); }else{ qlink.href = "#"; } d.onclick = L[j][1]; d.innerHTML = "[" + qlink.outerHTML + "] "; S.appendChild(d) } if(o.firstElementChild && o.firstElementChild.nodeName != "IMG"){ clink = o.firstChild; o.insertBefore(S, clink); }else o.appendChild(S); } var t = document.getElementsByClassName("title"); t.createQlink = function(){ for (i = 0; i < this.length; i++){ if(this[i].parentNode.nodeName != "ARTICLE") continue; var A = Array.prototype.slice.call(arguments) cre_links(this[i], A); } } t.createQlink(['#', insurl], ['пожаловаться', knock_knock], ['юзер', user], ['блок-цитата', qb], ['цитата', q] ); t = document.getElementsByTagName("header")[0]; cre_links(t, [['#', insurl], ['пожаловаться', knock_knock], ['юзер', user], ['блок-цитата', qb], ['цитата', q]] ); // Add \n to <br> var mbs = document.getElementsByClassName("msg_body"); for (j in mbs) if (!isNaN (j)) { var mps = mbs[j].getElementsByTagName ("p"); for (i in mps) if (!isNaN (i)) mps[i].innerHTML = mps[i].innerHTML.replace (/<br\/?>(?![\n\r])/g, "<br>\n"); } /* Main */ // Auxiliary functions function wrtSel(subj, offset, before, after, zset){ //Also msg.wrtSel (before, after, offset) tlog("MSGWRT!!!"); if(typeof offset == "string") var after = offset, offset = before, before = subj, subj = undefined; var before = before || "", after = after || "", offset = set (offset, before.length), zset = zset || 0; var startSel = set (a, msg.selectionStart), endSel = set (b, msg.selectionEnd), subj = before + set (subj, msg.value.substring (startSel, endSel)) + after; msg.value = msg.value.substring (0, startSel) + subj + msg.value.substring (endSel); msg.selectionStart = msg.selectionEnd = startSel+offset; msg.focus(); a = b = undefined; } function lst(){ a = msg.selectionStart; b = msg.selectionEnd; z = msg.value.substring(a, b).replace(/([^\n\r]+)[\n\r]*/g, "[*]$1\n"); z = z.replace(/^[\s\r\n]+/g, '').replace(/^$/g,''); if(z.length == 0) z = "[*]\n"; wrtSel(z, 6, "\n[list]\n", "[/list]\n"); } function addbr (c) { return c.replace (/^((?:(?!\[\/?(?:quote|code|list|br)(?:=.*)?\]$)[^\n\r])+)(\r?\n)(?!\n|\[\/?(?:br|quote(?:=.*)?|code(?:=.*)?)\])/gm, "$1[br]$2"); } function getTextContent (post) { var text = ""; var pTags = post.getElementsByClassName ("msg_body")[0].getElementsByTagName ("p"); for (i = 0; i < pTags.length; i++) if (pTags[i].parentNode.className.indexOf ('msg_body') > -1) { text += pTags[i].textContent; if (i != pTags.length - 1) text += "\n\n"; } return text; } function getUserName(evt){ var post = getMsg(evt.target); if (i = post.getElementsByClassName("sign")[0].getElementsByTagName("a")[0]) return i.innerHTML; else return "anonymous"; } // Functions to run function intag (tag, arg) { var arg = arg || ""; wrtSel( undefined, tag.length + 2 + arg.length*2, arg + "[" + tag + "]" + arg, arg + "[/" + tag + "]" + arg ); } // reparce quotations if checked in glob settings function reparceinline(text){ var bef = text.split("[inline]"); bef[0] = bef[0].replace(/"/g, """); var N = bef.length; for(var m = 1; m < N; m++){ var aft = bef[m].split("[/inline]"); aft[1] = aft[1].replace(/"/g, """); bef[m] = aft.join("[/inline]"); } text = bef.join("[inline]"); return text; } function reparce(text){ var bef = text.split("[code]"); //bef[0] = bef[0].replace(/"/g, """); bef[0] = reparceinline(bef[0]); var N = bef.length; for(var m = 1; m < N; m++){ var aft = bef[m].split("[/code]"); //aft[1] = aft[1].replace(/"/g, """); aft[1] = reparceinline(aft[1]); bef[m] = aft.join("[/code]"); } text = bef.join("[code]"); return text; } tlog("rep: "+Glob["reparceQuots"]); if(Glob["reparceQuots"]){form.onsubmit = function(){msg.value = reparce(msg.value);}} function fix () { var a = msg.selectionStart, b = msg.selectionEnd; var repc = function (c) { c = c.replace (/\(c\)/gi, "©"); c = c.replace (/\([rр]\)/gi, "®"); c = c.replace (/\(f\)/gi, "£"); c = c.replace (/\(e\)/gi, "€"); c = c.replace (/%\/10/g, "‰"); c = c.replace (/%\/100/g, "‱"); c = c.replace (/\(V\)/g, "✓"); c = c.replace (/\(V\+\)/g, "✔"); c = c.replace (/\(x\)/g, "✗"); c = c.replace (/\(x\+\)/g, "✘"); c = c.replace (/`/g, "́"); c = c.replace (/\(p\)/gi, "§"); c = c.replace (/(^| )- /g, "$1— "); c = c.replace (/\.\.\./g, "…"); c = c.replace (/\(\*\+?\)/g, "★"); c = c.replace (/\(\*-\)/g, "☆"); c = c.replace (/\([tт][mм]\)/gi, "™"); c = c.replace (/-->/g, "→"); return c; } if (a != b) { var c = msg.value.substring (a, b); var z = repc (c); wrtSel(z, 0, "", "", z.length - c.length); } else msg.value = repc (msg.value); } function url(U){ var U = U || ""; a = msg.selectionStart; b = msg.selectionEnd; z = msg.value.substring (a, b); if(U != ""){ wrtSel (z, 6+U.length, "[url=" + U + "]", "[/url]", -z.length ); } else if (/((ftp|http|https):\/\/)[\.\w- ]{2,}\.[A-Za-z]{2,4}(\/?$|\/.*)/.test(z) || z.length == 0) { wrtSel (z, z.length+6, "[url=", "][/url]" ); } else if (/[\.\w- ]{2,}\.[A-Za-z]{2,4}(\/?$|\/.*)/.test(z)) { wrtSel ( "http://"+z, z.length+13, "[url=", "][/url]", 7 ); } else { wrtSel (z, 5, "[url=]", "[/url]", -z.length ); } } function deltagsin () { z = msg.value.substring (a = msg.selectionStart, b = msg.selectionEnd); c = z.replace (/\[\w+\](.*)\[\/\w+\]/, "$1"); wrtSel (c, 0, "", "", - z.length + c.length); } function brs () { var a = msg.selectionStart, b = msg.selectionEnd; if (a != b) { var c = msg.value.substring (a, b); var z = addbr (c); wrtSel (z, 0, "", "", z.length - c.length); } else { msg.value = addbr (msg.value); } } function substTags(chN){ if(!chN) return; var LORtagz = [ "b", "i","s","u","url","code","list","br","*","em","strong", "pre", "quote"]; var txt = "", incode = false, latex = false; var Tpre="", Tpost=""; if(chN.className == "sign" || chN.className == "reply") return ""; if(chN.nodeName == "B"){Tpre="[b]"; Tpost="[/b]";} else if(chN.nodeName == "I"){Tpre="[i]"; Tpost="[/i]";} else if(chN.nodeName == "S"){Tpre="[s]"; Tpost="[/s]";} else if(chN.nodeName == "U"){Tpre="[u]"; Tpost="[/u]";} else if(chN.nodeName == "A"){Tpre="[url="+chN.href+"]"; Tpost="[/url]";} else if(chN.nodeName == "CODE"){Tpre="\n[code"+(chN.className ? "="+chN.className:"")+"]\n"; Tpost="[/code]"; incode = true;} else if(chN.nodeName == "UL"){Tpre="\n[list]\n"; Tpost="\n[/list]";} else if(chN.nodeName == "OL"){Tpre="\n[list=\""+chN.type+"\"]\n"; Tpost="\n[/list]";} else if(chN.nodeName == "BR")Tpost="[br]\n"; else if(chN.nodeName == "LI"){Tpre="[*] "; Tpost="\n";} else if(chN.nodeName == "EM"){Tpre="[em]"; Tpost="[/em]";} else if(chN.nodeName == "STRONG"){Tpre="[strong]"; Tpost="[/strong]";} else if(chN.nodeName == "PRE"){Tpre="[pre]\n"; Tpost="[/pre]";} else if(chN.nodeName == "P"){Tpre="\n"; Tpost="\n";} else if(chN.nodeName == "SPAN"){Tpre=""; Tpost="\n";} else if(chN.nodeName == "CITE"){Tpre="[b]"; Tpost="[/b][br]\n";} else if(chN.nodeName == "IMG"){Tpre="[latex]"; Tpost="[/latex]"; latex = true;} //else if(chN.nodeName == ""){Tpre=""; Tpost="";} //else if(chN.className == "quote"){Tpre="[quote]"; Tpost="[/quote]";} else if(chN.nodeName == "BLOCKQUOTE"){Tpre="[quote]"; Tpost="[/quote]";} if(latex) txt = chN.title; else if(incode) txt = chN.textContent; else if(chN.childNodes && chN.childNodes.length) for (var ch in chN.childNodes) txt += substTags(chN.childNodes[ch]); else if(typeof(chN.textContent) != "undefined"){ txt = chN.textContent; //.replace(/\[/g, '[[').replace(/\]/g, ']]'); for(var j in LORtagz){ var Tg = LORtagz[j]; txt = txt.split("["+Tg+"]").join("[["+Tg+"]]"); txt = txt.split("[/"+Tg+"]").join("[[/"+Tg+"]]"); } } txt = Tpre + txt + Tpost; return txt.replace(/^[\s\r\n]+$/, '').replace(/^$/,''); } function qb(e){ noDef(e); var post, seltxt = getSelection (); function f(s,o){ var T = "[quote" + (getMsg(o) != getMsg(msg) ? "=" + getUserName (e) : "") + "]" + substTags(s) + "\n[/quote]\n\n"; return T.replace(/(^[ \t]*\n)/gm, "") } if (seltxt != "") { post = getMsg(seltxt.getRangeAt(0).commonAncestorContainer); wrtSel(i = f(seltxt.getRangeAt (0).cloneContents(),this), i.length); } else { post = getMsg(this); wrtSel (i = f(post.getElementsByClassName ("msg_body")[0], this), i.length); } return false; } function q(e) { noDef(e); var seltxt = getSelection (); console.log(seltxt); if (seltxt != "") { var post = getMsg(seltxt.getRangeAt(0).commonAncestorContainer); wrtSel (i = seltxt.toString ().replace (/(\n\r?|^)(?:\n\r?)?/g, "$1> ") + "\r\n", i.length); } else { post = getMsg(this); wrtSel (i = getTextContent (post).replace (/(\n\r?|^)(?:\n\r?)?/g, "$1> ") + "\r\n", i.length); } return false; } function user (e) { noDef(e); if ((i = getUserName(e)) != "anonymous") wrtSel (i = "[user]" + i + "[/user], ", i.length); else wrtSel (i = "[strong]Аноним[/strong], ", i.length); return false; } function insurl(e){ noDef(e); url(e.target.href); } } // ***************************************************************************** // here - all functions that have no setup in profile /* * Allow to put html tags into user info */ var UInfoArr = document.getElementsByClassName("user-remark"); tlog("L+"+UInfoArr.length ); for(var i = 0, j = UInfoArr.length; i < j; i++){ str = UInfoArr[i].innerHTML; tlog(str); str = str.replace(/</g, "<"); str = str.replace(/>/g, ">"); UInfoArr[i].innerHTML = str; } /* * Convert contents of tag [latex] into image from codecogs */ function showLatex(){ var t = document.getElementsByClassName("msg_body"); function chk(a,str){ if(a) return str; else return ''; } function getInner(str, fstrun){ var a = str.indexOf("[latex]"); if(a == -1) return chk(fstrun, str); var b = str.indexOf("[/latex]", a+7); if (b == -1) return chk(fstrun, str); var head = str.substr(0, a); var tail = str.substr(b+8); var midtext = str.substr(a+7, b-a-7); return head + "<img src=\"http://latex.codecogs.com/svg.latex?"+ midtext+"\""+"title=\""+midtext+"\">"+getInner(tail,1); //return head + "<img src=\"http://texify.com/img/\\LARGE\\!" + //return head + "<img src=\"http://texify.com/img/" + // midtext + ".gif\" " + "title=\""+midtext+"\">"+getInner(tail,1); } t.parceLatex = function(){ var L = this.length; for(i = 0; i < L; i++){ var txt = this[i].innerHTML, newtxt = '', innertext=''; innertext = getInner(txt, 0); if(innertext.length == 0) continue; this[i].innerHTML = innertext; tlog(innertext); } } t.parceLatex(); } showLatex(); }());
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址