Landing page (final)

This commit is contained in:
benweet 2014-08-28 00:04:27 +01:00
parent 85ecad60c1
commit 16c45a1795
14 changed files with 634 additions and 33 deletions

View File

@ -1,8 +1,10 @@
var express = require('express'); var express = require('express');
var app = express(); var app = express();
var compression = require('compression');
var serveStatic = require('serve-static');
// Configure ejs engine // Configure ejs engine
app.set('views', __dirname + '/../public'); app.set('views', __dirname + '/../views');
app.engine('html', require('ejs').renderFile); app.engine('html', require('ejs').renderFile);
// Force HTTPS on stackedit.io // Force HTTPS on stackedit.io
@ -15,28 +17,42 @@ app.all('*', function(req, res, next) {
}); });
// Use gzip compression // Use gzip compression
app.use(express.compress()); app.use(compression());
// Serve static resources // Serve static resources
app.use(express.static(__dirname + '/../public')); app.use(serveStatic(__dirname + '/../public'));
// Serve editor.html in /viewer
app.get('/editor', function (req, res) {
res.render('editor.html');
});
// Serve viewer.html in /viewer
app.get('/viewer', function (req, res) {
res.render('viewer.html');
});
app.post('/pdfExport', require('./pdf').export); app.post('/pdfExport', require('./pdf').export);
app.post('/sshPublish', require('./ssh').publish); app.post('/sshPublish', require('./ssh').publish);
app.post('/picasaImportImg', require('./picasa').importImg); app.post('/picasaImportImg', require('./picasa').importImg);
app.get('/downloadImport', require('./download').importPublic); app.get('/downloadImport', require('./download').importPublic);
// Error 404
app.use(function(req, res, next) { app.use(function(req, res, next) {
res.renderDebug = function(page) {
return res.render(page, {
cache: !req.query.hasOwnProperty('debug')
});
};
next();
});
// Serve landing.html in /
app.get('/', function(req, res) {
res.renderDebug('landing.html');
});
// Serve editor.html in /viewer
app.get('/editor', function(req, res) {
res.renderDebug('editor.html');
});
// Serve viewer.html in /viewer
app.get('/viewer', function(req, res) {
res.renderDebug('viewer.html');
});
// Error 404
app.use(function(req, res) {
res.status(404); res.status(404);
res.render('error_404.html'); res.render('error_404.html');
}); });

View File

