New path for OAuth receivers

This commit is contained in:
benweet 2013-10-08 01:34:15 +01:00
parent 4b8a7c3b99
commit 72bd6c80cd
13 changed files with 57 additions and 262 deletions

View File

@ -1,226 +0,0 @@
Welcome to StackEdit! {#welcome}
=====================
Hello, I am your first Markdown document within **StackEdit**[^stackedit]. Don't delete me, I can be helpful. I can be recovered anyway in the `Utils` tab of the <i class="icon-cog"></i> `Settings` dialog.
----------
Documents
---------
**StackEdit** stores your documents in the browser local storage, which means all your documents are automatically saved locally and are accessible offline.
> **NOTE:** This also means that your documents are not shared between different browsers or computers and that clearing your browser's data may **delete all of them!**
#### <i class="icon-file"></i> Create a document
You can create a new document by clicking the <i class="icon-file"></i> button in the navigation bar. This will switch from the current document to the new one.
#### <i class="icon-folder-open"></i> Switch to another document
You can list all your local documents and switch from one to another by clicking the <i class="icon-folder-open"></i> button in the navigation bar.
#### <i class="icon-pencil"></i> Rename a document
You can rename the current document by clicking the document title in the navigation bar.
#### <i class="icon-trash"></i> Delete a document
You can delete the current document by clicking the <i class="icon-trash"></i> button in the navigation bar.
#### <i class="icon-hdd"></i> Save a document
You can save the current document to a file using the <i class="icon-hdd"></i> `Save as...` sub-menu.
> **NOTE:** See [<i class="icon-share"></i> Publish a document](#publish-a-document) section for a description of the different outputs.
----------
Synchronization
---------------
**StackEdit** can be combined with **Google Drive** and **Dropbox** to have your documents centralized in the *Cloud*. The synchronization mechanism will take care of uploading your modifications or downloading the latest version of your documents.
> **NOTE:** Full access to **Google Drive** or **Dropbox** is required to be able to import any document in StackEdit. Imported documents are downloaded in your browser and are not transmitted to a server.
#### <i class="icon-download"></i> Import a document
You can import a document from the *Cloud* by going to the <i class="icon-provider-gdrive"></i> `Google Drive` or the <i class="icon-provider-dropbox"></i> `Dropbox` sub-menu and by clicking `Import from...`. Once imported, your document will be automatically synchronized with the **Google Drive** / **Dropbox** file.
#### <i class="icon-upload"></i> Export a document
You can export any document by going to the <i class="icon-provider-gdrive"></i> `Google Drive` or the <i class="icon-provider-dropbox"></i> `Dropbox` sub-menu and by clicking `Export to...`. Even if your document is already synchronized with **Google Drive** or **Dropbox**, you can export it to a another location. **StackEdit** can synchronize one document with multiple locations.
#### <i class="icon-refresh"></i> Synchronize a document
Once your document is linked to a **Google Drive** or a **Dropbox** file, **StackEdit** will periodically (every 3 minutes) synchronize it by downloading/uploading any modification. Any conflict will be detected, and a local copy of your document will be created as a backup if necessary.
If you just have modified your document and you want to force the synchronization, click the <i class="icon-refresh"></i> button in the navigation bar.
> **NOTE:** The <i class="icon-refresh"></i> button is disabled when:
>
> - you are offline,
> - or the document is not synchronized with any location,
> - or the document has not been modified since the last synchronization.
#### <i class="icon-refresh"></i> Manage document synchronization
Since one document can be synchronized with multiple locations, you can list and manage synchronized locations by clicking <i class="icon-refresh"></i> `Manage synchronization` in the <i class="icon-stackedit"></i> menu. This will open a dialog box allowing you to add or remove synchronization links that are associated to your document.
> **NOTE:** If you delete the file from **Google Drive** or from **Dropbox**, the document will no longer be synchronized with that location.
----------
Publication
-----------
Once you are happy with your document, you can publish it on different websites directly from **StackEdit**. As for now, **StackEdit** can publish on **Blogger**, **Dropbox**, **Gist**, **GitHub**, **Google Drive**, **Tumblr**, **WordPress** and on any SSH server.
#### <i class="icon-share"></i> Publish a document
You can publish your document by going to the <i class="icon-share"></i> `Publish on` sub-menu and by choosing a website. In the dialog box, you can choose the publication format:
- Markdown, to publish the Markdown text on a website that can interpret it (**GitHub** for instance),
- HTML, to publish the document converted into HTML (on a blog for instance),
- Template, to have a full control of the output.
> **NOTE:** The default template is a simple webpage wrapping your document in HTML format. You can customize it in the `Publish` tab of the <i class="icon-cog"></i> `Settings` dialog.
#### <i class="icon-share"></i> Update a publication
After publishing, **StackEdit** will keep your document linked to that publish location so that you can update it easily. Once you have modified your document and you want to update your publication, click on the <i class="icon-share"></i> button in the navigation bar.
> **NOTE:** The <i class="icon-share"></i> button is disabled when:
>
> - you are offline,
> - or the document has not been published anywhere.
#### <i class="icon-share"></i> Manage document publication
Since one document can be published on multiple locations, you can list and manage publish locations by clicking <i class="icon-share"></i> `Manage publication` in the <i class="icon-stackedit"></i> menu. This will open a dialog box allowing you to remove publication links that are associated to your document.
> **NOTE:** In some cases, if you remove the file from the website or the post from the blog, the document will no longer be published on that location.
----------
Markdown Extra
--------------
**StackEdit** supports **Markdown Extra**, which extends **Markdown** syntax with some nice features.
### Tables
**Markdown Extra** has a special syntax for tables:
Item | Value
--------- | -----
Computer | \$1600
Phone | \$12
Pipe | \$1
You can specify column alignment with one or two colons:
| Item | Value | Qty |
| :-------- | ------:| :--: |
| Computer | \$1600 | 5 |
| Phone | \$12 | 12 |
| Pipe | \$1 | 234 |
### Definition Lists
**Markdown Extra** has a special syntax for definition lists too:
Term 1
Term 2
: Definition A
: Definition B
Term 3
: Definition C
: Definition D
> part of definition D
### Fenced code blocks
**GitHub**'s fenced code blocks are also supported with **Prettify** syntax highlighting:
```
// Foo
var bar = 0;
```
> **NOTE:** To use **Highlight.js** instead of **Prettify**, just configure the `Markdown Extra` extension in the <i class="icon-cog"></i> `Settings` dialog.
### Special Attributes
With **Markdown Extra**, you can specify `class` and `id` attributes on headers and fenced code blocks just like this:
##### Header example {#my-header}
``` {#my-id .my-class}
var foo = bar;
```
Then you can create cross-references like this: [beginning of the document](#welcome).
### Footnotes
You can create footnotes like this[^footnote].
[^footnote]: Here is the *text* of the **footnote**.
### Table of contents
You can insert a table of contents using the marker `[TOC]`:
[TOC]
### MathJax
You can render *LaTeX* mathematical expressions using **MathJax**, as on [math.stackexchange.com][1]:
The *Gamma function* satisfying $\Gamma(n) = (n-1)!\quad\forall
n\in\mathbb N$ is via through the Euler integral
$$
\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.
$$
> **NOTE:** When exporting, make sure you include MathJax to render mathematical expression correctly. Your page/template should include something like:
```
<script type="text/javascript" src="http://benweet.github.io/stackedit/lib/MathJax/MathJax.js?config=TeX-AMS_HTML"></script>
```
> **NOTE:** You can find more information:
>
> - about **Markdown** syntax [here][2],
> - about **Markdown Extra** extension [here][3],
> - about **Prettify** syntax highlighting [here][4].
> - about **Highlight.js** syntax highlighting [here][5].
[^stackedit]: StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.
[1]: http://math.stackexchange.com/
[2]: http://daringfireball.net/projects/markdown/syntax "Markdown"
[3]: https://github.com/jmcmanus/pagedown-extra "Pagedown Extra"
[4]: https://code.google.com/p/google-code-prettify/
[5]: http://softwaremaniacs.org/soft/highlight/en/

View File

@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<script src="lib/dropbox.min.js"></script> <script src="../lib/dropbox.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
Dropbox.Drivers.Popup.oauthReceiver(); Dropbox.AuthDriver.Popup.oauthReceiver();
</script> </script>
</head> </head>
<body> <body>

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("gdrive-action.html")); var redirectUrl = location.href.substring(0, location.href.indexOf("html/gdrive-action.html"));
var state = decodeURI((/state=(.+?)(&|$)/ var state = decodeURI((/state=(.+?)(&|$)/
.exec(location.search) || [ , null ])[1]); .exec(location.search) || [ , null ])[1]);
if(state) { if(state) {

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
var VERSION = "2.1.7"; var VERSION = "2.1.7";
var MAIN_URL = "http://benweet.github.io/stackedit/"; var MAIN_URL = "https://stackedit.io/";
var GOOGLE_ANALYTICS_ACCOUNT_ID = "UA-39556145-1"; var GOOGLE_ANALYTICS_ACCOUNT_ID = "UA-39556145-1";
var GOOGLE_API_KEY = "AIzaSyAeCU8CGcSkn0z9js6iocHuPBX4f_mMWkw"; var GOOGLE_API_KEY = "AIzaSyAeCU8CGcSkn0z9js6iocHuPBX4f_mMWkw";
var GOOGLE_DRIVE_APP_ID = "241271498917"; var GOOGLE_DRIVE_APP_ID = "241271498917";
@ -21,11 +21,9 @@ var IMPORT_FILE_MAX_CONTENT_SIZE = 100000;
var IMPORT_IMG_MAX_CONTENT_SIZE = 10000000; var IMPORT_IMG_MAX_CONTENT_SIZE = 10000000;
var TEMPORARY_FILE_INDEX = "file.tempIndex"; var TEMPORARY_FILE_INDEX = "file.tempIndex";
var WELCOME_DOCUMENT_TITLE = "Welcome document"; var WELCOME_DOCUMENT_TITLE = "Welcome document";
var DOWNLOAD_PROXY_URL = "http://stackedit-download-proxy.herokuapp.com/"; var DOWNLOAD_PROXY_URL = "https://stackedit-download-proxy.herokuapp.com/";
var PICASA_PROXY_URL = "http://stackedit-picasa-proxy.herokuapp.com/"; var PICASA_PROXY_URL = "https://stackedit-picasa-proxy.herokuapp.com/";
var WORDPRESS_CLIENT_ID = '3185'; var SSH_PROXY_URL = "https://stackedit-ssh-proxy.herokuapp.com/";
var WORDPRESS_PROXY_URL = "http://stackedit-wordpress-proxy.herokuapp.com/";
var SSH_PROXY_URL = "http://stackedit-ssh-proxy.herokuapp.com/";
var HTMLTOPDF_URL = "http://benweet.insomnia247.nl/stackedit-htmltopdf/"; var HTMLTOPDF_URL = "http://benweet.insomnia247.nl/stackedit-htmltopdf/";
// Use by Google's client.js // Use by Google's client.js
@ -37,26 +35,38 @@ function runDelayedFunction() {
} }
// Site dependent // Site dependent
var BASE_URL = "http://localhost/stackedit/"; var BASE_URL = "http://localhost/";
var GOOGLE_CLIENT_ID = '241271498917-lev37kef013q85avc91am1gccg5g8lrb.apps.googleusercontent.com'; var GOOGLE_CLIENT_ID = '241271498917-lev37kef013q85avc91am1gccg5g8lrb.apps.googleusercontent.com';
var GITHUB_CLIENT_ID = 'e47fef6055344579799d'; var GITHUB_CLIENT_ID = 'e47fef6055344579799d';
var GATEKEEPER_URL = "http://stackedit-gatekeeper-localhost.herokuapp.com/"; var GATEKEEPER_URL = "https://stackedit-gatekeeper-localhost.herokuapp.com/";
var TUMBLR_PROXY_URL = "http://stackedit-tumblr-proxy-local.herokuapp.com/"; var TUMBLR_PROXY_URL = "https://stackedit-tumblr-proxy-local.herokuapp.com/";
var WORDPRESS_CLIENT_ID = '23361';
var WORDPRESS_PROXY_URL = "https://stackedit-io-wordpress-proxy.herokuapp.com/";
if(location.hostname.indexOf("stackedit.io") === 0) {
BASE_URL = MAIN_URL;
GOOGLE_CLIENT_ID = '241271498917-t4t7d07qis7oc0ahaskbif3ft6tk63cd.apps.googleusercontent.com';
GITHUB_CLIENT_ID = '710fc67886ab1ae8fee6';
GATEKEEPER_URL = "https://stackedit-io-gatekeeper.herokuapp.com/";
TUMBLR_PROXY_URL = "https://stackedit-tumblr-proxy.herokuapp.com/";
}
if(location.hostname.indexOf("benweet.github.io") === 0) { if(location.hostname.indexOf("benweet.github.io") === 0) {
BASE_URL = MAIN_URL; BASE_URL = 'http://benweet.github.io/stackedit/';
GOOGLE_CLIENT_ID = '241271498917-jpto9lls9fqnem1e4h6ppds9uob8rpvu.apps.googleusercontent.com'; GOOGLE_CLIENT_ID = '241271498917-jpto9lls9fqnem1e4h6ppds9uob8rpvu.apps.googleusercontent.com';
GITHUB_CLIENT_ID = 'fa0d09514da8377ee32e'; GITHUB_CLIENT_ID = 'fa0d09514da8377ee32e';
GATEKEEPER_URL = "http://stackedit-gatekeeper.herokuapp.com/"; GATEKEEPER_URL = "https://stackedit-gatekeeper.herokuapp.com/";
TUMBLR_PROXY_URL = "http://stackedit-tumblr-proxy.herokuapp.com/"; TUMBLR_PROXY_URL = "https://stackedit-tumblr-proxy.herokuapp.com/";
WORDPRESS_CLIENT_ID = '3185';
WORDPRESS_PROXY_URL = "https://stackedit-wordpress-proxy.herokuapp.com/";
} }
if(location.hostname.indexOf("benweet.insomnia247.nl") === 0) { if(location.hostname.indexOf("benweet.insomnia247.nl") === 0) {
BASE_URL = "http://benweet.insomnia247.nl/stackedit/"; BASE_URL = "http://benweet.insomnia247.nl/stackedit/";
GOOGLE_CLIENT_ID = '241271498917-52hae7a08hv7ltenv7km8h7lghno9sk3.apps.googleusercontent.com'; GOOGLE_CLIENT_ID = '241271498917-52hae7a08hv7ltenv7km8h7lghno9sk3.apps.googleusercontent.com';
GITHUB_CLIENT_ID = 'd2943d6074b2d9c4a830'; GITHUB_CLIENT_ID = 'd2943d6074b2d9c4a830';
GATEKEEPER_URL = "http://stackedit-gatekeeper-insomnia.herokuapp.com/"; GATEKEEPER_URL = "https://stackedit-gatekeeper-insomnia.herokuapp.com/";
TUMBLR_PROXY_URL = "http://stackedit-tumblr-proxy-beta.herokuapp.com/"; TUMBLR_PROXY_URL = "https://stackedit-tumblr-proxy-beta.herokuapp.com/";
} }
var THEME_LIST = { var THEME_LIST = {

View File

@ -9,21 +9,21 @@ define([
// buttonPublish.settingsBlock = '<p>Adds a "Publish document" button in the // buttonPublish.settingsBlock = '<p>Adds a "Publish document" button in the
// navigation bar.</p>'; // navigation bar.</p>';
var button = undefined; var $button = undefined;
var currentFileDesc = undefined; var currentFileDesc = undefined;
var publishRunning = false; var publishRunning = false;
var hasPublications = false; var hasPublications = false;
var isOffline = false; var isOffline = false;
// Enable/disable the button // Enable/disable the button
function updateButtonState() { function updateButtonState() {
if(button === undefined) { if($button === undefined) {
return; return;
} }
if(publishRunning === true || hasPublications === false || isOffline === true) { if(publishRunning === true || hasPublications === false || isOffline === true) {
button.addClass("disabled"); $button.addClass("disabled");
} }
else { else {
button.removeClass("disabled"); $button.removeClass("disabled");
} }
} }
@ -39,8 +39,7 @@ define([
}, crel('i', { }, crel('i', {
class: 'icon-share' class: 'icon-share'
})); }));
var $button = $(button); $button = $(button).click(function() {
$button.click(function() {
if(!$button.hasClass("disabled")) { if(!$button.hasClass("disabled")) {
publisher.publish(); publisher.publish();
} }

View File

@ -39,8 +39,8 @@ define([
key: DROPBOX_APP_KEY, key: DROPBOX_APP_KEY,
secret: DROPBOX_APP_SECRET secret: DROPBOX_APP_SECRET
}); });
client.authDriver(new Dropbox.Drivers.Popup({ client.authDriver(new Dropbox.AuthDriver.Popup({
receiverUrl: BASE_URL + "dropbox-oauth-receiver.html", receiverUrl: BASE_URL + "html/dropbox-oauth-receiver.html",
rememberUser: true rememberUser: true
})); }));
task.chain(); task.chain();
@ -74,11 +74,14 @@ define([
// credentials // credentials
task.timeout = ASYNC_TASK_LONG_TIMEOUT; task.timeout = ASYNC_TASK_LONG_TIMEOUT;
} }
else {
client.reset();
}
client.authenticate({ client.authenticate({
interactive: !immediate interactive: !immediate
}, function(error, client) { }, function(error, client) {
// Success // Success
if(client.authState === Dropbox.Client.DONE) { if(client.isAuthenticated() === true) {
authenticated = true; authenticated = true;
task.chain(); task.chain();
return; return;

View File

@ -77,7 +77,7 @@ define([
function getCode() { function getCode() {
eventMgr.onMessage("Please make sure the Github authorization popup is not blocked by your browser."); eventMgr.onMessage("Please make sure the Github authorization popup is not blocked by your browser.");
localStorage.removeItem("githubCode"); localStorage.removeItem("githubCode");
authWindow = utils.popupWindow('github-oauth-client.html?client_id=' + GITHUB_CLIENT_ID, 'stackedit-github-oauth', 960, 600); authWindow = utils.popupWindow('html/github-oauth-client.html?client_id=' + GITHUB_CLIENT_ID, 'stackedit-github-oauth', 960, 600);
authWindow.focus(); authWindow.focus();
intervalId = setInterval(function() { intervalId = setInterval(function() {
if(authWindow.closed === true) { if(authWindow.closed === true) {

View File

@ -65,7 +65,7 @@ define([
function getVerifier() { function getVerifier() {
eventMgr.onMessage("Please make sure the Tumblr authorization popup is not blocked by your browser."); eventMgr.onMessage("Please make sure the Tumblr authorization popup is not blocked by your browser.");
localStorage.removeItem("tumblrVerifier"); localStorage.removeItem("tumblrVerifier");
authWindow = utils.popupWindow('tumblr-oauth-client.html?oauth_token=' + oauth_object.oauth_token, 'stackedit-tumblr-oauth', 800, 600); authWindow = utils.popupWindow('html/tumblr-oauth-client.html?oauth_token=' + oauth_object.oauth_token, 'stackedit-tumblr-oauth', 800, 600);
authWindow.focus(); authWindow.focus();
intervalId = setInterval(function() { intervalId = setInterval(function() {
if(authWindow.closed === true) { if(authWindow.closed === true) {

View File

@ -49,7 +49,7 @@ define([
function getCode() { function getCode() {
eventMgr.onMessage("Please make sure the Wordpress authorization popup is not blocked by your browser."); eventMgr.onMessage("Please make sure the Wordpress authorization popup is not blocked by your browser.");
localStorage.removeItem("wordpressCode"); localStorage.removeItem("wordpressCode");
authWindow = utils.popupWindow('wordpress-oauth-client.html?client_id=' + WORDPRESS_CLIENT_ID, 'stackedit-wordpress-oauth', 960, 600); authWindow = utils.popupWindow('html/wordpress-oauth-client.html?client_id=' + WORDPRESS_CLIENT_ID, 'stackedit-wordpress-oauth', 960, 600);
authWindow.focus(); authWindow.focus();
intervalId = setInterval(function() { intervalId = setInterval(function() {
if(authWindow.closed === true) { if(authWindow.closed === true) {

View File

@ -820,7 +820,11 @@
<p><b>NOTE:</b> You can use a <p><b>NOTE:</b> You can use a
<a href="http://jekyllrb.com/docs/frontmatter/" <a href="http://jekyllrb.com/docs/frontmatter/"
target="_blank">YAML front matter</a> to specify the title and the tags/labels of your publication.</p> target="_blank">YAML front matter</a> to specify the title and the tags/labels of your publication.</p>
<p><b>Interpreted variables:</b> <i>title, categories/tags</i></p> <p><b>Interpreted variables:</b></p>
<ul>
<li>title</li>
<li>categories/tags</li>
</ul>
</blockquote> </blockquote>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
@ -967,7 +971,9 @@
<label> <label>
<input type="checkbox" id="input-settings-gdrive-full-access" /> <input type="checkbox" id="input-settings-gdrive-full-access" />
Allow StackEdit to open any document in Google Drive Allow StackEdit to open any document in Google Drive
</label> </label> <span class="help-block">You need to revoke any existing token in
<a href="https://www.google.com/settings/dashboard" target="_blank">Google Dashboard</a>
for this change to take effect.</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -172,6 +172,7 @@ define([
if(_.has(localStorage, 'settings')) { if(_.has(localStorage, 'settings')) {
var settings = JSON.parse(localStorage.settings); var settings = JSON.parse(localStorage.settings);
settings.extensionSettings && settings.extensionSettings.markdownExtra && settings.extensionSettings.markdownExtra.extensions && settings.extensionSettings.markdownExtra.extensions.push('smartypants'); settings.extensionSettings && settings.extensionSettings.markdownExtra && settings.extensionSettings.markdownExtra.extensions && settings.extensionSettings.markdownExtra.extensions.push('smartypants');
settings.sshProxy == 'http://stackedit-ssh-proxy.herokuapp.com/' && (settings.sshProxy = 'https://stackedit-ssh-proxy.herokuapp.com/');
localStorage.settings = JSON.stringify(settings); localStorage.settings = JSON.stringify(settings);
} }
version = "v11"; version = "v11";

View File

@ -1031,6 +1031,10 @@ ul,ol {
color: @primary-color-lighter; color: @primary-color-lighter;
} }
.ace_constant {
color: @primary-color-light;
}
.ace_marker-layer .misspelled { .ace_marker-layer .misspelled {
position: absolute; position: absolute;
z-index: -2; z-index: -2;