From 4ac587df0792d128bbeadfe4fdc84ca146fd4068 Mon Sep 17 00:00:00 2001 From: Evan Martin Date: Thu, 4 Nov 2010 23:05:20 -0700 Subject: [PATCH] commit js client sketch --- clients/js/README | 6 +++++ clients/js/camel.jpg | Bin 0 -> 19234 bytes clients/js/client.js | 38 ++++++++++++++++++++++++++ clients/js/index.html | 61 ++++++++++++++++++++++++++++++++++++++++++ clients/js/style.css | 27 +++++++++++++++++++ 5 files changed, 132 insertions(+) create mode 100644 clients/js/README create mode 100644 clients/js/camel.jpg create mode 100644 clients/js/client.js create mode 100644 clients/js/index.html create mode 100644 clients/js/style.css diff --git a/clients/js/README b/clients/js/README new file mode 100644 index 000000000..b4792a81b --- /dev/null +++ b/clients/js/README @@ -0,0 +1,6 @@ +This is a sketch of a client written in JavaScript. + +The idea is twofold: +1) any working server can drop in this directory to get a blobstore + browser UI, while simultaneously testing their API implementation +2) provide an easy library to plug into node.js if needed diff --git a/clients/js/camel.jpg b/clients/js/camel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34a46f4033848f8d1afb603cbaf16b46c8415ad8 GIT binary patch literal 19234 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 bU=#WMXp@B8dC02e0C2!BuS`(T(?9>&@!Wyp literal 0 HcmV?d00001 diff --git a/clients/js/client.js b/clients/js/client.js new file mode 100644 index 000000000..aff5b065d --- /dev/null +++ b/clients/js/client.js @@ -0,0 +1,38 @@ +var Camli = { + +BlobStore: function() { +} + +}; + +Camli.BlobStore.prototype.blobURL = function(ref) { + return '/camli/' + ref; +}; + +Camli.BlobStore.prototype.xhr = function(url, cb) { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + cb(xhr.responseText); + } + } + // XXX handle error + }; + xhr.open('GET', url, true); + xhr.send(null); +}; + +Camli.BlobStore.prototype.xhrJSON = function(url, cb) { + this.xhr('/camli/enumerate-blobs', function(data) { + cb(JSON.parse(data)); + }); +}; + +Camli.BlobStore.prototype.enumerate = function(cb) { + this.xhrJSON('/camli/enumerate-blobs', cb); +}; + +Camli.BlobStore.prototype.getBlob = function(ref, cb) { + this.xhr(this.blobURL(ref), cb); +}; diff --git a/clients/js/index.html b/clients/js/index.html new file mode 100644 index 000000000..7315a986d --- /dev/null +++ b/clients/js/index.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + + +
refsize
+ + + + + diff --git a/clients/js/style.css b/clients/js/style.css new file mode 100644 index 000000000..1031c002d --- /dev/null +++ b/clients/js/style.css @@ -0,0 +1,27 @@ +body { + font-family: sans-serif; + font-size: 0.8em; +} +#logo { + background: url(camel.jpg); + width: 320px; + height: 302px; + color: white; + font-size: 400%; + text-align: center; + vertical-align: bottom; + text-shadow: 0 0 10px black; +} +#bloblist { + border: solid 1px gray; +} +#bloblist th { + background: #eee; + padding: 2px 4px; +} +#bloblist td { + padding-right: 1ex; +} +.blobref { + font-family: WebKitWorkaround, monospace; +}