Added ejs engine
This commit is contained in:
parent
5536ced7c8
commit
1e88a6fe21
@ -7,7 +7,8 @@
|
|||||||
"doc": "doc"
|
"doc": "doc"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "3.x"
|
"express": "3.x",
|
||||||
|
"ejs": "~0.8.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"grunt": "~0.4.1",
|
"grunt": "~0.4.1",
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
CACHE MANIFEST
|
CACHE MANIFEST
|
||||||
#Date Wed Oct 16 2013 00:12:59
|
#Date Wed Oct 16 2013 00:12:57
|
||||||
|
|
||||||
CACHE:
|
CACHE:
|
||||||
index.html
|
|
||||||
viewer.html
|
|
||||||
res/worker.js
|
res/worker.js
|
||||||
libs/MathJax/MathJax.js?config=TeX-AMS_HTML
|
libs/MathJax/MathJax.js?config=TeX-AMS_HTML
|
||||||
libs/MathJax/config/Safe.js
|
libs/MathJax/config/Safe.js
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html manifest="cache.manifest">
|
|
||||||
<head>
|
|
||||||
<title>StackEdit - Markdown editor</title>
|
|
||||||
<link rel="canonical" href="http://benweet.github.io/stackedit/">
|
|
||||||
<link rel="icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
|
||||||
<link rel="shortcut icon" href="res-min/img/stackedit-32.ico"
|
|
||||||
type="image/x-icon">
|
|
||||||
<meta name="description"
|
|
||||||
content="StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.">
|
|
||||||
<meta name="author" content="Benoit Schweblin">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612" />
|
|
||||||
<script>
|
|
||||||
// Use http://.../?debug to serve original JavaScript files instead of minified
|
|
||||||
var baseDir = 'res';
|
|
||||||
if(!/(\?|&)debug($|&)/.test(location.search)) {
|
|
||||||
baseDir += '-min';
|
|
||||||
}
|
|
||||||
var require = {
|
|
||||||
baseUrl: baseDir,
|
|
||||||
deps: [
|
|
||||||
'main'
|
|
||||||
]
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script src="res-min/require.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -830,10 +830,15 @@ define([
|
|||||||
return function(e) {
|
return function(e) {
|
||||||
try {
|
try {
|
||||||
newLocalStorage = JSON.parse(e.target.result);
|
newLocalStorage = JSON.parse(e.target.result);
|
||||||
if(/^v/.test(newLocalStorage.version) === false) {
|
// Compare localStorage version
|
||||||
throw 1;
|
var newVersion = parseInt(newLocalStorage.version.match(/^v(\d+)$/)[1], 10);
|
||||||
|
var currentVersion = parseInt(localStorage.version.match(/^v(\d+)$/)[1], 10);
|
||||||
|
if(newVersion > currentVersion) {
|
||||||
|
// We manage localStorage upgrade, not downgrade
|
||||||
|
eventMgr.onError("Incompatible version. Please upgrade StackEdit.");
|
||||||
|
} else {
|
||||||
|
$('.modal-import-docs-settings').modal('show');
|
||||||
}
|
}
|
||||||
$('.modal-import-docs-settings').modal('show');
|
|
||||||
}
|
}
|
||||||
catch(e) {
|
catch(e) {
|
||||||
eventMgr.onError("Wrong format: " + importedFile.name);
|
eventMgr.onError("Wrong format: " + importedFile.name);
|
||||||
@ -889,7 +894,7 @@ define([
|
|||||||
trigger: 'hover',
|
trigger: 'hover',
|
||||||
title: [
|
title: [
|
||||||
'Thanks for supporting StackEdit by adding a backlink in your documents!<br/><br/>',
|
'Thanks for supporting StackEdit by adding a backlink in your documents!<br/><br/>',
|
||||||
'<b class="text-danger">NOTE: Backlinks are not welcome in Stack Exchange Q/A.</b>'
|
'<b class="text-danger">NOTE: Backlinks in Stack Exchange Q/A are not welcome.</b>'
|
||||||
].join('')
|
].join('')
|
||||||
});
|
});
|
||||||
var tooltipOpen = false;
|
var tooltipOpen = false;
|
||||||
|
@ -7,7 +7,7 @@ define([
|
|||||||
"eventMgr",
|
"eventMgr",
|
||||||
"fileSystem",
|
"fileSystem",
|
||||||
"classes/FileDescriptor",
|
"classes/FileDescriptor",
|
||||||
"text!../WELCOME.md"
|
"text!WELCOME.md"
|
||||||
], function($, _, core, utils, settings, eventMgr, fileSystem, FileDescriptor, welcomeContent) {
|
], function($, _, core, utils, settings, eventMgr, fileSystem, FileDescriptor, welcomeContent) {
|
||||||
|
|
||||||
var fileMgr = {};
|
var fileMgr = {};
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
</button>
|
</button>
|
||||||
<div class="panel-content">
|
<div class="panel-content">
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
<a href="viewer.html" title="StackEdit Viewer"
|
<a href="viewer" title="StackEdit Viewer"
|
||||||
class="list-group-item"><i class="icon-resize-full"></i>
|
class="list-group-item"><i class="icon-resize-full"></i>
|
||||||
StackEdit Viewer</a> <a href="#" data-toggle="collapse"
|
StackEdit Viewer</a> <a href="#" data-toggle="collapse"
|
||||||
data-target=".collapse-open-from" class="list-group-item"><i
|
data-target=".collapse-open-from" class="list-group-item"><i
|
||||||
@ -1046,6 +1046,8 @@
|
|||||||
data-target=".modal-app-reset"><i
|
data-target=".modal-app-reset"><i
|
||||||
class="icon-fire icon-white"></i> Reset application</a>
|
class="icon-fire icon-white"></i> Reset application</a>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="help-block text-center"><a target="_blank"
|
||||||
|
href="http://benweet.github.io/stackedit/recovery.html">Old platform recovery</a></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<b>NOTE:</b> You can open any URL within StackEdit using <a
|
<b>NOTE:</b> You can open any URL within StackEdit using <a
|
||||||
href="viewer.html#!url=https://raw.github.com/benweet/stackedit/master/README.md"
|
href="viewer#!url=https://raw.github.com/benweet/stackedit/master/README.md"
|
||||||
title="Sharing example"><code>viewer.html#!url=...</code></a>
|
title="Sharing example"><code>viewer#!url=...</code></a>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<a href="viewer.html" class="btn btn-default dropdown-toggle"
|
<a href="viewer" class="btn btn-default dropdown-toggle"
|
||||||
title="Open in viewer">
|
title="Open in viewer">
|
||||||
<i class="icon-resize-full"></i>
|
<i class="icon-resize-full"></i>
|
||||||
</a>
|
</a>
|
||||||
|
@ -33,6 +33,7 @@ define(function(require, exports, module) {
|
|||||||
|
|
||||||
var lang = require("ace/lib/lang");
|
var lang = require("ace/lib/lang");
|
||||||
var config = require("ace/config");
|
var config = require("ace/config");
|
||||||
|
var Range = require('ace/range').Range
|
||||||
|
|
||||||
function bindKey(win, mac) {
|
function bindKey(win, mac) {
|
||||||
return {
|
return {
|
||||||
@ -283,10 +284,12 @@ exports.commands = [{
|
|||||||
name: "indent",
|
name: "indent",
|
||||||
bindKey: bindKey("Tab", "Tab"),
|
bindKey: bindKey("Tab", "Tab"),
|
||||||
exec: function(editor) {
|
exec: function(editor) {
|
||||||
var rowIndex = editor.$getSelectedRows().last;
|
// Perform block indent if the caret is at the begining of a list item
|
||||||
var rowText = editor.session.getLine(rowIndex);
|
var selectionRange = editor.getSelectionRange();
|
||||||
var rowState = editor.session.getState(rowIndex);
|
var range = new Range(selectionRange.end.row, 0, selectionRange.end.row, selectionRange.end.column);
|
||||||
if((rowState == "listblock" || rowState == "listblock-start") && /^\s*(?:[-+*]|\d+\.)\s+$/.test(rowText)) {
|
var startText = editor.session.getTextRange(range);
|
||||||
|
var token = editor.session.getTokenAt(selectionRange.end.row, selectionRange.end.column);
|
||||||
|
if(token.type == "markup.list" && /^\s*(?:[-+*]|\d+\.)\s+$/.test(startText)) {
|
||||||
editor.blockIndent();
|
editor.blockIndent();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1,200 +1,158 @@
|
|||||||
// RequireJS configuration
|
// RequireJS configuration
|
||||||
requirejs.config({
|
requirejs.config({
|
||||||
waitSeconds: 0,
|
waitSeconds: 0,
|
||||||
packages: [
|
packages: [{
|
||||||
{
|
name: 'ace',
|
||||||
name: 'ace',
|
location: 'bower-libs/ace/lib/ace',
|
||||||
location: 'bower-libs/ace/lib/ace',
|
main: 'ace'
|
||||||
main: 'ace'
|
}, {
|
||||||
},
|
name: 'css',
|
||||||
{
|
location: 'bower-libs/require-css',
|
||||||
name: 'css',
|
main: 'css'
|
||||||
location: 'bower-libs/require-css',
|
}, {
|
||||||
main: 'css'
|
name: 'less',
|
||||||
},
|
location: 'bower-libs/require-less',
|
||||||
{
|
main: 'less'
|
||||||
name: 'less',
|
}],
|
||||||
location: 'bower-libs/require-less',
|
paths: {
|
||||||
main: 'less'
|
jquery: 'bower-libs/jquery/jquery',
|
||||||
}
|
underscore: 'bower-libs/underscore/underscore',
|
||||||
],
|
crel: 'bower-libs/crel/crel',
|
||||||
paths: {
|
jgrowl: 'bower-libs/jgrowl/jquery.jgrowl',
|
||||||
jquery: 'bower-libs/jquery/jquery',
|
mousetrap: 'bower-libs/mousetrap/mousetrap',
|
||||||
underscore: 'bower-libs/underscore/underscore',
|
'mousetrap-record': 'bower-libs/mousetrap/plugins/record/mousetrap-record',
|
||||||
crel: 'bower-libs/crel/crel',
|
toMarkdown: 'bower-libs/to-markdown/src/to-markdown',
|
||||||
jgrowl: 'bower-libs/jgrowl/jquery.jgrowl',
|
text: 'bower-libs/requirejs-text/text',
|
||||||
mousetrap: 'bower-libs/mousetrap/mousetrap',
|
mathjax: '../libs/MathJax/MathJax.js?config=TeX-AMS_HTML',
|
||||||
'mousetrap-record': 'bower-libs/mousetrap/plugins/record/mousetrap-record',
|
bootstrap: 'bower-libs/bootstrap/dist/js/bootstrap',
|
||||||
toMarkdown: 'bower-libs/to-markdown/src/to-markdown',
|
requirejs: 'bower-libs/requirejs/require',
|
||||||
text: 'bower-libs/requirejs-text/text',
|
'google-code-prettify': 'bower-libs/google-code-prettify/src/prettify',
|
||||||
mathjax: '../libs/MathJax/MathJax.js?config=TeX-AMS_HTML',
|
highlightjs: 'bower-libs/highlightjs/highlight.pack',
|
||||||
bootstrap: 'bower-libs/bootstrap/dist/js/bootstrap',
|
'jquery-waitforimages': 'bower-libs/waitForImages/src/jquery.waitforimages',
|
||||||
requirejs: 'bower-libs/requirejs/require',
|
'jquery-ui': 'bower-libs/jquery-ui/ui/jquery-ui',
|
||||||
'google-code-prettify': 'bower-libs/google-code-prettify/src/prettify',
|
'jquery-ui-core': 'bower-libs/jquery-ui/ui/jquery.ui.core',
|
||||||
highlightjs: 'bower-libs/highlightjs/highlight.pack',
|
'jquery-ui-widget': 'bower-libs/jquery-ui/ui/jquery.ui.widget',
|
||||||
'jquery-waitforimages': 'bower-libs/waitForImages/src/jquery.waitforimages',
|
'jquery-ui-mouse': 'bower-libs/jquery-ui/ui/jquery.ui.mouse',
|
||||||
'jquery-ui': 'bower-libs/jquery-ui/ui/jquery-ui',
|
'jquery-ui-draggable': 'bower-libs/jquery-ui/ui/jquery.ui.draggable',
|
||||||
'jquery-ui-core': 'bower-libs/jquery-ui/ui/jquery.ui.core',
|
'jquery-ui-effect': 'bower-libs/jquery-ui/ui/jquery.ui.effect',
|
||||||
'jquery-ui-widget': 'bower-libs/jquery-ui/ui/jquery.ui.widget',
|
'jquery-ui-effect-slide': 'bower-libs/jquery-ui/ui/jquery.ui.effect-slide',
|
||||||
'jquery-ui-mouse': 'bower-libs/jquery-ui/ui/jquery.ui.mouse',
|
uilayout: 'libs/layout',
|
||||||
'jquery-ui-draggable': 'bower-libs/jquery-ui/ui/jquery.ui.draggable',
|
FileSaver: 'bower-libs/FileSaver/FileSaver',
|
||||||
'jquery-ui-effect': 'bower-libs/jquery-ui/ui/jquery.ui.effect',
|
stacktrace: 'bower-libs/stacktrace/stacktrace',
|
||||||
'jquery-ui-effect-slide': 'bower-libs/jquery-ui/ui/jquery.ui.effect-slide',
|
'requirejs-text': 'bower-libs/requirejs-text/text',
|
||||||
uilayout: 'libs/layout',
|
'bootstrap-tour': 'bower-libs/bootstrap-tour/build/js/bootstrap-tour',
|
||||||
FileSaver: 'bower-libs/FileSaver/FileSaver',
|
css_browser_selector: 'bower-libs/css_browser_selector/css_browser_selector',
|
||||||
stacktrace: 'bower-libs/stacktrace/stacktrace',
|
'jquery-mousewheel': 'bower-libs/jquery-mousewheel/jquery.mousewheel',
|
||||||
'requirejs-text': 'bower-libs/requirejs-text/text',
|
'pagedown-ace': 'bower-libs/pagedown-ace/Markdown.Editor',
|
||||||
'bootstrap-tour': 'bower-libs/bootstrap-tour/build/js/bootstrap-tour',
|
'pagedown-extra': 'bower-libs/pagedown-extra/Markdown.Extra',
|
||||||
css_browser_selector: 'bower-libs/css_browser_selector/css_browser_selector',
|
'ace/requirejs/text': 'libs/ace_text',
|
||||||
'jquery-mousewheel': 'bower-libs/jquery-mousewheel/jquery.mousewheel',
|
'ace/commands/default_commands': 'libs/ace_commands',
|
||||||
'pagedown-ace': 'bower-libs/pagedown-ace/Markdown.Editor',
|
'require-css': 'bower-libs/require-css/css',
|
||||||
'pagedown-extra': 'bower-libs/pagedown-extra/Markdown.Extra',
|
xregexp: 'bower-libs/xregexp/xregexp-all',
|
||||||
'ace/requirejs/text': 'libs/ace_text',
|
yaml: 'bower-libs/yaml.js',
|
||||||
'ace/commands/default_commands': 'libs/ace_commands',
|
'yaml.js': 'bower-libs/yaml.js',
|
||||||
'require-css': 'bower-libs/require-css/css',
|
'yaml-js': 'bower-libs/yaml.js/bin/yaml',
|
||||||
xregexp: 'bower-libs/xregexp/xregexp-all',
|
Typo: 'bower-libs/Typo.js',
|
||||||
yaml: 'bower-libs/yaml.js',
|
'Typo.js': 'bower-libs/Typo.js'
|
||||||
'yaml.js': 'bower-libs/yaml.js',
|
},
|
||||||
'yaml-js': 'bower-libs/yaml.js/bin/yaml',
|
shim: {
|
||||||
Typo: 'bower-libs/Typo.js',
|
underscore: {
|
||||||
'Typo.js': 'bower-libs/Typo.js'
|
exports: '_'
|
||||||
},
|
},
|
||||||
shim: {
|
mathjax: ['libs/mathjax_init'],
|
||||||
underscore: {
|
jgrowl: {
|
||||||
exports: '_'
|
deps: ['jquery'],
|
||||||
},
|
exports: 'jQuery.jGrowl'
|
||||||
mathjax: [
|
},
|
||||||
'libs/mathjax_init'
|
mousetrap: {
|
||||||
],
|
exports: 'Mousetrap'
|
||||||
jgrowl: {
|
},
|
||||||
deps: [
|
'yaml-js': {
|
||||||
'jquery'
|
exports: 'YAML'
|
||||||
],
|
},
|
||||||
exports: 'jQuery.jGrowl'
|
'bootstrap-record': ['mousetrap'],
|
||||||
},
|
toMarkdown: {
|
||||||
mousetrap: {
|
deps: ['jquery'],
|
||||||
exports: 'Mousetrap'
|
exports: 'toMarkdown'
|
||||||
},
|
},
|
||||||
'yaml-js': {
|
'bootstrap-tour': ['bootstrap'],
|
||||||
exports: 'YAML'
|
bootstrap: ['jquery'],
|
||||||
},
|
'jquery-waitforimages': ['jquery'],
|
||||||
'bootstrap-record': [
|
'jquery-mousewheel': ['jquery'],
|
||||||
'mousetrap'
|
uilayout: ['jquery-ui-effect-slide'],
|
||||||
],
|
'jquery-ui-effect-slide': ['jquery-ui-effect'],
|
||||||
toMarkdown: {
|
'jquery-ui-effect': ['jquery-ui-draggable'],
|
||||||
deps: [
|
'jquery-ui-draggable': ['jquery-ui-mouse'],
|
||||||
'jquery'
|
'jquery-ui-mouse': ['jquery-ui-widget'],
|
||||||
],
|
'jquery-ui-widget': ['jquery-ui-core'],
|
||||||
exports: 'toMarkdown'
|
'jquery-ui-core': ['jquery'],
|
||||||
},
|
'pagedown-extra': ['pagedown-ace', 'google-code-prettify', 'highlightjs'],
|
||||||
'bootstrap-tour': [
|
'pagedown-ace': ['bower-libs/pagedown-ace/Markdown.Converter']
|
||||||
'bootstrap'
|
}
|
||||||
],
|
});
|
||||||
bootstrap: [
|
|
||||||
'jquery'
|
// Check browser compatibility
|
||||||
],
|
try {
|
||||||
'jquery-waitforimages': [
|
var test = 'seLocalStorageCheck';
|
||||||
'jquery'
|
localStorage.setItem(test, test);
|
||||||
],
|
localStorage.removeItem(test);
|
||||||
'jquery-mousewheel': [
|
var obj = {};
|
||||||
'jquery'
|
Object.defineProperty(obj, 'prop', {
|
||||||
],
|
get: function() {},
|
||||||
uilayout: [
|
set: function() {}
|
||||||
'jquery-ui-effect-slide'
|
});
|
||||||
],
|
}
|
||||||
'jquery-ui-effect-slide': [
|
catch (e) {
|
||||||
'jquery-ui-effect'
|
alert('Your browser is not supported, sorry!');
|
||||||
],
|
throw e;
|
||||||
'jquery-ui-effect': [
|
}
|
||||||
'jquery-ui-draggable'
|
|
||||||
],
|
// Defines the logger object
|
||||||
'jquery-ui-draggable': [
|
var logger = {
|
||||||
'jquery-ui-mouse'
|
log: function() {},
|
||||||
],
|
info: function() {},
|
||||||
'jquery-ui-mouse': [
|
warn: function() {},
|
||||||
'jquery-ui-widget'
|
error: function() {}
|
||||||
],
|
};
|
||||||
'jquery-ui-widget': [
|
// We can run StackEdit with http://.../?console to print logs in the console
|
||||||
'jquery-ui-core'
|
if (/(\?|&)console($|&)/.test(location.search)) {
|
||||||
],
|
logger = console;
|
||||||
'jquery-ui-core': [
|
}
|
||||||
'jquery'
|
|
||||||
],
|
// Viewer mode is deduced from the body class
|
||||||
'pagedown-extra': [
|
var viewerMode = /(^| )viewer($| )/.test(document.body.className);
|
||||||
'pagedown-ace',
|
|
||||||
'google-code-prettify',
|
// Light mode is for mobile or viewer
|
||||||
'highlightjs'
|
var lightMode = viewerMode || /(\?|&)light($|&)/.test(location.search) || (function(a) {
|
||||||
],
|
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) return true;
|
||||||
'pagedown-ace': [
|
})(navigator.userAgent || navigator.vendor || window.opera);
|
||||||
'bower-libs/pagedown-ace/Markdown.Converter'
|
|
||||||
]
|
// Keep the theme in a global variable
|
||||||
}
|
var theme = localStorage.theme || 'default';
|
||||||
});
|
var themeModule = "less!themes/" + theme;
|
||||||
|
if (baseDir.indexOf('-min') !== -1) {
|
||||||
// Defines the logger object
|
themeModule = "css!themes/" + theme;
|
||||||
var logger = {
|
}
|
||||||
log: function() {
|
|
||||||
},
|
// RequireJS entry point. By requiring synchronizer, publisher and
|
||||||
info: function() {
|
// media-importer, we are actually loading all the modules
|
||||||
},
|
require(["jquery", "core", "eventMgr", "synchronizer", "publisher", "mediaImporter", "css",
|
||||||
warn: function() {
|
themeModule, ], function($, core, eventMgr) {
|
||||||
},
|
|
||||||
error: function() {
|
$(function() {
|
||||||
}
|
|
||||||
};
|
// Here, all the modules are loaded and the DOM is ready
|
||||||
// We can run StackEdit with http://.../?console to print logs in the console
|
core.onReady();
|
||||||
if(/(\?|&)console($|&)/.test(location.search)) {
|
|
||||||
logger = console;
|
// If browser has detected a new application cache.
|
||||||
}
|
if (window.applicationCache) {
|
||||||
|
window.applicationCache.addEventListener('updateready', function(e) {
|
||||||
// Viewer mode is deduced from the body class
|
if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {
|
||||||
var viewerMode = /(^| )viewer($| )/.test(document.body.className);
|
window.applicationCache.swapCache();
|
||||||
|
eventMgr.onMessage('New version available!\nJust refresh the page to upgrade.');
|
||||||
// Light mode is for mobile or viewer
|
}
|
||||||
var lightMode =
|
}, false);
|
||||||
viewerMode
|
}
|
||||||
|| /(\?|&)light($|&)/.test(location.search)
|
});
|
||||||
|| (function(a) {
|
|
||||||
if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i.test(a)
|
});
|
||||||
|| /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i
|
|
||||||
.test(a.substr(0, 4)))
|
|
||||||
return true;
|
|
||||||
})(navigator.userAgent || navigator.vendor || window.opera);
|
|
||||||
|
|
||||||
// Keep the theme in a global variable
|
|
||||||
var theme = localStorage.theme || 'default';
|
|
||||||
var themeModule = "less!themes/" + theme;
|
|
||||||
if(baseDir.indexOf('-min') !== -1) {
|
|
||||||
themeModule = "css!themes/" + theme;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RequireJS entry point. By requiring synchronizer, publisher and
|
|
||||||
// media-importer, we are actually loading all the modules
|
|
||||||
require([
|
|
||||||
"jquery",
|
|
||||||
"core",
|
|
||||||
"eventMgr",
|
|
||||||
"synchronizer",
|
|
||||||
"publisher",
|
|
||||||
"mediaImporter",
|
|
||||||
"css",
|
|
||||||
themeModule,
|
|
||||||
], function($, core, eventMgr) {
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
|
|
||||||
// Here, all the modules are loaded and the DOM is ready
|
|
||||||
core.onReady();
|
|
||||||
|
|
||||||
// If browser has detected a new application cache.
|
|
||||||
if(window.applicationCache) {
|
|
||||||
window.applicationCache.addEventListener('updateready', function(e) {
|
|
||||||
if(window.applicationCache.status === window.applicationCache.UPDATEREADY) {
|
|
||||||
window.applicationCache.swapCache();
|
|
||||||
eventMgr.onMessage('New version available!\nJust refresh the page to upgrade.');
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
@ -45,7 +45,7 @@ define([
|
|||||||
}
|
}
|
||||||
var url = [
|
var url = [
|
||||||
MAIN_URL,
|
MAIN_URL,
|
||||||
'viewer.html#!provider=',
|
'viewer#!provider=',
|
||||||
provider.providerId
|
provider.providerId
|
||||||
];
|
];
|
||||||
_.each(provider.sharingAttributes, function(attributeName) {
|
_.each(provider.sharingAttributes, function(attributeName) {
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html manifest="cache.manifest">
|
|
||||||
<head>
|
|
||||||
<title>StackEdit Viewer</title>
|
|
||||||
<link rel="canonical"
|
|
||||||
href="http://benweet.github.io/stackedit/viewer.html">
|
|
||||||
<link rel="icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
|
||||||
<link rel="shortcut icon" href="res-min/img/stackedit-32.ico"
|
|
||||||
type="image/x-icon">
|
|
||||||
<meta name="description"
|
|
||||||
content="StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.">
|
|
||||||
<meta name="author" content="Benoit Schweblin">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612" />
|
|
||||||
<script>
|
|
||||||
// Use http://.../?debug to serve original JavaScript files instead of minified
|
|
||||||
var baseDir = 'res';
|
|
||||||
if(!/(\?|&)debug($|&)/.test(location.search)) {
|
|
||||||
baseDir += '-min';
|
|
||||||
}
|
|
||||||
var require = {
|
|
||||||
baseUrl: baseDir,
|
|
||||||
deps: [
|
|
||||||
'main'
|
|
||||||
]
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script src="res-min/require.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="viewer">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
26
server.js
26
server.js
@ -1,6 +1,10 @@
|
|||||||
var express = require('express');
|
var express = require('express');
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
|
// Configure ejs engine
|
||||||
|
app.set('views', __dirname + '/views');
|
||||||
|
app.engine('html', require('ejs').renderFile);
|
||||||
|
|
||||||
// Force HTTPS on stackedit.io
|
// Force HTTPS on stackedit.io
|
||||||
app.all('*', function(req, res, next) {
|
app.all('*', function(req, res, next) {
|
||||||
if (req.headers.host == 'stackedit.io' && req.headers['x-forwarded-proto'] != 'https') {
|
if (req.headers.host == 'stackedit.io' && req.headers['x-forwarded-proto'] != 'https') {
|
||||||
@ -17,6 +21,28 @@ app.use(express.compress());
|
|||||||
// Serve static resources
|
// Serve static resources
|
||||||
app.use(express.static(__dirname + '/public'));
|
app.use(express.static(__dirname + '/public'));
|
||||||
|
|
||||||
|
// Serve index.html
|
||||||
|
app.get('/', function (req, res) {
|
||||||
|
res.render('index.html');
|
||||||
|
});
|
||||||
|
app.get('/index.html', function (req, res) {
|
||||||
|
res.render('index.html');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Serve viewer.html
|
||||||
|
app.get('/viewer', function (req, res) {
|
||||||
|
res.render('viewer.html');
|
||||||
|
});
|
||||||
|
app.get('/viewer.html', function (req, res) {
|
||||||
|
res.render('viewer.html');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Error 404
|
||||||
|
app.use(function(req, res, next){
|
||||||
|
res.status(404);
|
||||||
|
res.render('error_404.html');
|
||||||
|
});
|
||||||
|
|
||||||
// Listen on port 3000
|
// Listen on port 3000
|
||||||
var port = process.env.PORT || 3000;
|
var port = process.env.PORT || 3000;
|
||||||
app.listen(port, null, function() {
|
app.listen(port, null, function() {
|
||||||
|
21
views/error_404.html
Normal file
21
views/error_404.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>StackEdit - Error 404</title>
|
||||||
|
<link rel="canonical" href="https://stackedit.io/">
|
||||||
|
<link rel="icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
||||||
|
<link rel="shortcut icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="stylesheet" type="text/css" href="res-min/themes/default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="text-center">
|
||||||
|
<br/>
|
||||||
|
<p>
|
||||||
|
<a href="https://stackedit.io"><img src="res-min/img/stackedit-promo.png" width="240" height="60" /></a>
|
||||||
|
</p>
|
||||||
|
<p>404 — Page not found</p>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
30
views/index.html
Normal file
30
views/index.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html manifest="cache.manifest">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>StackEdit - Markdown editor</title>
|
||||||
|
<link rel="canonical" href="https://stackedit.io/">
|
||||||
|
<link rel="icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
||||||
|
<link rel="shortcut icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
||||||
|
<meta name="description" content="StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.">
|
||||||
|
<meta name="author" content="Benoit Schweblin">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612"
|
||||||
|
/>
|
||||||
|
<script>
|
||||||
|
// Use ?debug to serve original JavaScript files instead of minified
|
||||||
|
var baseDir = 'res';
|
||||||
|
if (!/(\?|&)debug($|&)/.test(location.search)) {
|
||||||
|
baseDir += '-min';
|
||||||
|
}
|
||||||
|
var require = {
|
||||||
|
baseUrl: baseDir,
|
||||||
|
deps: ['main']
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<script src="res-min/require.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body></body>
|
||||||
|
|
||||||
|
</html>
|
30
views/viewer.html
Normal file
30
views/viewer.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html manifest="cache.manifest">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>StackEdit Viewer</title>
|
||||||
|
<link rel="canonical" href="https://stackedit.io/viewer">
|
||||||
|
<link rel="icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
||||||
|
<link rel="shortcut icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
||||||
|
<meta name="description" content="StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.">
|
||||||
|
<meta name="author" content="Benoit Schweblin">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612"
|
||||||
|
/>
|
||||||
|
<script>
|
||||||
|
// Use ?debug to serve original JavaScript files instead of minified
|
||||||
|
var baseDir = 'res';
|
||||||
|
if (!/(\?|&)debug($|&)/.test(location.search)) {
|
||||||
|
baseDir += '-min';
|
||||||
|
}
|
||||||
|
var require = {
|
||||||
|
baseUrl: baseDir,
|
||||||
|
deps: ['main']
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<script src="res-min/require.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="viewer"></body>
|
||||||
|
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user