@ -3,7 +3,7 @@
<head> <head>
<script type="text/javascript"> <script type="text/javascript">
var redirectUrl = location.href.substring(0, location.href.indexOf("html/gdrive-action.html")) + '/editor'; var redirectUrl = location.href.substring(0, location.href.indexOf("html/gdrive-action.html")) + 'editor';
var state = decodeURI((/state=(.+?)(&|$)/ var state = decodeURI((/state=(.+?)(&|$)/
.exec(location.search) || [ , null ])[1]); .exec(location.search) || [ , null ])[1]);
if(state) { if(state) {

View File

@ -2,7 +2,7 @@ Welcome to StackEdit!
=================== ===================
Hello, I'm your first Markdown document in **StackEdit**[^stackedit]. Don't delete me, I'm very helpful! I can be recovered anyway in the **Utils** tab of the <i class="icon-cog"></i> **Settings** dialog. Hey! I'm your first Markdown document in **StackEdit**[^stackedit]. Don't delete me, I'm very helpful! I can be recovered anyway in the **Utils** tab of the <i class="icon-cog"></i> **Settings** dialog.
---------- ----------
@ -159,14 +159,14 @@ Term 3
### Fenced code blocks ### Fenced code blocks
GitHub's fenced code blocks[^gfm] are also supported with **Prettify** syntax highlighting: GitHub's fenced code blocks are also supported with **Highlight.js** syntax highlighting:
``` ```
// Foo // Foo
var bar = 0; var bar = 0;
``` ```
> **Tip:** To use **Highlight.js** instead of **Prettify**, just configure the **Markdown Extra** extension in the <i class="icon-cog"></i> **Settings** dialog. > **Tip:** To use **Prettify** instead of **Highlight.js**, just configure the **Markdown Extra** extension in the <i class="icon-cog"></i> **Settings** dialog.
> **Note:** You can find more information: > **Note:** You can find more information:
@ -248,12 +248,10 @@ cond(no)->op
### Support StackEdit ### Support StackEdit
[![](https://cdn.monetizejs.com/resources/button-38.png)](https://monetizejs.com/authorize?client_id=ESTHdCYOi18iLhhO&summary=true) [![](https://cdn.monetizejs.com/resources/button-32.png)](https://monetizejs.com/authorize?client_id=ESTHdCYOi18iLhhO&summary=true)
[^stackedit]: [StackEdit](https://stackedit.io/) is a full-featured, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites. [^stackedit]: [StackEdit](https://stackedit.io/) is a full-featured, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.
[^gfm]: **GitHub Flavored Markdown** (GFM) is supported in StackEdit.
[1]: http://math.stackexchange.com/ [1]: http://math.stackexchange.com/
[2]: http://daringfireball.net/projects/markdown/syntax "Markdown" [2]: http://daringfireball.net/projects/markdown/syntax "Markdown"

View File

@ -28,7 +28,7 @@ define([
}); });
setTimeout(function() { setTimeout(function() {
tooltip.tooltip('hide').removeClass('info-tooltip').parent().removeClass('info-tooltip-container'); tooltip.tooltip('hide').removeClass('info-tooltip').parent().removeClass('info-tooltip-container');
}, 20000); }, 30000);
} }
var tour = new Tour({ var tour = new Tour({

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -279,7 +279,6 @@ table {
table th,table td { table th,table td {
padding: 8px; padding: 8px;
line-height: 20px; line-height: 20px;
text-align: left;
vertical-align: top; vertical-align: top;
border-top: 1px solid #dddddd; border-top: 1px solid #dddddd;
} }

View File

@ -503,18 +503,10 @@ a {
.button-open-discussion { .button-open-discussion {
&.some { &.some {
color: lighten(@alert-warning-text, 8%); color: lighten(@alert-warning-text, 8%) !important;
&:hover,
&:focus {
//color: @alert-warning-text;
}
} }
&.replied { &.replied {
color: lighten(@alert-danger-text, 8%); color: lighten(@alert-danger-text, 8%) !important;
&:hover,
&:focus {
//color: @alert-danger-text;
}
} }
} }
@ -1155,6 +1147,11 @@ a {
} }
} }
&.has-selection > .editor-margin .discussion.new {
display: inline-block;
color: fade(@tertiary-color, 25%);
}
&.font-monospaced * { &.font-monospaced * {
font-family: @font-family-monospace !important; font-family: @font-family-monospace !important;
line-height: @editor-line-weight !important; line-height: @editor-line-weight !important;

28
public/sitemap.xml Normal file
View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://stackedit.io/</loc>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://stackedit.io/editor</loc>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://stackedit.io/viewer</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://stackedit.io/privacy_policy.html</loc>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://stackedit.io/recovery.html</loc>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
</urlset>

31
views/editor.html Normal file
View File

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html<%- cache ? ' manifest="cache.manifest"' : '' %>>
<head>
<title>StackEdit Editor</title>
<link rel="canonical" href="https://stackedit.io/editor">
<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">
<link rel="shortcut icon" sizes="196x196" href="res-min/img/nice-highres.png">
<meta name="description" content="Full-featured, 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="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
<meta name="mobile-web-app-capable" content="yes">
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612">
<script>
// Use ?debug to serve original JavaScript files instead of minified
window.baseDir = 'res';
if (!/(\?|&)debug($|&)/.test(location.search)) {
window.baseDir += '-min';
}
window.require = {
baseUrl: window.baseDir,
deps: ['main']
};
</script>
<script src="res-min/require.js"></script>
</head>
<body></body>
</html>

22
views/error_404.html Normal file
View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<title>StackEdit - 404</title>
<link rel="canonical" href="https://stackedit.io/">
<link rel="icon" href="https://stackedit.io/res-min/img/stackedit-32.ico" type="image/x-icon">
<link rel="shortcut icon" href="https://stackedit.io/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="https://stackedit.io/res-min/themes/default.css">
</head>
<body class="text-center">
<br/>
<p>
<a href="https://stackedit.io"><img src="https://stackedit.io/res-min/img/logo.svg" width="320" /></a>
</p>
<p>404 &mdash; Page not found</p>
<p><a href="/recovery.html">Looking for StackEdit recovery?</a></p>
</body>
</html>

481
views/landing.html Normal file
View File

@ -0,0 +1,481 @@
<!DOCTYPE html>
<html<%- cache ? ' manifest="cache.manifest"' : '' %>>
<head>
<title>StackEdit In-browser 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="Full-featured, 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="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612">
<link rel="stylesheet" href="res-min/themes/default.css">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<style>
body {
font-size: 18px;
font-weight: 300;
}
.navbar-fixed {
position: fixed;
}
.content {
position: absolute;
width: 100%;
height: 100%;
}
.slide {
position: relative;
width: 100%;
height: 100%;
}
.footer {
position: absolute;
top: inherit;
bottom: 0;
height: 50px;
width: 100%;
padding: 5px
}
.slide, .footer, h1 {
text-align: center;
}
.footer .btn {
font-size: 28px;
padding: 0 11px;
line-height: 1;
}
.btn-info {
color: #777;
}
.centered {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
.logo {
width: 600px;
height: 160px;
}
.logo img {
width: 600px;
height: 135px;
}
.logo .subtitle {
position: absolute;
text-align: right;
color: #888;
top: 105px;
right: 10px;
font-size: 22px;
}
.transition {
-webkit-transition: all ease-in-out 1.5s;
transition: all ease-out 1.5s;
}
.transparent {
opacity: 0;
}
.scale {
-webkit-transform: scale(1.04);
-ms-transform: scale(1.04);
transform: scale(1.04);
}
.navbar .nav {
float: none;
}
.navbar .btn {
font-size: 18px;
line-height: 1.25;
}
.img {
margin: 20px auto;
display: block;
}
.social {
font-size: 26px;
margin: 0 16px 5px;
}
.social i::before {
margin-right: 10px;
margin-left: -5px;
}
.social a {
color: #555;
}
.social img {
width: 100px;
height: 25px;
}
.container {
margin-bottom: 40px;
}
.dark {
background-color: #aeaeae;
}
.inset-shadow {
-webkit-box-shadow: inset 0 4px 16px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 4px 16px rgba(0, 0, 0, 0.2);
}
.menu-img {
background-image: url(res-min/img/menu.png);
background-size: auto 240px;
background-repeat: no-repeat;
background-position: 30%;
height: 240px;
}
.markdown-img {
height: 150px;
}
hr {
margin: 1em 0;
}
</style>
<script>
function animate(elts) {
Array.prototype.slice.call(elts).forEach(function(elt) {
elt.className = elt.className.replace(/(?:^|\s)(transparent|scale)(?!\S)/g , '');
});
}
setTimeout(function() {
animate(document.querySelectorAll('.logo'));
}, 500);
setTimeout(function() {
animate(document.querySelectorAll('.logo .transparent, .footer .transparent'));
}, 1500);
$(function() {
function scrollTo(elt) {
return function(evt) {
evt.preventDefault();
$('html,body').animate({scrollTop: elt.offset().top}, 500);
};
}
$('#scrollToSlide2').click(scrollTo($('#slide2')));
})
</script>
</head>
<body>
<div class="content">
<div class="slide modal-body" id="slide1">
<div class="navbar navbar-default navbar-fixed">
<div class="navbar-inner">
<div class="nav">
<a class="btn btn-success" href="editor" title="Editor"><i class="icon-pencil"></i> Start writing
now!</a>
</div>
</div>
</div>
<div class="centered logo transition transparent scale">
<img src="res-min/img/logo.svg"/>
<div class="subtitle transition transparent scale">
In-browser markdown editor<br>
<div class="social">
<a href="https://twitter.com/stackedit" target="_blank"><i class="icon-twitter"></i></a>
<a href="https://github.com/benweet/stackedit" target="_blank"><i
class="icon-github-circled"></i></a>
<a href="https://monetizejs.com/authorize?client_id=ESTHdCYOi18iLhhO&summary=true"
target="_blank"><img src="res-min/img/button.svg"></a>
</div>
</div>
</div>
<div class="footer preview-panel modal-footer">
<div class="transition transparent">
<a class="btn btn-info" id="scrollToSlide2" href="#slide2"><i class="icon-angle-down"></i></a>
</div>
</div>
</div>
<div id="slide2" class="modal-header">
<div class="container">
<h1 id="unrivalled-writing-experience">Unrivalled writing experience.</h1>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<hr>
</div>
</div>
<div class="row">
<div class="col-md-7">
<br>
<br>
<img class="img modal-content" width="600" src="res-min/img/syntax-highlighting.gif">
</div>
<div class="col-md-4 col-md-offset-1">
<h2 id="rich-markdown-editor">Rich markdown editor</h2>
<p>StackEdits markdown syntax highlighting is unique. The refined text formatting of the editor
helps you
visualize the final rendering of your documents.</p>
<br>
<h2 id="wysiwyg-control-buttons">WYSIWYG controls</h2>
<p>StackEdit provides very handy formatting buttons and shortcuts, thanks to PageDown, the
WYSIWYG-style markdown editor used by Stack Overflow.</p>
</div>
</div>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<br>
<br>
<hr>
</div>
</div>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2 id="live-preview-with-scroll-sync" class="text-center">Live preview with Scroll Sync</h2>
<p>StackEdits Scroll Sync extension accurately binds the scrollbars of the editor panel and the
preview panel to ensure that you always keep an eye on the output while writing.</p>
</div>
</div>
<br>
<br>
<img class="img modal-content" width="600" src="res-min/img/live-preview.png">
<br>
<br>
<div class="row">
<div class="col-md-4 col-md-offset-1">
<h2 id="built-in-spell-checking">Built-in spell checking</h2>
<p>StackEdit uses browsers built-in spell-checker to perform efficient, multi-language
spell-checking and correction suggestions.</p>
</div>
<div class="col-md-4 col-md-offset-2">
<h2 id="fully-customizable">Fully customizable</h2>
<p>StackEdit has an infinite combinations of settings. Theme, layout, shortcuts can be
personalized. For the rest, StackEdit gives you the freedom to make your own extension…</p>
</div>
</div>
<br>
<br>
<br>
</div>
</div>
<div class="dark inset-shadow menu-img">
</div>
<div id="slide3" class="modal-footer modal-header">
<div class="container">
<h1 id="designed-for-web-writing">Designed for web writers.</h1>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<hr>
</div>
</div>
<br>
<br>
<br>
<div class="row">
<div class="col-md-7">
<img class="img modal-content" width="600" src="res-min/img/publish.png">
</div>
<div class="col-md-4 col-md-offset-1">
<br>
<h2 id="publish-straight-to-your-blog">Straight to your blog</h2>
<p>StackEdit can upload your documents directly to Blogger, GitHub, Tumblr, WordPress… You can
choose
whether to upload in markdown format, HTML, or to format the output using Underscore template
engine.</p>
</div>
</div>
<br>
<br>
<br>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<hr>
</div>
</div>
<br>
<br>
<br>
<div class="row">
<div class="col-md-4">
<h2 id="simultaneous-collaboration">Simultaneous collaboration</h2>
<p>Documents in StackEdit can be synchronized and shared through Google Drive and Dropbox. When two
collaborators are working on the same document at the same time, StackEdit takes care of merging
the
modifications.</p>
</div>
<div class="col-md-7 col-md-offset-1">
<img class="img" width="600" src="res-min/img/comments.png">
</div>
</div>
<div class="row">
<div class="col-md-7">
<img class="img" width="600" src="res-min/img/conflict.png">
</div>
<div class="col-md-4 col-md-offset-1">
<br>
<h2 id="review-comments">Review comments</h2>
<p>StackEdit allows you to insert inline comments and embed collaborator discussions in your
documents, much
like Microsoft Word or Google Docs.</p>
</div>
</div>
<br>
<br>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<hr>
</div>
</div>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2 id="write-offline" class="text-center">Write offline!</h2>
<p>Even when you travel, StackEdit is still accessible and lets you write offline just like any
desktop application. Now you have no excuse!</p>
</div>
</div>
<br>
<br>
<br>
</div>
</div>
<div class="dark inset-shadow markdown-img">
</div>
<div class="modal-body">
<img class="background-img img" width="500" src="res-min/img/toc.gif">
</div>
<div class="modal-footer modal-header">
<div class="container">
<h1 id="extended-markdown-support">Extended markdown support.</h1>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<hr>
</div>
</div>
<br>
<div class="row">
<div class="col-md-5">
<h2 id="github-flavored-markdown">GitHub Flavored Markdown</h2>
<p>StackEdit supports different markdown flavors such as Markdown Extra and GFM. Each
markdown feature can be enabled or disabled at your convenience.</p>
<br>
<h2 id="latex-mathematical-expressions">LaTeX mathematical expressions</h2>
<p>StackEdit integrates MathJax to render mathematics from LaTeX expressions inside your markdown
document,
as you would do on Stack Exchange.</p>
<br>
<h2 id="uml-diagrams">UML diagrams</h2>
<p>StackEdit enables you to write sequence diagrams and flow charts using a simple syntax.</p>
</div>
<div class="col-md-6 col-md-offset-1">
<br>
<br>
<br>
<br>
<br>
<img class="img" width="410" src="res-min/img/code-block.png">
<br>
<br>
<br>
<br>
<br>
<img class="img" width="330" src="res-min/img/math.png">
<br>
<br>
<br>
<br>
<br>
<img class="img" width="220" src="res-min/img/diagram.png">
</div>
</div>
<br>
<br>
<br>
<div class="row">
<div class="col-md-4 col-md-offset-4">
<hr>
</div>
</div>
<div class="text-center">
<div class="social">
<a href="https://twitter.com/stackedit" target="_blank"><i class="icon-twitter"></i></a>
<a href="https://github.com/benweet/stackedit" target="_blank"><i
class="icon-github-circled"></i></a>
<a href="https://monetizejs.com/authorize?client_id=ESTHdCYOi18iLhhO&summary=true"
target="_blank"><img src="res-min/img/button.svg"></a>
</div>
Copyright 2013-2014 <a href="https://twitter.com/benweet" target="_blank">Benoit Schweblin</a><br>
Licensed under an <a target="_blank" href="http://www.apache.org/licenses/LICENSE-2.0">Apache
License</a><br>
<a href="privacy_policy.html" target="_blank">Privacy Policy</a><br>
</div>
</div>
</div>
</div>
</body>
</html>

29
views/viewer.html Normal file
View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html<%- cache ? ' 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="Full-featured, 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="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612">
<script>
// Use ?debug to serve original JavaScript files instead of minified
window.baseDir = 'res';
if (!/(\?|&)debug($|&)/.test(location.search)) {
window.baseDir += '-min';
}
window.require = {
baseUrl: window.baseDir,
deps: ['main']
};
</script>
<script src="res-min/require.js"></script>
</head>
<body class="viewer"></body>
</html>