Skip to content

Latest commit

 

History

History
107 lines (91 loc) · 3.69 KB

standalone.md

File metadata and controls

107 lines (91 loc) · 3.69 KB

Portal Standalone

Portal Standalone

To use Portal without any particular runtime, try the standalone version of Portal. It can be installed as a chrome pwa which will provide a dock launcher for easy access.

Paste Clipboard Data

To quickly paste some edn, json or transit into Portal, try the ctrl | cmd + v paste command. Upon pasting portal will prompt for the format type in order to parse the data.

Drag + Drop Files

If the data you want to view in Portal is in a file, it can be easily dragged and dropped over the UI.

Preloading Data

To open the UI with pre-loaded data, you can pass the content-url and content-type via query params. For example this link pulls some edn data via a GitHub Gist with the content-type=application/edn, this can be very handy to share data.

The supported content-types:

  • application/edn
  • application/json
  • application/transit+json
  • text/plain

Share Command

If you want to automate the sharing of data from your runtime, you can create a Portal command that automatically uploads and generates a similar link as above. One such command could look like:

(ns portal.share
  (:require [clojure.pprint :as pp]
            [clojure.string :as str]
            [org.httpkit.client :as http]
            [portal.api :as p]
            [portal.runtime.json :as json]))
​
(defn- pprint [value]
  (binding [*print-meta* true]
    (with-out-str (pp/pprint value))))
​
(defn- create-gist [content]
  (-> @(http/post
        "https://api.github.com/gists"
        {:basic-auth [(System/getenv "GIT_USERNAME")
                      (System/getenv "GIT_PASSWORD")]
         :headers    {"Accept" "application/vnd.github.v3+json"}
         :body       (json/write
                      {:public      false
                       :description "Portal Share"
                       :files       {"data.clj" {:content content}}})})
      :body
      json/read
      (get-in [:files :data.clj :raw_url])))
​
(defn- ->query-string [m]
  (str/join "&" (for [[k v] m] (str (name k) "=" v))))
​
(defn- create-url [gist-raw-url]
  (str "https://djblue.github.io/portal/?"
       (->query-string {:content-url gist-raw-url
                        :content-type "application/edn"})))
​
(defn- shorten-url [url]
  (-> @(http/post
        "https://url.api.stdlib.com/[email protected]/create/"
        {:headers {"Content-Type" "application/json"}
         :body    (json/write {:url url :ttl 86400})})
      :body
      json/read
      :link_url))
​
(defn share
  "Create a shareable portal link for the supplied value."
  [value]
  (-> value pprint create-gist create-url shorten-url))
​
(p/register! #'share)