Beta release

This commit is contained in:
benweet 2014-04-21 21:39:41 +01:00
parent 379ee55372
commit d4c3e83cde
6 changed files with 49 additions and 45 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "stackedit", "name": "stackedit",
"version": "3.99.0", "version": "3.99.1",
"description": "StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.", "description": "StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.",
"dependencies": { "dependencies": {
"bootstrap": "3.0.3", "bootstrap": "3.0.3",

View File

@ -1,9 +1,12 @@
{ {
"name": "stackedit", "name": "stackedit",
"version": "3.99.0", "version": "3.99.1",
"private": true, "private": true,
"description": "StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.", "description": "StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.",
"main": "res/main.js", "main": "res/main.js",
"engines": {
"node": "0.10.x"
},
"directories": { "directories": {
"doc": "doc" "doc": "doc"
}, },

View File

@ -1,5 +1,5 @@
CACHE MANIFEST CACHE MANIFEST
#Date Mon Apr 21 2014 18:50:39 #Date Mon Apr 21 2014 21:11:15
CACHE: CACHE:
res/worker.js res/worker.js

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
define([], function() { define([], function() {
var constants = {}; var constants = {};
constants.VERSION = "3.99.0"; constants.VERSION = "3.99.1";
constants.MAIN_URL = "https://stackedit.io/"; constants.MAIN_URL = "https://stackedit.io/";
constants.GOOGLE_ANALYTICS_ACCOUNT_ID = "UA-39556145-1"; constants.GOOGLE_ANALYTICS_ACCOUNT_ID = "UA-39556145-1";
constants.GOOGLE_API_KEY = "AIzaSyAeCU8CGcSkn0z9js6iocHuPBX4f_mMWkw"; constants.GOOGLE_API_KEY = "AIzaSyAeCU8CGcSkn0z9js6iocHuPBX4f_mMWkw";

View File

@ -4,7 +4,7 @@ if (typeof exports === "object" && typeof require === "function") // we're in a
Markdown = exports; Markdown = exports;
else else
Markdown = {}; Markdown = {};
// The following text is included for historical reasons, but should // The following text is included for historical reasons, but should
// be taken with a pinch of salt; it's not all true anymore. // be taken with a pinch of salt; it's not all true anymore.
@ -110,28 +110,28 @@ else
this.setOptions = function(optionsParam) { this.setOptions = function(optionsParam) {
options = optionsParam; options = optionsParam;
}; };
var pluginHooks = this.hooks = new HookCollection(); var pluginHooks = this.hooks = new HookCollection();
// given a URL that was encountered by itself (without markup), should return the link text that's to be given to this link // given a URL that was encountered by itself (without markup), should return the link text that's to be given to this link
pluginHooks.addNoop("plainLinkText"); pluginHooks.addNoop("plainLinkText");
// called with the orignal text as given to makeHtml. The result of this plugin hook is the actual markdown source that will be cooked // called with the orignal text as given to makeHtml. The result of this plugin hook is the actual markdown source that will be cooked
pluginHooks.addNoop("preConversion"); pluginHooks.addNoop("preConversion");
// called with the text once all normalizations have been completed (tabs to spaces, line endings, etc.), but before any conversions have // called with the text once all normalizations have been completed (tabs to spaces, line endings, etc.), but before any conversions have
pluginHooks.addNoop("postNormalization"); pluginHooks.addNoop("postNormalization");
// Called with the text before / after creating block elements like code blocks and lists. Note that this is called recursively // Called with the text before / after creating block elements like code blocks and lists. Note that this is called recursively
// with inner content, e.g. it's called with the full text, and then only with the content of a blockquote. The inner // with inner content, e.g. it's called with the full text, and then only with the content of a blockquote. The inner
// call will receive outdented text. // call will receive outdented text.
pluginHooks.addNoop("preBlockGamut"); pluginHooks.addNoop("preBlockGamut");
pluginHooks.addNoop("postBlockGamut"); pluginHooks.addNoop("postBlockGamut");
// called with the text of a single block element before / after the span-level conversions (bold, code spans, etc.) have been made // called with the text of a single block element before / after the span-level conversions (bold, code spans, etc.) have been made
pluginHooks.addNoop("preSpanGamut"); pluginHooks.addNoop("preSpanGamut");
pluginHooks.addNoop("postSpanGamut"); pluginHooks.addNoop("postSpanGamut");
// called with the final cooked HTML code. The result of this plugin hook is the actual output of makeHtml // called with the final cooked HTML code. The result of this plugin hook is the actual output of makeHtml
pluginHooks.addNoop("postConversion"); pluginHooks.addNoop("postConversion");
@ -161,7 +161,7 @@ else
// Don't do that. // Don't do that.
if (g_urls) if (g_urls)
throw new Error("Recursive call to converter.makeHtml"); throw new Error("Recursive call to converter.makeHtml");
// Create the private state objects. // Create the private state objects.
g_urls = new SaveHash(); g_urls = new SaveHash();
g_titles = new SaveHash(); g_titles = new SaveHash();
@ -196,7 +196,7 @@ else
// match consecutive blank lines with /\n+/ instead of something // match consecutive blank lines with /\n+/ instead of something
// contorted like /[ \t]*\n+/ . // contorted like /[ \t]*\n+/ .
text = text.replace(/^[ \t]+$/mg, ""); text = text.replace(/^[ \t]+$/mg, "");
text = pluginHooks.postNormalization(text); text = pluginHooks.postNormalization(text);
// Turn block-level HTML blocks into hash entries // Turn block-level HTML blocks into hash entries
@ -332,10 +332,11 @@ else
) // attacklab: there are sentinel newlines at end of document ) // attacklab: there are sentinel newlines at end of document
/gm,function(){...}}; /gm,function(){...}};
*/ */
text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm, hashElement); //text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm, hashElement);
text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?<\/\2>[ \t]*(?=\n+)\n)/gm, hashElement);
// Special case just for <hr />. It was easier to make a special case than // Special case just for <hr />. It was easier to make a special case than
// to make the other regex more complicated. // to make the other regex more complicated.
/* /*
text = text.replace(/ text = text.replace(/
@ -408,7 +409,7 @@ else
return blockText; return blockText;
} }
var blockGamutHookCallback = function (t) { return _RunBlockGamut(t); } var blockGamutHookCallback = function (t) { return _RunBlockGamut(t); }
function _RunBlockGamut(text, doNotUnhash) { function _RunBlockGamut(text, doNotUnhash) {
@ -416,9 +417,9 @@ else
// These are all the transformations that form block-level // These are all the transformations that form block-level
// tags like paragraphs, headers, and list items. // tags like paragraphs, headers, and list items.
// //
text = pluginHooks.preBlockGamut(text, blockGamutHookCallback); text = pluginHooks.preBlockGamut(text, blockGamutHookCallback);
text = _DoHeaders(text); text = _DoHeaders(text);
// Do Horizontal Rules: // Do Horizontal Rules:
@ -430,7 +431,7 @@ else
text = _DoLists(text); text = _DoLists(text);
text = _DoCodeBlocks(text); text = _DoCodeBlocks(text);
text = _DoBlockQuotes(text); text = _DoBlockQuotes(text);
text = pluginHooks.postBlockGamut(text, blockGamutHookCallback); text = pluginHooks.postBlockGamut(text, blockGamutHookCallback);
// We already ran _HashHTMLBlocks() before, in Markdown(), but that // We already ran _HashHTMLBlocks() before, in Markdown(), but that
@ -450,7 +451,7 @@ else
// //
text = pluginHooks.preSpanGamut(text); text = pluginHooks.preSpanGamut(text);
text = _DoCodeSpans(text); text = _DoCodeSpans(text);
text = _EscapeSpecialCharsWithinTagAttributes(text); text = _EscapeSpecialCharsWithinTagAttributes(text);
text = _EncodeBackslashEscapes(text); text = _EncodeBackslashEscapes(text);
@ -464,15 +465,15 @@ else
// Must come after _DoAnchors(), because you can use < and > // Must come after _DoAnchors(), because you can use < and >
// delimiters in inline links like [this](<url>). // delimiters in inline links like [this](<url>).
text = _DoAutoLinks(text); text = _DoAutoLinks(text);
text = text.replace(/~P/g, "://"); // put in place to prevent autolinking; reset now text = text.replace(/~P/g, "://"); // put in place to prevent autolinking; reset now
text = _EncodeAmpsAndAngles(text); text = _EncodeAmpsAndAngles(text);
text = options._DoItalicsAndBold ? options._DoItalicsAndBold(text) : _DoItalicsAndBold(text); text = options._DoItalicsAndBold ? options._DoItalicsAndBold(text) : _DoItalicsAndBold(text);
// Do hard breaks: // Do hard breaks:
text = text.replace(/ +\n/g, " <br>\n"); text = text.replace(/ +\n/g, " <br>\n");
text = pluginHooks.postSpanGamut(text); text = pluginHooks.postSpanGamut(text);
return text; return text;
@ -484,7 +485,7 @@ else
// don't conflict with their use in Markdown for code, italics and strong. // don't conflict with their use in Markdown for code, italics and strong.
// //
// Build a regex to find HTML tags and comments. See Friedl's // Build a regex to find HTML tags and comments. See Friedl's
// "Mastering Regular Expressions", 2nd Ed., pp. 200-201. // "Mastering Regular Expressions", 2nd Ed., pp. 200-201.
// SE: changed the comment part of the regex // SE: changed the comment part of the regex
@ -558,7 +559,7 @@ else
| |
[^()\s] [^()\s]
)*? )*?
)>? )>?
[ \t]* [ \t]*
( // $5 ( // $5
(['"]) // quote char = $6 (['"]) // quote char = $6
@ -697,7 +698,7 @@ else
return text; return text;
} }
function attributeEncode(text) { function attributeEncode(text) {
// unconditionally replace angle brackets here -- what ends up in an attribute (e.g. alt or title) // unconditionally replace angle brackets here -- what ends up in an attribute (e.g. alt or title)
// never makes sense to have verbatim HTML in it (and the sanitizer would totally break it) // never makes sense to have verbatim HTML in it (and the sanitizer would totally break it)
@ -730,7 +731,7 @@ else
return whole_match; return whole_match;
} }
} }
alt_text = escapeCharacters(attributeEncode(alt_text), "*_[]()"); alt_text = escapeCharacters(attributeEncode(alt_text), "*_[]()");
url = escapeCharacters(url, "*_"); url = escapeCharacters(url, "*_");
var result = "<img src=\"" + url + "\" alt=\"" + alt_text + "\""; var result = "<img src=\"" + url + "\" alt=\"" + alt_text + "\"";
@ -754,7 +755,7 @@ else
// Setext-style headers: // Setext-style headers:
// Header 1 // Header 1
// ======== // ========
// //
// Header 2 // Header 2
// -------- // --------
// //
@ -913,7 +914,7 @@ else
// //
// We changed this to behave identical to MarkdownSharp. This is the constructed RegEx, // We changed this to behave identical to MarkdownSharp. This is the constructed RegEx,
// with {MARKER} being one of \d+[.] or [*+-], depending on list_type: // with {MARKER} being one of \d+[.] or [*+-], depending on list_type:
/* /*
list_str = list_str.replace(/ list_str = list_str.replace(/
(^[ \t]*) // leading whitespace = $1 (^[ \t]*) // leading whitespace = $1
@ -962,7 +963,7 @@ else
function _DoCodeBlocks(text) { function _DoCodeBlocks(text) {
// //
// Process Markdown `<pre><code>` blocks. // Process Markdown `<pre><code>` blocks.
// //
/* /*
text = text.replace(/ text = text.replace(/
@ -1010,26 +1011,26 @@ else
function _DoCodeSpans(text) { function _DoCodeSpans(text) {
// //
// * Backtick quotes are used for <code></code> spans. // * Backtick quotes are used for <code></code> spans.
// //
// * You can use multiple backticks as the delimiters if you want to // * You can use multiple backticks as the delimiters if you want to
// include literal backticks in the code span. So, this input: // include literal backticks in the code span. So, this input:
// //
// Just type ``foo `bar` baz`` at the prompt. // Just type ``foo `bar` baz`` at the prompt.
// //
// Will translate to: // Will translate to:
// //
// <p>Just type <code>foo `bar` baz</code> at the prompt.</p> // <p>Just type <code>foo `bar` baz</code> at the prompt.</p>
// //
// There's no arbitrary limit to the number of backticks you // There's no arbitrary limit to the number of backticks you
// can use as delimters. If you need three consecutive backticks // can use as delimters. If you need three consecutive backticks
// in your code, use four for delimiters, etc. // in your code, use four for delimiters, etc.
// //
// * You can use spaces to get literal backticks at the edges: // * You can use spaces to get literal backticks at the edges:
// //
// ... type `` `bar` `` ... // ... type `` `bar` `` ...
// //
// Turns to: // Turns to:
// //
// ... type <code>`bar`</code> ... // ... type <code>`bar`</code> ...
// //
@ -1162,7 +1163,7 @@ else
var grafs = text.split(/\n{2,}/g); var grafs = text.split(/\n{2,}/g);
var grafsOut = []; var grafsOut = [];
var markerRe = /~K(\d+)K/; var markerRe = /~K(\d+)K/;
// //
@ -1277,7 +1278,7 @@ else
} }
return "<" + protocol + link + ">" + tail; return "<" + protocol + link + ">" + tail;
} }
function _DoAutoLinks(text) { function _DoAutoLinks(text) {
// note that at this point, all other URL in the text are already hyperlinked as <a href=""></a> // note that at this point, all other URL in the text are already hyperlinked as <a href=""></a>
@ -1290,7 +1291,7 @@ else
text = text.replace(autoLinkRegex, handleTrailingParens); text = text.replace(autoLinkRegex, handleTrailingParens);
// autolink anything like <http://example.com> // autolink anything like <http://example.com>
var replacer = function (wholematch, m1) { return "<a href=\"" + m1 + "\">" + pluginHooks.plainLinkText(m1) + "</a>"; } var replacer = function (wholematch, m1) { return "<a href=\"" + m1 + "\">" + pluginHooks.plainLinkText(m1) + "</a>"; }
text = text.replace(/<((https?|ftp):[^'">\s]+)>/gi, replacer); text = text.replace(/<((https?|ftp):[^'">\s]+)>/gi, replacer);
@ -1372,7 +1373,7 @@ else
var _problemUrlChars = /(?:["'*()[\]:]|~D)/g; var _problemUrlChars = /(?:["'*()[\]:]|~D)/g;
// hex-encodes some unusual "problem" chars in URLs to avoid URL detection problems // hex-encodes some unusual "problem" chars in URLs to avoid URL detection problems
function encodeProblemUrlChars(url) { function encodeProblemUrlChars(url) {
if (!url) if (!url)
return ""; return "";