Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Soylent Upgrade
- // @version 14.0
- // @grant none
- // @match http://soylentnews.org/*article.pl*
- // @match http://*.soylentnews.org/*article.pl*
- // @match https://soylentnews.org/*article.pl*
- // @match https://*.soylentnews.org/*article.pl*
- // @match http://soylentnews.org/*submit.pl*
- // @match http://*.soylentnews.org/*submit.pl*
- // @match https://soylentnews.org/*submit.pl*
- // @match https://*.soylentnews.org/*submit.pl*
- // @match http://soylentnews.org/*admin.pl*
- // @match http://*.soylentnews.org/*admin.pl*
- // @match https://soylentnews.org/*admin.pl*
- // @match https://*.soylentnews.org/*admin.pl*
- // @match http://soylentnews.org/*comments.pl*
- // @match http://*.soylentnews.org/*comments.pl*
- // @match https://soylentnews.org/*comments.pl*
- // @match https://*.soylentnews.org/*comments.pl*
- // @include /^https?://(.*\.)?soylentnews\.org/.*?journal\.pl.*?/
- // @match http://soylentnews.org/*journal.pl*
- // @match http://*.soylentnews.org/*journal.pl*
- // @match https://soylentnews.org/*journal.pl*
- // @match https://*.soylentnews.org/*journal.pl*
- // @include /^https?://(.*\.)?soylentnews\.org/.*?pollBooth\.pl\?qid=.*/
- // ==/UserScript==
- // Begin User Options:
- var simplifyChars = true; // Change to false if you don't want stylized quotation marks, ellipses, etc. to be replaced
- var stripEmail = false; // Remove auto-filled email from submission
- var doiChecker = true; // Add Crossref search to DOIs in the summary
- var disableCycler = false; // Change to true to disable the button that cycles through *New* comments
- // End User Options
- /* ! http://mths.be/fromcodepoint v0.1.0 by @mathias */
- if (!String.fromCodePoint) { (function() { var defineProperty = (function() { try { var object = {}; var $defineProperty = Object.defineProperty; var result = $defineProperty(object, object, object) && $defineProperty; } catch(error) {} return result; }()); var stringFromCharCode = String.fromCharCode; var floor = Math.floor; var fromCodePoint = function() { var MAX_SIZE = 0x4000; var codeUnits = []; var highSurrogate; var lowSurrogate; var index = -1; var length = arguments.length; if (!length) { return ''; } var result = ''; while (++index < length) { var codePoint = Number(arguments[index]); if ( !isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint ) { throw RangeError('Invalid code point: ' + codePoint); } if (codePoint <= 0xFFFF) { codeUnits.push(codePoint); } else { codePoint -= 0x10000; highSurrogate = (codePoint >> 10) + 0xD800; lowSurrogate = (codePoint % 0x400) + 0xDC00; codeUnits.push(highSurrogate, lowSurrogate); } if (index + 1 == length || codeUnits.length > MAX_SIZE) { result += stringFromCharCode.apply(null, codeUnits); codeUnits.length = 0; } } return result; }; if (defineProperty) { defineProperty(String, 'fromCodePoint', { 'value': fromCodePoint, 'configurable': true, 'writable': true }); } else { String.fromCodePoint = fromCodePoint; } }()); }
- // Add "Quote This" buttons to all initially visible comments
- var spans = document.getElementsByTagName("span");
- for (var x=0; x<spans.length; x++)
- {
- if (spans[x].id.indexOf("reply_link_")==0)
- {
- var button = document.createElement("span");
- button.setAttribute("class","nbutton");
- var p = document.createElement("p");
- var b = document.createElement("b");
- var a = document.createElement("a");
- // Set the href of the "Quote This" button to the href of the "Reply to This" button, with the escaped contents of the post added to URL and any [domain.names] following links in the post cut out:
- a.setAttribute("href",spans[x].getElementsByTagName("a")[0].href.replace("#post_comment","&postercomment="+escape("<blockquote>"+document.getElementById("comment_body_"+spans[x].id.replace("reply_link_","")).innerHTML.replace(/<\/a>\s\[.*?\..*?\]/g,"<\/a>")+"<\/blockquote>\n\n")+"#post_comment"));
- // To Do: Shorten URLs longer than 2000 characters
- a.appendChild(document.createTextNode("Quote This"));
- b.appendChild(a);
- p.appendChild(b);
- button.appendChild(p);
- spans[x].parentNode.insertBefore(button, spans[x].nextSibling);
- spans[x].parentNode.insertBefore(document.createTextNode(" "), spans[x].nextSibling); // Divider
- }
- }
- // DOI checker in the summary
- if (doiChecker && window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/article\.pl/)!=-1)
- {
- var summary = document.getElementById("articles").getElementsByClassName("intro")[0];
- summary.innerHTML = summary.innerHTML.replace(/(\(|\[)DOI: (10[^\s\n<]*)(\)|\])/gi,"$1DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
- summary.innerHTML = summary.innerHTML.replace(/(\(|\[)open, DOI: (10[^\s\n<]*)(\)|\])/gi,"$1open, DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
- if (document.getElementById("articles").getElementsByClassName("full").length > 0)
- {
- var summary2 = document.getElementById("articles").getElementsByClassName("full")[0];
- summary2.innerHTML = summary2.innerHTML.replace(/(\(|\[)DOI: (10[^\s\n<]*)(\)|\])/gi,"$1DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
- summary2.innerHTML = summary2.innerHTML.replace(/(\(|\[)open, DOI: (10[^\s\n<]*)(\)|\])/gi,"$1open, DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
- }
- }
- // Empty email input area, but only on submission page
- if (stripEmail && window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/submit\.pl/)!=-1)
- {
- var boxes = document.getElementsByTagName("input");
- for (var x=0; x<boxes.length; x++)
- {
- if (boxes[x].name == "email")
- {
- boxes[x].value = "";
- }
- }
- }
- // Add title case button next to title/subj field on Story Submissions, Submission Preview, Story Preview, and New Journal
- if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/(submit\.pl|admin\.pl|journal\.pl|journal\.pl\?op=edit)/)!=-1)
- {
- var boxes = document.getElementsByTagName("input");
- for (var x=0; x<boxes.length; x++)
- {
- if (boxes[x].name == "title" || boxes[x].name == "subj" || boxes[x].name == "description")
- {
- boxes[x].id = "storyTitle";
- var button = document.createElement("input");
- button.setAttribute("type","button");
- button.setAttribute("value","Title Case");
- button.setAttribute("title","Convert title to title case.");
- button.setAttribute("onclick","document.getElementById('storyTitle').value=document.getElementById('storyTitle').value.replace(/^\\s/gi,'').replace(/\\b([a-z])/gi,function(m, p1){return p1.toUpperCase();}).replace(/\\b(at|of|is|and|to|in|by|as|its|be|the|on|a|an|but|or|for)\\b/gi,function(m, p1){return p1.toLowerCase();}).replace(/^([a-z])/gi,function(m, p1){return p1.toUpperCase();}).replace(/:\\s([a-z])/gi,function(m, p1){return ': '+p1.toUpperCase();}).replace(/([a-z])['\u2019]([a-z])/gi,function(m, p1, p2){return p1+'\\''+p2.toLowerCase();}).replace(/\\bx(86|64)\\b/gi,'x$1').replace(/\\bIphone/gi,'iPhone').replace(/\\s$/gi,'');");
- boxes[x].parentNode.insertBefore(button, boxes[x].nextSibling);
- if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/admin\.pl/)!=-1 || boxes[x].name == "subj")
- {
- boxes[x].parentNode.insertBefore(document.createElement("br"), boxes[x].nextSibling);
- }
- else
- {
- boxes[x].parentNode.insertBefore(document.createTextNode(" "), boxes[x].nextSibling);
- }
- }
- }
- }
- // Add warning for creating a story in the past
- if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/admin\.pl/)!=-1)
- {
- var boxes = document.getElementsByTagName("input");
- for (var x=0; x<boxes.length; x++)
- {
- if (boxes[x].name == "op" && (boxes[x].value == "save"))
- {
- // New onclick extracts the post date, compares to the current date, and only submits if the post date is in the future or the user overrides the warning:
- boxes[x].setAttribute("onclick","var d = new Date(document.getElementById('slashstoryform').elements['time'].value.replace(/\\s/,'T')); var a = true; if (d < Date.now()){a = confirm('Are you sure you want to post a story '+(Math.round((Date.now()-d)/60000))+' minutes in the past?');} if (a) {st_submit(this);}");
- }
- }
- }
- // Expand all initially hidden spoiler blocks when editing a story
- if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/admin\.pl/)!=-1)
- {
- var boxes = document.getElementsByTagName("input");
- for (var x=0; x<boxes.length; x++)
- {
- if (boxes[x].className == "spoiler")
- {
- boxes[x].checked = true;
- }
- }
- }
- // Add draft capabilties to story submission form
- if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/submit\.pl/)!=-1)
- {
- var boxes = document.getElementsByTagName("textarea");
- for (var x=0; x<boxes.length; x++)
- {
- if (boxes[x].name == "story")
- {
- var p = document.createElement("p");
- // Save Draft button
- var button = document.createElement("input");
- button.setAttribute("type","button");
- button.setAttribute("value","Save Draft");
- button.setAttribute("onclick","saveSoydraft();");
- p.appendChild(button);
- p.appendChild(document.createTextNode(" "));
- // Discard Draft button
- var button = document.createElement("input");
- button.setAttribute("type","button");
- button.setAttribute("id","discardDraft");
- button.setAttribute("value","Discard");
- // Disable the Discard Draft button onload if no draft is available
- if(!localStorage.getItem("soydraft"))
- {
- button.setAttribute("disabled","disabled");
- }
- else
- {
- button.setAttribute("onclick","discardSoydraft();");
- }
- p.appendChild(button);
- p.appendChild(document.createTextNode(" "));
- // Autosave checkbox
- var span = document.createElement("span");
- span.setAttribute("id","autosaveBar");
- // Hide autosave checkbox onload if no draft is available
- if (document.getElementById("storyTitle").value == "" && boxes[x].value == "")
- {
- if(localStorage.getItem("soydraft"))
- {
- span.setAttribute("style","visibility:visible;");
- }
- else
- {
- span.setAttribute("style","visibility:hidden;");
- }
- }
- span.appendChild(document.createTextNode("Autosave?"));
- var checkbox = document.createElement("input");
- checkbox.setAttribute("type","checkbox");
- checkbox.setAttribute("id","autosave");
- checkbox.setAttribute("value","");
- checkbox.setAttribute("onclick","if (this.checked==false){autosaveOff();} else {autosaveOn();}");
- checkbox.setAttribute("style","vertical-align:middle;");
- span.appendChild(checkbox);
- span.appendChild(document.createTextNode(" "));
- p.appendChild(span);
- // "Saved." text will appear and fade out whenever a draft is saved
- var span2 = document.createElement("span");
- span2.setAttribute("id","autosaveState");
- span2.setAttribute("style","opacity:0;");
- span2.appendChild(document.createTextNode("Saved."));
- p.appendChild(span2);
- boxes[x].parentNode.insertBefore(p, boxes[x]);
- // Load draft if it exists, but only if workspace is clear
- if (document.getElementById("storyTitle").value == "" && boxes[x].value == "")
- {
- if(localStorage.getItem("soydraft"))
- {
- document.getElementById("storyTitle").value = decodeURI(JSON.parse(localStorage.getItem("soydraft"))[0]);
- for (var y=0; y<document.getElementsByClassName("fullbox").length; y++)
- {
- if (document.getElementsByClassName("fullbox")[y].name == "dept")
- {
- document.getElementsByClassName("fullbox")[y].value = decodeURI(JSON.parse(localStorage.getItem("soydraft"))[1]);
- break;
- }
- }
- document.getElementById("primaryskid").value = JSON.parse(localStorage.getItem("soydraft"))[2];
- document.getElementById("tid").value = JSON.parse(localStorage.getItem("soydraft"))[3];
- boxes[x].value = decodeURI(JSON.parse(localStorage.getItem("soydraft"))[4]);
- }
- }
- }
- }
- }
- var boxes = document.getElementsByTagName("textarea");
- for (var x=0; x<boxes.length; x++)
- {
- if (boxes[x].name == "introtext" || boxes[x].name == "bodytext" || boxes[x].name == "story")
- {
- var temp = boxes[x].value; // Retrieve textarea contents
- temp = temp.replace(/<\/p><p>/g,"<\/p>\n\n<p>"); // Add newlines between paragraphs
- temp = temp.replace(/<br>\s?<br>/g,"<\/p>\n\n<p>"); // Convert double break tags to paragraph tags
- temp = temp.replace(/<\/blockquote><p>/g,"<\/blockquote>\n\n<p>"); // Add newlines after blockquotes
- temp = temp.replace(/<\/p><blockquote>/g,"<\/p>\n\n<blockquote>"); // Add newlines before blockquotes
- temp = temp.replace(/<blockquote><div><p>/g,"<blockquote><div>\n\n<p>"); // Add newlines within start of blockquotes
- temp = temp.replace(/<\/p><\/div><\/blockquote>/g,"<\/p>\n\n<\/div><\/blockquote>"); // Add newlines within end of blockquotes
- temp = temp.replace(/<\/blockquote><blockquote>/g,"<\/blockquote>\n\n<blockquote>"); // Add newlines between two blockquotes
- temp = temp.replace(/<p class="byline">\s/i,"<p class=\"byline\">"); // Remove extra space from byline
- temp = temp.replace(/<p>\s/g,"<p>"); // Remove extra space from start of paragraph
- temp = temp.replace(/\s<\/p>/g,"<\/p>"); // Remove extra space from end of paragraph
- temp = temp.replace(/<\/li><li>/g,"<\/li>\n<li>"); // Add newlines between list items
- temp = temp.replace(/(<\/li>)(<\/[u|o]l>)/g,'$1\n$2'); // Add newline after last list item
- temp = temp.replace(/(<\/p>)(<[u|o]l>)/g,'$1\n$2'); // Add newlines before lists
- temp = temp.replace(/<p>\[...\]/g,"<p>[...] "); // Add space within beginning of foreshortened paragraph
- while (temp.indexOf(" ")!=-1)
- {
- temp = temp.replace(/ /g," "); // Replace double spaces with single spaces
- }
- if (simplifyChars)
- {
- temp = temp.replace(/\u2018/g,"'"); // 'LEFT SINGLE QUOTATION MARK' (U+2018) to (U+0027)
- temp = temp.replace(/\u2019/g,"'"); // 'RIGHT SINGLE QUOTATION MARK' (U+2019) to (U+0027)
- temp = temp.replace(/\u201C/g,"\""); // 'LEFT DOUBLE QUOTATION MARK' (U+201C) to (U+0022)
- temp = temp.replace(/\u201D/g,"\""); // 'RIGHT DOUBLE QUOTATION MARK' (U+201D) to (U+0022)
- temp = temp.replace(/\u2026/g,"..."); // 'HORIZONTAL ELLIPSIS' (U+2026) to (U+002E) x3
- }
- boxes[x].value = temp;
- boxes[x].rows = 32; // Expand textarea height to 32 rows
- }
- var toolbar = document.createElement("div");
- // Blockquote button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","Blockquote");
- tempbutton.setAttribute("title","Wrap \u003Cblockquote\u003E tags around the selected text.");
- tempbutton.setAttribute("onclick","addBlockquote(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Paragraph and Line break buttons
- var tempspan = document.createElement("span");
- tempspan.setAttribute("id","htmlFormatButtons");
- if (document.getElementById("posttype") && document.getElementById("posttype").selectedIndex == 0)
- {
- tempspan.setAttribute("style","display:none;"); // Hide if initial post type option is "Plain Old Text"
- }
- if (document.getElementById("posttype"))
- {
- document.getElementById("posttype").addEventListener("change", function() {if (document.getElementById('posttype').selectedIndex == 0) {document.getElementById('htmlFormatButtons').style.display = 'none'} else {document.getElementById('htmlFormatButtons').style.display = 'inline'}}); // Change visibility of these buttons based on value of post type
- }
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","P");
- tempbutton.setAttribute("title","Wrap \u003Cp\u003E tags around the selected text.");
- tempbutton.setAttribute("onclick","addPara(document.getElementsByTagName('textarea')["+x+"]);");
- tempspan.appendChild(tempbutton);
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","BR");
- tempbutton.setAttribute("title","Insert a line break.");
- tempbutton.setAttribute("onclick","addBreak(document.getElementsByTagName('textarea')["+x+"]);");
- tempspan.appendChild(tempbutton);
- toolbar.appendChild(tempspan);
- // HR button, if editing a story
- if (boxes[x].name == "introtext" || boxes[x].name == "bodytext" || boxes[x].name == "story")
- {
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","HR");
- tempbutton.setAttribute("title","Insert a horizontal rule.");
- tempbutton.setAttribute("style","text-decoration:underline overline;");
- tempbutton.setAttribute("onclick","addHRule(document.getElementsByTagName('textarea')["+x+"]);");
- tempspan.appendChild(tempbutton);
- toolbar.appendChild(tempspan);
- }
- // URL button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","URL");
- tempbutton.setAttribute("title","Create a hyperlink around the selected text.");
- tempbutton.setAttribute("style","text-decoration:underline;");
- tempbutton.setAttribute("onclick","addHyperlink(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- toolbar.appendChild(document.createTextNode(" "));
- // Bold button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","B");
- tempbutton.setAttribute("title","Bold");
- tempbutton.setAttribute("style","font-weight:bold;");
- tempbutton.setAttribute("onclick","addBold(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Italic button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","I");
- tempbutton.setAttribute("title","Italic");
- tempbutton.setAttribute("style","font-style:italic;");
- tempbutton.setAttribute("onclick","addItalic(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Strike button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","S");
- tempbutton.setAttribute("title","Strikethrough");
- tempbutton.setAttribute("style","text-decoration:line-through;");
- tempbutton.setAttribute("onclick","addStrike(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- toolbar.appendChild(document.createTextNode(" ")); // Divider
- // Code button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","Code");
- tempbutton.setAttribute("title","Wrap \u003Cecode\u003E tags around the selected text.");
- tempbutton.setAttribute("style","font-family:monospace;");
- tempbutton.setAttribute("onclick","addEcode(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Teletype button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","TT");
- tempbutton.setAttribute("title","Wrap \u003Ctt\u003E (teletype, i.e. monospace) tags around the selected text.");
- tempbutton.setAttribute("style","font-family:monospace;");
- tempbutton.setAttribute("onclick","addTT(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Spoiler button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","\u25A0\u25A0\u25A0");
- tempbutton.setAttribute("title","Wrap \u003Cspoiler\u003E tags around the selected text.");
- //tempbutton.setAttribute("style","font-family:monospace;");
- tempbutton.setAttribute("onclick","addSpoiler(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Small button, if editing a story
- if (boxes[x].name == "introtext" || boxes[x].name == "bodytext" || boxes[x].name == "story")
- {
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","\u0073\u1D0D\u1D00\u029F\u029F");
- tempbutton.setAttribute("title","Wrap \u003Csmall\u003E tags around the selected text.");
- // tempbutton.setAttribute("style","font-size:75%;");
- tempbutton.setAttribute("onclick","addSmall(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- }
- toolbar.appendChild(document.createTextNode(" ")); // Divider
- // Superscript button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","x\u00B2");
- tempbutton.setAttribute("title","Superscript");
- tempbutton.setAttribute("style","font-family:monospace;");
- tempbutton.setAttribute("onclick","addSuper(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Subscript button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","x\u2082");
- tempbutton.setAttribute("title","Subscript");
- tempbutton.setAttribute("style","font-family:monospace;");
- tempbutton.setAttribute("onclick","addSubsc(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- toolbar.appendChild(document.createTextNode(" ")); // Divider
- // Ordered list button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","1. List");
- tempbutton.setAttribute("title","Insert an ordered list or convert newline-separated text into an ordered list.");
- tempbutton.setAttribute("onclick","addOrdlist(document.getElementsByTagName('textarea')["+x+"],'1');");
- toolbar.appendChild(tempbutton);
- // Ordered list button - Alpha
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","A. List");
- tempbutton.setAttribute("title","Insert an ordered list or convert newline-separated text into an ordered list.");
- tempbutton.setAttribute("onclick","addOrdlist(document.getElementsByTagName('textarea')["+x+"],'A');");
- toolbar.appendChild(tempbutton);
- // Ordered list button - Roman
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","I. List");
- tempbutton.setAttribute("title","Insert an ordered list or convert newline-separated text into an ordered list.");
- tempbutton.setAttribute("onclick","addOrdlist(document.getElementsByTagName('textarea')["+x+"],'I');");
- toolbar.appendChild(tempbutton);
- // Unordered list button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","\u2022 List");
- tempbutton.setAttribute("title","Insert an unordered list or convert newline-separated text into an unordered list.");
- tempbutton.setAttribute("onclick","addUnordlist(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- toolbar.appendChild(document.createElement("br")); // Divider
- toolbar.appendChild(document.createElement("br")); // Divider
- // Create 7 macro buttons
- for (var i=1; i<=7; i++)
- {
- // Create macros if they don't exist
- if(!localStorage.getItem("soymacro"+i))
- {
- localStorage.setItem("soymacro"+i,JSON.stringify(["M"+i,"string","Sample Text"]));
- //localStorage.setItem("soymacro"+i,JSON.stringify(["M"+i,"regexp","/a/gi","b"]));
- }
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("id","soymacros"+x+"button"+i);
- tempbutton.setAttribute("value",JSON.parse(localStorage.getItem("soymacro"+i))[0]);
- if (JSON.parse(localStorage.getItem("soymacro"+i))[1]=="string")
- {
- if (JSON.parse(localStorage.getItem("soymacro"+i))[2].length < 40)
- {
- tempbutton.setAttribute("title","Insert or replace selected text with: " + JSON.parse(localStorage.getItem("soymacro"+i))[2]);
- }
- else
- {
- tempbutton.setAttribute("title","Insert or replace selected text with: " + JSON.parse(localStorage.getItem("soymacro"+i))[2].substring(0,40)+"...");
- }
- tempbutton.setAttribute("onclick","macroChoose(document.getElementsByTagName('textarea')["+x+"],"+i+");");
- }
- else
- {
- tempbutton.setAttribute("title","Replace text matched by the regular expression: " + JSON.parse(localStorage.getItem("soymacro"+i))[2] + " with: " + JSON.parse(localStorage.getItem("soymacro"+i))[3]);
- tempbutton.setAttribute("onclick","macroChoose(document.getElementsByTagName('textarea')["+x+"],"+i+");");
- }
- toolbar.appendChild(tempbutton);
- }
- // Create macros edit button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","Edit");
- tempbutton.setAttribute("title","Configure user macros or discard changes.");
- tempbutton.setAttribute("onclick","if (document.getElementById('macrobar"+x+"').style.display == 'none') {document.getElementById('macrobar"+x+"').style.display = 'block'; macrobarInit("+x+");} else {document.getElementById('macrobar"+x+"').style.display = 'none'; if (p = document.getElementById('postercomment')) { var x = p.offsetTop; while (p = p.offsetParent) {x += p.offsetLeft;} window.scrollTo(0,x-75);}}");
- toolbar.appendChild(tempbutton);
- toolbar.appendChild(document.createElement("br")); // Divider
- // Despace button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value","Despace");
- tempbutton.setAttribute("title","Delete newlines within the selection.");
- tempbutton.setAttribute("onclick","despace(document.getElementsByTagName('textarea')["+x+"]);");
- toolbar.appendChild(tempbutton);
- // Symbol button
- var tempbutton = document.createElement("input");
- tempbutton.setAttribute("type","button");
- tempbutton.setAttribute("value",":-)");
- tempbutton.setAttribute("title","Insert a symbol.");
- tempbutton.setAttribute("onclick","if (document.getElementById('smilebar"+x+"').style.display == 'none') {document.getElementById('smilebar"+x+"').style.display = 'block'} else {document.getElementById('smilebar"+x+"').style.display = 'none'; if (p = document.getElementById('postercomment')) { var x = p.offsetTop; while (p = p.offsetParent) {x += p.offsetLeft;} window.scrollTo(0,x-75); } }");
- toolbar.appendChild(tempbutton);
- boxes[x].parentNode.insertBefore(toolbar, boxes[x].nextSibling);
- // Symbol list
- var smilebar = document.createElement("div");
- smilebar.setAttribute("style","-moz-user-select:none; -webkit-user-select:none; display:none; font-size:16pt; max-height:240px; overflow:auto; padding:0.5em;");
- smilebar.setAttribute("id","smilebar"+x);
- var smiles = ["\u0026amp;","\u0026lt;","\u0026gt;","\u0026nbsp;"];
- var codes = [[161,169],[171,172],[174],[176,177],[180,183],[187,191],[215],[224,255],[402],[629],[632],[916],[920],[931],[934],[937],[945,946],[956],[960],[963],[8211,8213],[8216,8221],[8226],[8230],[8251],[8315],[8331],[8364],[8478],[8482],[8528,8542],[8585],[8592,8652],[8712,8716],[8721],[8730],[8733,8734],[8736],[8743,8749],[8756,8757],[8773],[8776],[8800,8805],[8834,8837],[8984],[9095],[9760],[9762,9765],[9770],[9773,9775],[9784,9794],[9812,9831],[9833,9842],[9850],[9855,9861],[9874,9877],[9882,9885],[9888,9893],[9913],[9940],[9962],[9971],[9981],[9992,10087],[12316],[12336],[21328],[65533],[127744,127756],[127759],[127775,127776],[127797],[127801],[127804,127812],[127817],[127820,127822],[127828,127831],[127838,127839],[127843],[127849],[127855],[127860,127867],[127873,127877],[127884],[127891],[127904,127911],[127918],[127939],[127942],[127977],[128025],[128039],[128074,128078],[128123,128131],[128137,128142],[128148,128150],[128152],[128158],[128161,128165],[128168,128170],[128172],[128175,128177],[128187],[128189,128190],[128193,128194],[128197],[128200,128204],[128206],[128214],[128225,128227],[128231,128233],[128241],[128244],[128246],[128250,128252],[128259],[128266,128270],[128273,128276],[128278,128280],[128286],[128293,128299],[128302,128303],[128509,128565],[128640],[128659],[128681],[128684,128685],[128701]];
- for (var i=0; i<codes.length; i++) { if (codes[i].length > 1) { for (var j=codes[i][0]; j<=codes[i][1]; j++) { smiles[smiles.length] = String.fromCodePoint(j); } } else { smiles[smiles.length] = String.fromCodePoint(codes[i][0]); } } // Populate smiles array with code ranges converted to individual characters
- smiles = smiles.concat(["xD",":-)",":^)","(^_^;)","(\u00A0\u0361\u00B0\u00A0\u035C\u0296\u00A0\u0361\u00B0)","(\u00A0\u0361\u007E\u00A0\u035C\u0296\u00A0\u0361\u00B0)\uFEFF","\u00AF\u005C\u005F(\u30C4)\u005F\u002F\u00AF","(\u256F\u00B0\u25A1\u00B0\uFF09\u256F\uFE35\u00A0\u253B\u2501\u253B","(\u30CE\u0CA0\u76CA\u0CA0)\u30CE\u5F61\u253B\u2501\u253B","(\u0060\uFF65\u03C9\uFF65\u00B4)","\u0CA0_\u0CA0","\u0295\u2022\u1D25\u2022\u0294","(\u3065\uFFE3\u00A0\u00B3\uFFE3)\u3065","\u0669(\u204E\u275B\u1D17\u275B\u204E)\u06F6","\u30FD\u0F3C\u0E88\u0644\u035C\u0E88\u0F3D\uFF89","(\uB208\u2038\uB208)","\u006F(\u3003\uFF3E\u25BD\uFF3E\u3003)\u006F","\u0028\u0028\u30FE\u0028\u2267\u76BF\u2266\uFF1B\u0029\u30CE\uFF3F\u0029\u0029","\u30FD\u0028\u002A\u2312\u2207\u2312\u002A\u0029\uFF89","\u0028\u2267\u2207\u2266\u0029\u002F","\u0028\u0E07\u00A0\u0360\u00B0\u00A0\u035F\u0644\u035C\u00A0\u0361\u00B0\u0029\u0E07"]); // Add in arbitrary emoticons
- // Note: \u00A0 is a non-breaking space character.
- for (var i=0; i<smiles.length; i++)
- {
- var smile = document.createElement("span");
- smile.setAttribute("style","cursor:pointer; padding:2px; white-space:nowrap;");
- smile.setAttribute("onclick","addSmile(document.getElementsByTagName('textarea')["+x+"],'"+smiles[i].replace("\u005C","\u005C\u005C")+"');");
- smile.appendChild(document.createTextNode(smiles[i]));
- smilebar.appendChild(smile);
- if (i<smiles.length) // A space is added after every symbol including the final one
- {
- smilebar.appendChild(document.createTextNode(" "));
- }
- }
- var flags = [];
- flags = flags.concat([[[127462,127467],"Afghanistan"]]); // AF/Afghanistan
- flags = flags.concat([[[127462,127478],"Antarctica"]]); // AQ/Antarctica
- flags = flags.concat([[[127462,127482],"Australia"]]); // AU/Australia
- flags = flags.concat([[[127463,127465],"Bangladesh"]]); // BD/Bangladesh
- flags = flags.concat([[[127463,127479],"Brazil"]]); // BR/Brazil
- flags = flags.concat([[[127464,127462],"Canada"]]); // CA/Canada
- flags = flags.concat([[[127464,127475],"China"]]); // CN/China
- flags = flags.concat([[[127464,127476],"Colombia"]]); // CO/Colombia
- flags = flags.concat([[[127464,127482],"Cuba"]]); // CU/Cuba
- flags = flags.concat([[[127465,127466],"Germany"]]); // DE/Germany
- flags = flags.concat([[[127466,127468],"Egypt"]]); // EG/Egypt
- flags = flags.concat([[[127466,127480],"Spain"]]); // ES/Spain
- flags = flags.concat([[[127988,917605,917619,917603,917620,917631],"Catalonia"]]); // ES-CT/Catalonia
- flags = flags.concat([[[127466,127482],"European Union"]]); // EU/European Union
- flags = flags.concat([[[127467,127479],"France"]]); // FR/France
- flags = flags.concat([[[127468,127463],"United Kingdom"]]); // GB/United Kingdom
- flags = flags.concat([[[127988,917607,917602,917605,917614,917607,917631],"England"]]); // GB-ENG/England
- flags = flags.concat([[[127988,917607,917602,917619,917603,917620,917631],"Scotland"]]); // GB-SCT/Scotland
- flags = flags.concat([[[127988,917607,917602,917623,917612,917619,917631],"Wales"]]); // GB-WLS/Wales
- flags = flags.concat([[[127468,127479],"Greece"]]); // GR/Greece
- flags = flags.concat([[[127469,127472],"Hong Kong"]]); // HK/Hong Kong
- flags = flags.concat([[[127470,127465],"Indonesia"]]); // ID/Indonesia
- flags = flags.concat([[[127470,127466],"Ireland"]]); // IE/Ireland
- flags = flags.concat([[[127470,127473],"Israel"]]); // IL/Israel
- flags = flags.concat([[[127470,127475],"India"]]); // IN/India
- flags = flags.concat([[[127470,127478],"Iraq"]]); // IQ/Iraq
- flags = flags.concat([[[127470,127479],"Iran"]]); // IR/Iran
- flags = flags.concat([[[127470,127481],"Italy"]]); // IT/Italy
- flags = flags.concat([[[127471,127474],"Jamaica"]]); // JM/Jamaica
- flags = flags.concat([[[127471,127477],"Japan"]]); // JP/Japan
- flags = flags.concat([[[127472,127466],"Kenya"]]); // KE/Kenya
- flags = flags.concat([[[127472,127477],"North Korea"]]); // KP/North Korea
- flags = flags.concat([[[127472,127479],"South Korea"]]); // KR/South Korea
- flags = flags.concat([[[127473,127463],"Lebanon"]]); // LB/Lebanon
- flags = flags.concat([[[127473,127486],"Libya"]]); // LY/Libya
- flags = flags.concat([[[127474,127475],"Mongolia"]]); // MN/Mongolia
- flags = flags.concat([[[127474,127485],"Mexico"]]); // MX/Mexico
- flags = flags.concat([[[127475,127468],"Nigeria"]]); // NG/Nigeria
- flags = flags.concat([[[127477,127466],"Peru"]]); // PE/Peru
- flags = flags.concat([[[127477,127472],"Pakistan"]]); // PK/Pakistan
- flags = flags.concat([[[127477,127479],"Puerto Rico"]]); // PR/Puerto Rico
- flags = flags.concat([[[127477,127480],"Palestinian Territory"]]); // PS/Palestinian Territory
- flags = flags.concat([[[127479,127482],"Russia"]]); // RU/Russia
- flags = flags.concat([[[127480,127462],"Saudi Arabia"]]); // SA/Saudi Arabia
- flags = flags.concat([[[127480,127465],"Sudan"]]); // SD/Sudan
- flags = flags.concat([[[127480,127466],"Sweden"]]); // SE/Sweden
- flags = flags.concat([[[127480,127468],"Singapore"]]); // SG/Singapore
- flags = flags.concat([[[127480,127476],"Somalia"]]); // SO/Somalia
- flags = flags.concat([[[127481,127469],"Thailand"]]); // TH/Thailand
- flags = flags.concat([[[127481,127479],"Turkey"]]); // TR/Turkey
- flags = flags.concat([[[127481,127484],"Taiwan"]]); // TW/Taiwan
- flags = flags.concat([[[127482,127468],"Uganda"]]); // UG/Uganda
- flags = flags.concat([[[127482,127480],"United States"]]); // US/United States
- flags = flags.concat([[[127483,127462],"Vatican City"]]); // VA/Vatican City
- flags = flags.concat([[[127483,127466],"Venezuela"]]); // VE/Venezuela
- flags = flags.concat([[[127487,127462],"South Africa"]]); // ZA/South Africa
- flags = flags.concat([[[127487,127484],"Zimbabwe"]]); // ZW/Zimbabwe
- flags = flags.concat([[[127987],"White Flag"]]); // Waving White Flag
- flags = flags.concat([[[127988],"Black Flag"]]); // Waving Black Flag
- flags = flags.concat([[[127987,65039,8205,127752],"Rainbow Flag"]]); // Waving White Flag + Rainbow
- flags = flags.concat([[[127988,8205,9760,65039],"Pirate Flag"]]); // Waving Black Flag + Skull and Crossbones
- //flags = flags.concat([[[000000,000000],"STRING"]]); // STRING
- for (var i=0; i<flags.length; i++)
- {
- var flag = document.createElement("span");
- flag.setAttribute("style","cursor:pointer; padding:2px; white-space:nowrap;");
- var s1 = "", s2 = "";
- for (var j=0; j<flags[i][0].length; j++)
- {
- s1 += String.fromCodePoint(flags[i][0][j]);
- s2 += "&#"+flags[i][0][j]+";";
- }
- flag.setAttribute("onclick","addSmile(document.getElementsByTagName('textarea')["+x+"],'"+s2+"');");
- flag.setAttribute("title",flags[i][1]);
- flag.appendChild(document.createTextNode(s1));
- smilebar.appendChild(flag);
- if (i+1<flags.length)
- {
- smilebar.appendChild(document.createTextNode(" "));
- }
- }
- toolbar.parentNode.insertBefore(smilebar, toolbar.nextSibling);
- // Create macro configuration interface
- var macrobar = document.createElement("div");
- macrobar.setAttribute("style","display:none; padding:0.5em;");
- macrobar.setAttribute("id","macrobar"+x);
- var table = document.createElement("table");
- var tr = document.createElement("tr");
- var th = document.createElement("th");
- th.appendChild(document.createTextNode("Name"));
- tr.appendChild(th);
- var th = document.createElement("th");
- th.appendChild(document.createTextNode("Type"));
- tr.appendChild(th);
- var th = document.createElement("th");
- th.appendChild(document.createTextNode("String | Expression"));
- tr.appendChild(th);
- var th = document.createElement("th");
- th.setAttribute("title","Only used with expressions. Parenthesized substring matches (e.g. '$1') can be used.");
- th.setAttribute("style","cursor:help;");
- th.appendChild(document.createTextNode("Expression Replace"));
- tr.appendChild(th);
- table.appendChild(tr);
- for (var i=1; i<=7; i++)
- {
- var tr = document.createElement("tr");
- // Macro name
- var td = document.createElement("td");
- var name = document.createElement("input");
- name.setAttribute("type","text");
- name.setAttribute("id","soymacros"+x+"name"+i);
- td.appendChild(name);
- tr.appendChild(td);
- // Macro type
- var td = document.createElement("td");
- var rad = document.createElement("input");
- rad.setAttribute("type","radio");
- rad.setAttribute("name","soymacros"+x+"type"+i);
- rad.setAttribute("id","soymacros"+x+"type"+i+"S");
- td.appendChild(rad);
- td.appendChild(document.createTextNode(" String "));
- var rad = document.createElement("input");
- rad.setAttribute("type","radio");
- rad.setAttribute("name","soymacros"+x+"type"+i);
- rad.setAttribute("id","soymacros"+x+"type"+i+"E");
- td.appendChild(rad);
- td.appendChild(document.createTextNode(" Expression "));
- tr.appendChild(td);
- // Field A
- var td = document.createElement("td");
- var f1 = document.createElement("input");
- f1.setAttribute("type","text");
- f1.setAttribute("id","soymacros"+x+"fieldA"+i);
- td.appendChild(f1);
- tr.appendChild(td);
- // Field B
- var td = document.createElement("td");
- var f1 = document.createElement("input");
- f1.setAttribute("type","text");
- f1.setAttribute("id","soymacros"+x+"fieldB"+i);
- td.appendChild(f1);
- tr.appendChild(td);
- table.appendChild(tr);
- }
- macrobar.appendChild(table);
- var p = document.createElement("p");
- var save = document.createElement("input");
- save.setAttribute("type","button");
- save.setAttribute("value","Save");
- save.setAttribute("title","Save any edits to the macro configuration.");
- save.setAttribute("onclick","macrobarSave("+x+");");
- p.appendChild(save);
- p.appendChild(document.createTextNode(" "));
- var guide = document.createElement("a");
- guide.setAttribute("href","https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions");
- guide.setAttribute("target","_blank");
- guide.appendChild(document.createTextNode("Regexp Guide"));
- p.appendChild(guide);
- macrobar.appendChild(p);
- toolbar.parentNode.insertBefore(macrobar, toolbar.nextSibling);
- }
- // Change Stories link to regular admin.pl on breakingnews, meta, politics, and communityreviews nexii
- if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/(breakingnews|meta|politics|communityreviews)\//)!=-1)
- {
- if (document.getElementById("adminmenu"))
- {
- var t = document.getElementById("adminmenu").getElementsByTagName("a");
- for (var i=0; i<t.length; i++)
- {
- if (t[i].innerText == "Stories")
- {
- t[i].setAttribute("href","//soylentnews.org/admin.pl");
- }
- }
- }
- }
- // Easily cycle through *New* comments
- if (!disableCycler && (document.querySelector(".newBadge") || (document.querySelector(".dimmed") && document.querySelector(".comment > div.commentDiv:not(.dimmed)"))))
- {
- var temp = document.getElementById("links");
- var temp2 = document.createElement("div");
- temp2.setAttribute("style","position:fixed; bottom:15px; z-index:-100;");
- var temp3 = document.createElement("input");
- temp3.setAttribute("type","button");
- temp3.setAttribute("value","New Comment \u00BB");
- temp3.setAttribute("onclick","cycleNew();");
- temp2.appendChild(temp3);
- temp.appendChild(temp2);
- }
- var temp = document.createElement("script");
- // Add selection handling function
- temp.appendChild(document.createTextNode("function getSelection(textarea) { if ('selectionStart' in textarea) { if (textarea.selectionStart != textarea.selectionEnd) { return [textarea.selectionStart,textarea.selectionEnd]; } } } "));
- // Add comment formatting buttons
- temp.appendChild(document.createTextNode("function addBlockquote(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<blockquote>'+area.value.substring(sel[0],sel[1])+'<\/blockquote>' + area.value.substring(sel[1]); } } function addPara(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<p>'+area.value.substring(sel[0],sel[1])+'<\/p>' + area.value.substring(sel[1]); } } function addBreak(area) { if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,area.selectionStart) + '<br>' + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+4,pos+4) } } function addHRule(area) { if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,area.selectionStart) + '<hr>' + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+4,pos+4) } } function addHyperlink(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { url = prompt('URL:', 'https://'); if (url==null) {return false;} area.value = area.value.substring(0,sel[0]) + '<a href=\"'+url+'\">'+area.value.substring(sel[0],sel[1])+'<\/a>' + area.value.substring(sel[1]); } } function addBold(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<b>'+area.value.substring(sel[0],sel[1])+'<\/b>' + area.value.substring(sel[1]); } } function addItalic(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<em>'+area.value.substring(sel[0],sel[1])+'<\/em>' + area.value.substring(sel[1]); } } function addStrike(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<del>'+area.value.substring(sel[0],sel[1])+'<\/del>' + area.value.substring(sel[1]); } } function addEcode(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<ecode>'+area.value.substring(sel[0],sel[1])+'<\/ecode>' + area.value.substring(sel[1]); } } function addTT(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<tt>'+area.value.substring(sel[0],sel[1])+'<\/tt>' + area.value.substring(sel[1]); } } function addSpoiler(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<spoiler>'+area.value.substring(sel[0],sel[1])+'<\/spoiler>' + area.value.substring(sel[1]); } } function addSmall(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<small>'+area.value.substring(sel[0],sel[1])+'<\/small>' + area.value.substring(sel[1]); } } function addSuper(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<sup>'+area.value.substring(sel[0],sel[1])+'<\/sup>' + area.value.substring(sel[1]); } } function addSubsc(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<sub>'+area.value.substring(sel[0],sel[1])+'<\/sub>' + area.value.substring(sel[1]); } } "));
- // Add list creation functions
- temp.appendChild(document.createTextNode("function addOrdlist(area,type) { if ('selectionStart' in area) { if (area.selectionStart != area.selectionEnd) { area.value = area.value.substring(0,area.selectionStart) + '<ol type=\\\"' + type + '\\\"><li>' + area.value.substring(area.selectionStart,area.selectionEnd).replace(/\\n/g,'<\/li>\\n<li>').replace(/\\n<li><\\/li>/g,'') + '<\/li><\/ol>' + area.value.substring(area.selectionEnd); } else { temp = '<ol type=\\\"' + type + '\\\">'; while(listitem = prompt('Enter a list item. Leave the box empty or press Cancel to complete the list:', '')) { temp += '<li>' + listitem + '<\/li>\\n'; } if (temp=='<ol type=\\\"' + type + '\\\">') {return;} area.value = area.value.substring(0,area.selectionStart) + temp.substring(0,temp.length-1) + '<\/ol>' + area.value.substring(area.selectionStart); } } } function addUnordlist(area) { if ('selectionStart' in area) { if (area.selectionStart != area.selectionEnd) { area.value = area.value.substring(0,area.selectionStart) + '<ul><li>' + area.value.substring(area.selectionStart,area.selectionEnd).replace(/\\n/g,'<\/li>\\n<li>').replace(/\\n<li><\\/li>/g,'') + '<\/li><\/ul>' + area.value.substring(area.selectionEnd); } else { temp = '<ul>'; while(listitem = prompt('Enter a list item. Leave the box empty or press Cancel to complete the list:', '')) { temp += '<li>' + listitem + '<\/li>\\n'; } if (temp=='<ul>') {return;} area.value = area.value.substring(0,area.selectionStart) + temp.substring(0,temp.length-1) + '<\/ul>' + area.value.substring(area.selectionStart); } } }"));
- // Add macro functions
- temp.appendChild(document.createTextNode("function macroChoose(area,x) { if (JSON.parse(localStorage.getItem('soymacro'+x))[1]=='string') { macroString(area,x); } else { macroRegexp(area,x); } }"));
- temp.appendChild(document.createTextNode("function macroString(area,x) { var sel = getSelection(area); if (sel && sel[0] != sel[1]) { area.value = area.value.substring(0,sel[0]) + JSON.parse(localStorage.getItem('soymacro'+x))[2] + area.value.substring(sel[1]); } else if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,area.selectionStart) + JSON.parse(localStorage.getItem('soymacro'+x))[2] + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+JSON.parse(localStorage.getItem('soymacro'+x))[2].length,pos+JSON.parse(localStorage.getItem('soymacro'+x))[2].length); } }"));
- temp.appendChild(document.createTextNode("function macroRegexp(area,x) { var sel = getSelection(area); if (sel && sel[0] != sel[1]) { var reg = JSON.parse(localStorage.getItem('soymacro'+x))[2]; area.value = area.value.substring(0,sel[0]) + area.value.substring(sel[0],sel[1]).replace(new RegExp(reg.substring(reg.indexOf('/')+1,reg.lastIndexOf('/')), reg.substring(reg.lastIndexOf('/')+1)),JSON.parse(localStorage.getItem('soymacro'+x))[3]) + area.value.substring(sel[1]); } }"));
- temp.appendChild(document.createTextNode("function macrobarInit(x) { for (var y=1; y<=7; y++) { document.getElementById('soymacros'+x+'name'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[0]; if (JSON.parse(localStorage.getItem('soymacro'+y))[1]=='string') { document.getElementById('soymacros'+x+'type'+y+'S').checked = true; } else { document.getElementById('soymacros'+x+'type'+y+'E').checked = true; } document.getElementById('soymacros'+x+'fieldA'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[2]; if (JSON.parse(localStorage.getItem('soymacro'+y))[1]!='string') { document.getElementById('soymacros'+x+'fieldB'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[3]; } else { document.getElementById('soymacros'+x+'fieldB'+y).value = ''; } } }"));
- temp.appendChild(document.createTextNode("function macrobarSave(x) { for (var y=1; y<=7; y++) { if (document.getElementById('soymacros'+x+'type'+y+'S').checked == true) { localStorage.setItem('soymacro'+y,JSON.stringify([document.getElementById('soymacros'+x+'name'+y).value,'string',document.getElementById('soymacros'+x+'fieldA'+y).value])); } else { localStorage.setItem('soymacro'+y,JSON.stringify([document.getElementById('soymacros'+x+'name'+y).value,'regexp',document.getElementById('soymacros'+x+'fieldA'+y).value,document.getElementById('soymacros'+x+'fieldB'+y).value])); } } document.getElementById('macrobar'+x).style.display = 'none'; var boxes = document.getElementsByTagName('textarea'); for (var z=0; z<boxes.length; z++) { for (var y=1; y<=7; y++) { document.getElementById('soymacros'+z+'button'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[0]; if (JSON.parse(localStorage.getItem('soymacro'+y))[1]=='string') { if (JSON.parse(localStorage.getItem('soymacro'+y))[2].length < 40) { document.getElementById('soymacros'+z+'button'+y).title = 'Insert or replace selected text with: ' + JSON.parse(localStorage.getItem('soymacro'+y))[2]; } else { document.getElementById('soymacros'+z+'button'+y).title = 'Insert or replace selected text with: ' + JSON.parse(localStorage.getItem('soymacro'+y))[2].substring(0,40)+'...'; } } else { document.getElementById('soymacros'+z+'button'+y).title = 'Replace text matched by the regular expression: ' + JSON.parse(localStorage.getItem('soymacro'+y))[2] + ' with: ' + JSON.parse(localStorage.getItem('soymacro'+y))[3]; } } } }"));
- // Add despace function
- temp.appendChild(document.createTextNode("function despace(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + area.value.substring(sel[0],sel[1]).replace(/\\r/g,' ').replace(/\\n/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ') + area.value.substring(sel[1]); } }"));
- // Add unicode insertion function
- temp.appendChild(document.createTextNode("function addSmile(area, smile) { if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,pos) + smile + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+smile.length,pos+smile.length) } }"));
- // Add save submission function
- temp.appendChild(document.createTextNode("function saveSoydraft() { try {window.clearTimeout(timer);} catch(e){} var boxes = document.getElementsByTagName('textarea'); for (var x=0; x<boxes.length; x++) { if (boxes[x].name == 'story') { if (document.getElementById('storyTitle').value!=''||boxes[x].value!='') { document.getElementById('autosaveBar').style.visibility='visible'; document.getElementById('autosaveState').style.transition='opacity 0s'; document.getElementById('autosaveState').style.opacity='1'; document.getElementById('autosaveState').offsetWidth = document.getElementById('autosaveState').offsetWidth; document.getElementById('autosaveState').style.transition='opacity 1s'; document.getElementById('autosaveState').style.opacity='0'; var y=0; for (y=0; y<document.getElementsByClassName('fullbox').length; y++) { if (document.getElementsByClassName('fullbox')[y].name == 'dept') { break; } } localStorage.setItem('soydraft',JSON.stringify([encodeURI(document.getElementById('storyTitle').value),encodeURI(document.getElementsByClassName('fullbox')[y].value),document.getElementById('primaryskid').value,document.getElementById('tid').value,encodeURI(boxes[x].value)])); document.getElementById('discardDraft').removeAttribute('disabled'); document.getElementById('discardDraft').setAttribute('onclick','discardSoydraft();'); } else { alert('There is no title or story to save.'); } break; } } }"));
- // Add discard submission function
- temp.appendChild(document.createTextNode("function discardSoydraft() { autosaveOff(); document.getElementById('autosave').checked=false; document.getElementById('autosaveBar').style.visibility='hidden'; localStorage.removeItem('soydraft'); document.getElementById('discardDraft').setAttribute('disabled','disabled'); document.getElementById('discardDraft').removeAttribute('onclick'); }"));
- // Add autosave functions
- temp.appendChild(document.createTextNode("function autosaveOn() { var boxes = document.getElementsByTagName('textarea'); for (var x=0; x<boxes.length; x++) { if (boxes[x].name == 'story') { boxes[x].onkeydown = function() {try {window.clearTimeout(timer);} catch(e){} timer = window.setTimeout(function() { if(document.getElementById(\"autosaveBar\").style.visibility==\"visible\") {saveSoydraft();} }, 3000);}; } } document.getElementById('storyTitle').onkeydown = function() {try {window.clearTimeout(timer);} catch(e){} timer = window.setTimeout(function() { if(document.getElementById(\"autosaveBar\").style.visibility==\"visible\") {saveSoydraft();} }, 3000);}; }"));
- temp.appendChild(document.createTextNode("function autosaveOff() { var boxes = document.getElementsByTagName('textarea'); for (var x=0; x<boxes.length; x++) { if (boxes[x].name == 'story') { try {window.clearTimeout(timer);} catch(e){} boxes[x].onkeydown = null; } } document.getElementById('storyTitle').onkeydown = null; }"));
- // Add new comment cycling function
- // Credit: charon
- temp.appendChild(document.createTextNode("var newComN = 0; var newComments = document.querySelector('.newBadge') ? document.querySelectorAll('.newBadge') : document.querySelectorAll('.comment > div:not(.dimmed)'); function cycleNew() {if (!newComments[newComN]) {return;} if (newComN != 0 && window.pageYOffset > newComments[newComN].offsetTop + 100) {while (newComments[newComN].offsetTop <= window.pageYOffset){newComN++;}} var p = newComments[newComN++]; var y = p.offsetTop; while (p = p.offsetParent) {y += p.offsetLeft;} window.scrollTo(0,y); if(newComN>=newComments.length-1){newComN=0;}}"));
- document.getElementsByTagName('head')[0].appendChild(temp); // Add script to page
Add Comment
Please, Sign In to add comment