Stories
Slash Boxes
Comments

SoylentNews is people

Log In

Log In

Create Account  |  Retrieve Password


Navy SEALs Reportedly Killed Green Beret Over Stolen Funds

Posted by takyon on Monday November 13 2017, @11:07AM (#2759)
10 Comments
News

Report: Green Beret killed by SEALs after he uncovered alleged theft

Two Navy SEALs being investigated over the death of an Army Green Beret in Mali in June are accused of killing him after he discovered they had been stealing, according to a report in the Daily Beast.

CNN has not independently verified the information in Saturday's article, which the Daily Beast attributes to "five members of the special-operations community who were not cleared to speak publicly."

Naval Criminal Investigative Service spokesman Ed Buice confirmed to CNN last month that the NCIS was investigating whether two members of the Navy's elite SEAL Team Six killed Army Staff Sgt. Logan J. Melgar.

The New York Times was the first to report that the SEALs were under investigation for Melgar's death at a US government compound near the American embassy in Bamako, the capital.

[...] The Daily Beast article cites two special operations sources as saying the SEALs under investigation over Melgar's death had been taking money from a fund used to pay informants. It says the sources allege that Melgar uncovered the theft and declined an offer to take a cut of the proceeds. On June 4, according to the Daily Beast's sources, an altercation broke out -- the cause of which the article says is unknown -- and Melgar stopped breathing. The SEALs and another Green Beret took Melgar to hospital, the Beast quotes former AFRICOM officials as saying.

Now that's what I call a dishonorable discharge.

Roy Moore Can Still Win

Posted by takyon on Friday November 10 2017, @05:31PM (#2756)
15 Comments
News

Original story: Woman says Roy Moore initiated sexual encounter when she was 14, he was 32 (archive)

Roy Moore can still win

Moore has zero incentive to listen to calls from official Washington for him to leave the race. In fact, the louder those calls get, the more likely it is that Moore digs in even further.

Then there is the fact that the widespread condemnation of Moore among GOP senators is not entirely shared by Alabama Republicans.

Take Alabama state auditor Jim Ziegler, for one. In an interview, Ziegler downplayed the accusations against Moore by citing Scripture:

Take the Bible. Zachariah and Elizabeth for instance. Zachariah was extremely old to marry Elizabeth and they became the parents of John the Baptist. Also take Joseph and Mary. Mary was a teenager and Joseph was an adult carpenter. They became parents of Jesus. There's just nothing immoral or illegal here. Maybe just a little bit unusual.

Then there was Alabama Marion County GOP chair David Hall, who told the Toronto Star's Daniel Dale this: "It was 40 years ago. I really don't see the relevance of it. He was 32. She was supposedly 14. She's not saying that anything happened other than they kissed."

In the Post report, however, the accuser also says Moore sexually assaulted her. She says Moore touched her and forced her to touch him.

Marrying young girls is old hat. We just grope and move on now.

Romney: 'Unfit' Moore 'should step aside'

Why do we care what Romney thinks, again?

Romney mulling Senate bid: report
I Never Liked Mitt Romney, But Now I’m Desperate for His Comeback

Oh, ok.

"The McDonald's of Pasta"

Posted by takyon on Friday November 10 2017, @05:15AM (#2755)
4 Comments
/dev/random

I went to the new restaurant that wants to become the 'McDonald's of pasta' — and they are onto something big

Ladner says Pasta Flyer's service model embodies the two cornerstones of fast food: speed and low prices. But he refers to the food itself as "slow" and more comparable to what you'd find at a traditional restaurant.

[...] I sampled four pastas: fusilli with basil pesto sauce, fettuccine with creamy Alfredo sauce, whole grain rigatoni with Nonna's meat ragu, and spaghetti and meatballs with marinara sauce. I was shocked to find that all four were of the same quality I would expect from an upscale Italian restaurant that charges around $25 for a bowl of pasta. The noodles were cooked to al dente perfection, the sauces were warm and rich, and the meat was flavorful and tender. The dishes were simple, but done right.

[...] To make this happen, Ladner says the sauces are held just above a temperature set by the NYC Department of Health. After a customer orders, their noodles are cooked in 15 seconds while their sauce is brought to a boil, and then the two are plated.

[...] Ladner says the wheat is milled directly before the pasta is made, resulting in a noodle that's "fresh and alive," and will still be al dente when you eat it a day later as leftovers. "It's the best pasta I know of in the world, and it's $7.50," he says.

EmDrive: Pilot Wave Theory?

Posted by takyon on Wednesday November 08 2017, @02:29AM (#2748)
3 Comments
Science

Theoretical Physicists Are Getting Closer to Explaining How NASA’s ‘Impossible’ EmDrive Works

Theoretical scientists are trying to understand why and how EmDrive propulsion works. The NASA paper suggests a tentative explanation based on a quantum physics theory, "a nonlocal hidden-variable theory, or pilot-wave theory for short."

A new research paper by a Portuguese scientist, titled "A Possible Explanation for the Em Drive Based on a Pilot Wave Theory" is now trending among EmDrive enthusiasts in the NasaSpaceFlight forum. The paywalled paper proposes a similar model to the NASA one (here's an open access preprint you can read.)

Pilot-wave theories have been proposed since the 1920s by quantum physicists, notably Louis de Broglie and David Bohm, to make sense of the weird behavior of quantum matter. Recently, pilot-wave quantum theories have gained more popularity after it was discovered that pilot-wave quantum-like behavior can be reproduced in classical fluids and explained by classical (non-quantum) fluid dynamics.

Not enough meat on these bones for another story, but you might be interested.

Previously: Explanation may be on the way for the "Impossible" EmDrive
Finnish Physicist Says EmDrive Device Does Have an Exhaust
EmDrive Peer-Reviewed Paper Coming in December; Theseus Planning a Cannae Thruster Cubesat
It's Official: NASA's Peer-Reviewed EmDrive Paper Has Finally Been Published
Space Race 2.0: China May Already be Testing an EmDrive in Orbit
Physicist Uses "Quantised Inertia" to Explain Both EmDrive and Galaxy Rotation
EmDrive 3.0: Wait, Where's EmDrive 2.0?

Trump Administration Embraces Toxic Pesticide

Posted by takyon on Saturday November 04 2017, @04:03PM (#2743)
9 Comments
News

Trump’s Legacy: Damaged Brains

The pesticide, which belongs to a class of chemicals developed as a nerve gas made by Nazi Germany, is now found in food, air and drinking water. Human and animal studies show that it damages the brain and reduces I.Q.s while causing tremors among children. It has also been linked [open, DOI: 10.1093/jnci/djh324] [DX] to lung cancer and Parkinson's disease [DOI: 10.1136/oemed-2013-101394] [DX] in adults.

[...] This chemical, chlorpyrifos, is hard to pronounce, so let's just call it Dow Chemical Company's Nerve Gas Pesticide. Even if you haven't heard of it, it may be inside you: One 2012 study found that it was in the umbilical cord blood of 87 percent of newborn babies tested. And now the Trump administration is embracing it, overturning a planned ban that had been in the works for many years.

The Environmental Protection Agency actually banned Dow's Nerve Gas Pesticide for most indoor residential use 17 years ago — so it's no longer found in the Raid you spray at cockroaches (it's very effective, which is why it's so widely used; then again, don't suggest this to Dow, but sarin nerve gas might be even more effective!). The E.P.A. was preparing to ban it for agricultural and outdoor use this spring, but then the Trump administration rejected the ban. That was a triumph for Dow, but the decision stirred outrage among public health experts. They noted that Dow had donated $1 million for President Trump's inauguration.

So Dow's Nerve Gas Pesticide will still be used on golf courses, road medians and crops that end up on our plate. Kids are told to eat fruits and vegetables, but E.P.A. scientists found levels of this pesticide on such foods at up to 140 times the limits deemed safe. "This was a chemical developed to attack the nervous system," notes Virginia Rauh, a Columbia professor who has conducted groundbreaking research on it. "It should not be a surprise that it's not good for people."

[...] Democrats sometimes gloat that Trump hasn't managed to pass significant legislation so far, which is true. But he has been tragically effective at dismantling environmental and health regulations — so that Trump's most enduring legacy may be cancer, infertility and diminished I.Q.s for decades to come.

Chlorpyrifos

Asked in April whether Pruitt had met with Dow Chemical Company executives or lobbyists before his decision, a EPA spokesman replied: "We have had no meetings with Dow on this topic." In June, after several Freedom of Information Act requests, the EPA released a copy of Pruitt's March meeting schedule which showed that a meeting had been scheduled between Pruitt and Dow CEO Andrew Liveris at a hotel in Houston, Texas, on March 9.[91] Both men were featured speakers at an energy conference. An EPA spokesperson reported that the meeting was brief and the pesticide was not discussed.[92]

In August, it was revealed that in fact Pruitt and other EPA officials had met with industry representatives on dozens of occasions in the weeks immediately prior to the March decision, promising them that it was "a new day" and assuring them that their wish to continue using chlorpyrifos had been heard. Ryan Jackson, Pruitt's chief of staff, said in a March 8 email that he had "scared" career staff into going along with the political decision to deny the ban, adding "[T]hey know where this is headed and they are documenting it well."[93]

Bernie Burned by Clinton-Run DNC

Posted by takyon on Thursday November 02 2017, @08:05PM (#2740)
16 Comments

Papa John Blames NFL for Lost Pizza Sales 🍕📉

Posted by takyon on Wednesday November 01 2017, @10:45PM (#2739)
8 Comments
Business

Papa John's Blames the NFL for Hurting Pizza Sales 🍕📉🔥

Papa John’s International Inc. founder John Schnatter is going after NFL Commissioner Roger Goodell, saying weak handling of the league’s national-anthem controversy has hammered sales of his pizza.

“The NFL has hurt us by not resolving the current debacle to the players’ and owners’ satisfaction,” Schnatter, who serves as the pizza chain’s chairman and chief executive officer, said on a conference call. “NFL leadership has hurt Papa John’s shareholders.”

The remarks follow a controversy over NFL football players protesting during the national anthem, a movement that started last season. The demonstrations have sparked calls for a boycott and raised concerns among league sponsors. But Schnatter’s comments mark the highest-profile example of an NFL partner publicly blaming the outcry for hurting business.

Fox News Employees Know Their Mueller/Russia Coverage Stinks

Posted by takyon on Wednesday November 01 2017, @01:56AM (#2737)
12 Comments

Soylent Upgrade Greasemonkey/Tampermonkey extension v14

Posted by takyon on Saturday October 28 2017, @04:53PM (#2712)
7 Comments
Code

NOW WITH MORE BLOAT!

SKIP TO THE COMMENTS

// ==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

74-Year-Old "Ninja" Cat Burglar Caught

Posted by takyon on Wednesday October 25 2017, @01:35PM (#2708)
4 Comments
/dev/random

To catch a ‘ninja’ thief: Osaka police unmask 74-year-old cat burglar

Police in Osaka have finally nabbed a nimble “ninja” thief who dressed in black and scrambled over walls to commit scores of break-ins over an eight-year career — and were astonished to find he was 74.

Police had been stumped by a string of burglaries, their only lead being security camera footage showing an agile thief with a black neck-warmer pulled up to the nose and a parker hood down to the eyebrows.

“He was dressed all in black just like a ninja,” a senior official at the Kawachi Police Station said.

But the master thief made a mistake in May — his neck-warmer slipped and his identity was revealed on camera.

Police recognized their man as Mitsuaki Tanigawa, 74, who had a previous record of thefts.