Browse Source

api registration page added

master
Christian Mueller 12 years ago
parent
commit
5f7d9ab251
  1. 9
      API.md
  2. 2
      LANDING.md
  3. 1
      messages
  4. 1
      project.clj
  5. 8
      resources/public/js/main.js
  6. 23
      src/NoteHub/views/pages.clj

9
API.md

@ -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&noteID=<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.

2
LANDING.md

@ -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)

1
messages

@ -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

1
project.clj

@ -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"]]

8
resources/public/js/main.js

@ -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]);
} }
} }

23
src/NoteHub/views/pages.clj

@ -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")])))

Loading…
Cancel
Save