api registration page added
This commit is contained in:
@@ -1,20 +1,22 @@
|
|||||||
# NoteHub API
|
# NoteHub API
|
||||||
|
|
||||||
**Version 1.0, status: draft!**
|
**Version 1.0, status: released.**
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
The NoteHub API can only be used in combination with a __Publisher ID__ (PID) and __Publisher Secret Key__ (PSK), which can be requested [here](http://notehub.org/api/register). The PSK can be revoked at any moment in case of an API abuse.
|
The NoteHub API can only be used in combination with a __Publisher ID__ (PID) and __Publisher Secret Key__ (PSK), which can be requested [here](#registration). The PSK can be revoked at any moment in case of an API abuse.
|
||||||
|
|
||||||
A PID is a string chosen by the publisher and cannot be longer than 16 characters (e.g.: __notepadPlugin__). A PSK will be generated by the NoteHub API and can be a string of any length and content.
|
A PID is a string chosen by the publisher and cannot be longer than 16 characters (e.g.: __notepadPlugin__). A PSK will be generated by the NoteHub API and can be a string of any length and content.
|
||||||
|
|
||||||
All API requests must be issued with one special parameter `version` denoting the expected version of the API as a string, e.g. `1.0` (see examples below). You should always put the version of this document as a `version` parameter.
|
All API requests must be issued with one special parameter `version` denoting the expected version of the API as a string, e.g. `1.0` (see examples below). You should always put the version of this document as a `version` parameter.
|
||||||
|
|
||||||
|
## <a name="registration"></a>NoteHub API Access Request
|
||||||
|
To register as a publisher and gain access to NoteHub API, please [send](mailto:notehub@icloud.com?subject=NoteHub API Access Request&body=Please add [a] your contact information, [b] short usage explanation and [c] the URL of the resource or it's website.) an email with the following information about you: contact information, short description of what you want to do and an URL of the resource where the API will be used or its website.
|
||||||
## Note Retrieval
|
## Note Retrieval
|
||||||
|
|
||||||
A simple `GET` request to the following URL:
|
A simple `GET` request to the following URL:
|
||||||
|
|
||||||
http://notehub.org/api/note?version=1.0&title=<NOTE-ID>
|
http://notehub.org/api/note?version=1.0¬eID=<NOTE-ID>
|
||||||
|
|
||||||
will return a JSON object containing following self explaining fields: `note`, `longURL`, `shortURL`, `statistics`, `status`.
|
will return a JSON object containing following self explaining fields: `note`, `longURL`, `shortURL`, `statistics`, `status`.
|
||||||
|
|
||||||
@@ -113,3 +115,4 @@ Example:
|
|||||||
}
|
}
|
||||||
|
|
||||||
The status object serves the same purpose as in the case of note retrieval and creation.
|
The status object serves the same purpose as in the case of note retrieval and creation.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
## News
|
## News
|
||||||
|
|
||||||
|
- January 2014: NoteHub API v1.0 [introduced](/api).
|
||||||
- January 2014: NoteHub 2.0 released: new theme, more performance, extended markdown
|
- January 2014: NoteHub 2.0 released: new theme, more performance, extended markdown
|
||||||
- September 2013: Solarized color theme [added](https://github.com/chmllr/NoteHub/pull/4) (thanks Brandon!) ([Demo](http://notehub.org/2012/6/16/how-notehub-is-built?theme=solarized))
|
- September 2013: Solarized color theme [added](https://github.com/chmllr/NoteHub/pull/4) (thanks Brandon!) ([Demo](http://notehub.org/2012/6/16/how-notehub-is-built?theme=solarized))
|
||||||
|
|
||||||
@@ -9,6 +10,7 @@
|
|||||||
Send your feedback and comments directly to [@gravitydenier](http://twitter.com/gravitydenier) or open an [issue](https://github.com/chmllr/NoteHub/issues) on GitHub.
|
Send your feedback and comments directly to [@gravitydenier](http://twitter.com/gravitydenier) or open an [issue](https://github.com/chmllr/NoteHub/issues) on GitHub.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
- **API**: Integrate the publishing functionality into your editor using the official [NoteHub API](/api).
|
||||||
- **Color Themes**: specify the color scheme by appending the corresponding parameter to the URL:
|
- **Color Themes**: specify the color scheme by appending the corresponding parameter to the URL:
|
||||||
- [Dark](http://notehub.org/2012/6/16/how-notehub-is-built?theme=dark)
|
- [Dark](http://notehub.org/2012/6/16/how-notehub-is-built?theme=dark)
|
||||||
- [Solarized-Dark](http://notehub.org/2012/6/16/how-notehub-is-built?theme=solarized-dark)
|
- [Solarized-Dark](http://notehub.org/2012/6/16/how-notehub-is-built?theme=solarized-dark)
|
||||||
|
|||||||
@@ -23,3 +23,4 @@ stats = statistics
|
|||||||
export = export
|
export = export
|
||||||
edit = edit
|
edit = edit
|
||||||
short-url = short url
|
short-url = short url
|
||||||
|
api-registration = NoteHub API Access Request
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
:description "A free and anonymous hosting for markdown pages."
|
:description "A free and anonymous hosting for markdown pages."
|
||||||
:dependencies [[org.clojure/clojure "1.5.1"]
|
:dependencies [[org.clojure/clojure "1.5.1"]
|
||||||
[hiccup "1.0.0"]
|
[hiccup "1.0.0"]
|
||||||
|
[cheshire "5.3.1"]
|
||||||
[ring/ring-core "1.1.0"]
|
[ring/ring-core "1.1.0"]
|
||||||
[clj-redis "0.0.12"]
|
[clj-redis "0.0.12"]
|
||||||
[noir "1.3.0-beta1"]]
|
[noir "1.3.0-beta1"]]
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ var timerDelay = iosDetected ? 800 : 400;
|
|||||||
var show = function(elem) { elem.style.display = "block" }
|
var show = function(elem) { elem.style.display = "block" }
|
||||||
var $draft, $action, $preview, $password, $plain_password, $input_elems, $dashed_line, updatePreview;
|
var $draft, $action, $preview, $password, $plain_password, $input_elems, $dashed_line, updatePreview;
|
||||||
|
|
||||||
|
function md2html(input){
|
||||||
|
return marked(input);
|
||||||
|
}
|
||||||
|
|
||||||
function loadPage() {
|
function loadPage() {
|
||||||
$draft = $("draft");
|
$draft = $("draft");
|
||||||
$action = $("action");
|
$action = $("action");
|
||||||
@@ -31,7 +35,7 @@ function loadPage() {
|
|||||||
timer = setTimeout(function(){
|
timer = setTimeout(function(){
|
||||||
show($dashed_line);
|
show($dashed_line);
|
||||||
show($input_elems);
|
show($input_elems);
|
||||||
$preview.innerHTML = marked(content);
|
$preview.innerHTML = md2html(content);
|
||||||
}, delay);
|
}, delay);
|
||||||
};
|
};
|
||||||
if($action){
|
if($action){
|
||||||
@@ -47,7 +51,7 @@ function loadPage() {
|
|||||||
|
|
||||||
var mdDocs = document.getElementsByClassName("markdown");
|
var mdDocs = document.getElementsByClassName("markdown");
|
||||||
for(var i = 0; i < mdDocs.length; i++){
|
for(var i = 0; i < mdDocs.length; i++){
|
||||||
mdDocs[i].innerHTML = marked(mdDocs[i].innerHTML);
|
mdDocs[i].innerHTML = md2html(mdDocs[i].innerHTML);
|
||||||
show(mdDocs[i]);
|
show(mdDocs[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
(ns NoteHub.views.pages
|
(ns NoteHub.views.pages
|
||||||
(:require [hiccup.util :as util])
|
(:require [hiccup.util :as util]
|
||||||
|
[NoteHub.api :as api]
|
||||||
|
[cheshire.core :refer :all])
|
||||||
(:use
|
(:use
|
||||||
[NoteHub.storage] ; TODO: delete this
|
[NoteHub.storage] ; TODO: delete this
|
||||||
[NoteHub.api :only [build-key get-date]]
|
|
||||||
[NoteHub.settings]
|
[NoteHub.settings]
|
||||||
[NoteHub.views.common]
|
[NoteHub.views.common]
|
||||||
[clojure.string :rename {replace sreplace}
|
[clojure.string :rename {replace sreplace}
|
||||||
@@ -95,8 +96,8 @@
|
|||||||
|
|
||||||
; Update Note Page
|
; Update Note Page
|
||||||
(defpage "/:year/:month/:day/:title/edit" {:keys [year month day title]}
|
(defpage "/:year/:month/:day/:title/edit" {:keys [year month day title]}
|
||||||
|
(let [noteID (api/build-key [year month day] title)]
|
||||||
(input-form "/update-note" :update
|
(input-form "/update-note" :update
|
||||||
(let [noteID (build-key [year month day] title)]
|
|
||||||
(html (hidden-field :key noteID))
|
(html (hidden-field :key noteID))
|
||||||
(get-note noteID) :enter-passwd)))
|
(get-note noteID) :enter-passwd)))
|
||||||
|
|
||||||
@@ -112,16 +113,16 @@
|
|||||||
(wrap
|
(wrap
|
||||||
(create-short-url params)
|
(create-short-url params)
|
||||||
(select-keys params [:title :theme :header-font :text-font])
|
(select-keys params [:title :theme :header-font :text-font])
|
||||||
(get-note (build-key [year month day] title))))
|
(get-note (api/build-key [year month day] title))))
|
||||||
|
|
||||||
; Provides Markdown of the specified note
|
; Provides Markdown of the specified note
|
||||||
(defpage "/:year/:month/:day/:title/export" {:keys [year month day title]}
|
(defpage "/:year/:month/:day/:title/export" {:keys [year month day title]}
|
||||||
(when-let [md-text (get-note (build-key [year month day] title))]
|
(when-let [md-text (get-note (api/build-key [year month day] title))]
|
||||||
(content-type "text/plain; charset=utf-8" md-text)))
|
(content-type "text/plain; charset=utf-8" md-text)))
|
||||||
|
|
||||||
; Provides the number of views of the specified note
|
; Provides the number of views of the specified note
|
||||||
(defpage "/:year/:month/:day/:title/stats" {:keys [year month day title]}
|
(defpage "/:year/:month/:day/:title/stats" {:keys [year month day title]}
|
||||||
(when-let [views (get-note-views (build-key [year month day] title))]
|
(when-let [views (get-note-views (api/build-key [year month day] title))]
|
||||||
(layout (get-message :statistics)
|
(layout (get-message :statistics)
|
||||||
[:table#stats.helvetica.central-element
|
[:table#stats.helvetica.central-element
|
||||||
[:tr
|
[:tr
|
||||||
@@ -152,7 +153,7 @@
|
|||||||
; if yes, we compute the current date, extract a title string from the text,
|
; if yes, we compute the current date, extract a title string from the text,
|
||||||
; which will be a part of the url and look whether this title is free today;
|
; which will be a part of the url and look whether this title is free today;
|
||||||
; if not, append "-n", where "n" is the next free number
|
; if not, append "-n", where "n" is the next free number
|
||||||
(let [[year month day] (get-date)
|
(let [[year month day] (api/get-date)
|
||||||
untrimmed-line (filter #(or (= \- %) (Character/isLetterOrDigit %))
|
untrimmed-line (filter #(or (= \- %) (Character/isLetterOrDigit %))
|
||||||
(-> draft split-lines first (sreplace " " "-") lower-case))
|
(-> draft split-lines first (sreplace " " "-") lower-case))
|
||||||
trim (fn [s] (apply str (drop-while #(= \- %) s)))
|
trim (fn [s] (apply str (drop-while #(= \- %) s)))
|
||||||
@@ -161,11 +162,11 @@
|
|||||||
; TODO: replace to ccs/take when it gets fixed
|
; TODO: replace to ccs/take when it gets fixed
|
||||||
proposed-title (apply str (take max-length title-uncut))
|
proposed-title (apply str (take max-length title-uncut))
|
||||||
date [year month day]
|
date [year month day]
|
||||||
title (first (drop-while #(note-exists? (build-key date %))
|
title (first (drop-while #(note-exists? (api/build-key date %))
|
||||||
(cons proposed-title
|
(cons proposed-title
|
||||||
(map #(str proposed-title "-" (+ 2 %)) (range)))))]
|
(map #(str proposed-title "-" (+ 2 %)) (range)))))]
|
||||||
(do
|
(do
|
||||||
(add-note (build-key date title) draft password)
|
(add-note (api/build-key date title) draft password)
|
||||||
(redirect (url year month day title))))
|
(redirect (url year month day title))))
|
||||||
(response 400))))
|
(response 400))))
|
||||||
|
|
||||||
@@ -178,4 +179,8 @@
|
|||||||
long-url (if (empty? rest-params) core-url (util/url core-url rest-params))]
|
long-url (if (empty? rest-params) core-url (util/url core-url rest-params))]
|
||||||
(redirect long-url))))
|
(redirect long-url))))
|
||||||
|
|
||||||
|
; Here lives the API
|
||||||
|
|
||||||
|
(defpage "/api" args
|
||||||
|
(let [title (get-message :api-registration)]
|
||||||
|
(layout title [:article.markdown (slurp "API.md")])))
|
||||||
|
|||||||
Reference in New Issue
Block a user