Is there a subreddit for this activity or is it more of Voat territory?
Is Assange rape-adjacent?
'Rape-Adjacent': Imagining Legal Responses to Nonconsensual Condom Removal
"Bruh, I just stealthed a hottie last night!"
*one alimony later*
"..."
So I've written a markup macro language, yclept "aa_macro", and I am using it for generating web documents using a doc system wrapper I wrote for that specific purpose. I'm pretty happy with the language itself as it's already doing everything I was able to think of so far, but am very interested in extending it further to provide more functionality, as there's no reason not to, and power is addictive, and, well, just because.
So if anyone would be so kind as to share any ideas as to what they would like a general text markup macro language to do, or pointers to same, I would be most appreciative. There's no pressing need to go looking at the docs to see what it already has in order to make suggestions, either, I'll just respond here with the relevant details about whatever might be put forth. All input is welcome, including "wtf."
Slashdot... it has many problems. Corporate overlords, yes, certainly. That's the root of a lot of it. But beneath that, there is:
...and I'm sure others have their hot buttons as well. Those are mine, or at least, sorta.
Beuhler? Anyone?
Dumping ground for some unused links.
https://www.vice.com/en_us/article/more-and-more-americans-are-down-with-weed-survey-says
https://www.vice.com/en_us/article/what-would-happen-if-jeff-sessions-goes-after-legal-weed
Poll: Marijuana safer than opioids, but moms shouldn't use
https://www.vice.com/en_us/article/we-asked-teens-if-weed-will-be-cool-after-its-legal-weedweek2017
https://www.sciencedaily.com/releases/2017/04/170412091228.htm
https://www.nytimes.com/2017/04/17/arts/music/prince-opioid-death.html
https://www.nytimes.com/2017/03/29/nyregion/in-naloxone-heroin-schools-room-overdose-antidote.html
Why on EARTH do financial institution's sites load so SLOWLY in a web browser?
I've dealt with 5 different institutions, that maintain web sites. (believe it or not, there are some that still do not have websites!)
The bank that I am currently with generally takes 30 to 45 seconds to load their pages. Granted, I'm in the middle of Outback, Nowhere, and my ISP really sucks. But, I can browse the web, and pages load in a couple seconds. On a bad day, pages I visit frequently might take as much as 10 seconds. And, of course, on a really bad day, I just give up and read a book. But, the bank's pages on a good day take as long or longer to load as other pages take on bad days.
Now, I've never made even the slightest attempt to scan or analyze any bank's web page. There are so many horror stories. Customer Helpy Helperton sends an email, "You web site is insecure and misconfigured." and the very same day, the FBI is kicking down his door, hauling him and his computers off to jail and/or impoundment.
How the hell do you even get the message across, without risking prison?
What the hell are they doing wrong? Not enough bandwidth? Not enough memory on the servers? An excess of (probably ineffective) security? Or, do they do this on purpose, to ensure you can't hack them quickly?
Seriously, I've not yet seen a bank or credit union web site that is any more responsive than a tree sloth.
Or, is it me? Does NoScript and other security stuff slow me down when I visit their sites?
I'd sure like to know what's going on, but again, I'm afraid to even try to inspect their web sites. (That presuming that I'm smart enough to learn anything from the analysis.)
Comments?
// ==UserScript==
// @name Soylent Upgrade
// @version 13.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*// @match http://soylentnews.org/*journal.pl*
// @match http://*.soylentnews.org/*journal.pl*
// @match https://soylentnews.org/*journal.pl*
// @match https://*.soylentnews.org/*journal.pl*
// ==/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\?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(/\\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);}");
}
}
}// 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+"]);");
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;"];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],[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],[65533],[127744,127756],[127759],[127775,127776],[127797],[127801],[127804,127812],[127817],[127820,127822],[127828,127831],[127838,127839],[127843],[127849],[127855],[127860,127867],[127891],[127904,127911],[127918],[127939],[127942],[127977],[128025],[128074,128078],[128123,128131],[128137,128142],[128148,128150],[128152],[128158],[128161,128164],[128168,128170],[128172],[128176,128177],[128187],[128189,128190],[128193,128194],[128197],[128203,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],[128659],[128684,128685]];
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+1<smiles.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.getElementsByClassName("newBadge").length > 0)
{
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) { if ('selectionStart' in area) { if (area.selectionStart != area.selectionEnd) { area.value = area.value.substring(0,area.selectionStart) + '<ol><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>'; 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>') {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
temp.appendChild(document.createTextNode("var newComN = 0; function cycleNew() {if (p = document.getElementsByClassName('newBadge')[newComN++]) { var x = p.offsetTop; while (p = p.offsetParent) {x += p.offsetLeft;} window.scrollTo(0,x); } if(newComN>document.getElementsByClassName('newBadge').length-1){newComN=0;} }"));document.getElementsByTagName('head')[0].appendChild(temp); // Add script to page
First African-American Female Judge On New York's Top Court Found Dead
Abdus-Salaam became the first female Muslim to serve as a U.S. judge when she joined the New York State Supreme Court in 1994, according to Zakiyyah Muhammad, the founding director of the Institute of Muslim American Studies, as quoted in The Times.
In 2013, Gov. Andrew Cuomo, D-N.Y., appointed her to the state's highest court, known as the Court of Appeals.
[...] The Court of Appeals has been on recess since the end of last month. The court is due back in session in less than two weeks.
Abdus-Salaam received her law degree from Columbia Law School, where she attended classes with Eric Holder, the former U.S. attorney general.
Police Believe New York Judge Found in Hudson River Committed Suicide
It seems like almost every day a new story comes out about yet another unsavory practice by Uber.
First it was the sexual harassment allegations and apparent cover up, then it was the angry rant by their CEO, then an expose concerning their deceptions to avoid law enforcement scrutiny.
As if that weren't enough, Google/Waymo then sued Uber for the theft of documents by Tony Levandowski. Uber and Levandowski's lawyers continue to stonewall Google's lawyers and the courts.
And now, it seems that Uber has been skimming fares by quoting one (higher) fare to customers and another (lower) fare to drivers, then pocketing the difference.
So what is it with these folks? Is their culture so ethically sparse that this seems normal? Or does every corporation act this way and these guys just aren't very slick?
I hope Uber gets sued into oblivion. Sadly, the folks who perpetrate this stuff are protected by the corporate veil. They should go to PMITA prison until they lose all sphincter control.