From 0786f1cf3ff29bbe8ffd2716cbd786969f7b6b87 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Sat, 24 Nov 2012 03:43:11 +0100 Subject: [PATCH] implemented photo post type --- WebKit/css/default.css | 6 ++++ WebKit/scripts/controller/Oauth.js | 2 +- WebKit/scripts/controller/Timeline.js | 16 +++++++--- WebKit/scripts/helper/Core.js | 44 +++++++++++++++++++++++---- WebKit/scripts/helper/Paths.js | 13 ++++---- 5 files changed, 64 insertions(+), 17 deletions(-) diff --git a/WebKit/css/default.css b/WebKit/css/default.css index c14c32b..acfa130 100644 --- a/WebKit/css/default.css +++ b/WebKit/css/default.css @@ -256,3 +256,9 @@ li.mentioned { .mentions li.mentioned { border-right: 0; } + +.photo { + margin-top: 10px; + max-width: 100%; + border-radius: 3px; +} \ No newline at end of file diff --git a/WebKit/scripts/controller/Oauth.js b/WebKit/scripts/controller/Oauth.js index c790caa..70bb90a 100644 --- a/WebKit/scripts/controller/Oauth.js +++ b/WebKit/scripts/controller/Oauth.js @@ -98,7 +98,7 @@ function(HostApp, Paths, Hmac) { this.state = Hmac.makeid(19); var auth = "/oauth/authorize?client_id=" + register_data["id"] - + "&redirect_uri=" + this.app_info["redirect_uris"][0] // Check if this still works on mac + + "&redirect_uri=" + this.app_info["redirect_uris"][0] + "&scope=" + Object.keys(this.app_info["scopes"]).join(",") + "&state=" + this.state + "&tent_post_types=all"; diff --git a/WebKit/scripts/controller/Timeline.js b/WebKit/scripts/controller/Timeline.js index 43e2d4c..55d8785 100644 --- a/WebKit/scripts/controller/Timeline.js +++ b/WebKit/scripts/controller/Timeline.js @@ -42,15 +42,22 @@ function(Core, Paths, HostApp, URI) { this.since_id = status.id; this.since_id_entity = status.entity; - if (status.type == "https://tent.io/types/post/status/v0.1.0") { + if (status.type == "https://tent.io/types/post/status/v0.1.0" || status.type == "https://tent.io/types/post/photo/v0.1.0") { + + var new_node = this.getStatusDOMElement(status); if(this.body.childNodes.length > 0) { + if(this.body.childNodes.length > this.max_length) { + this.body.removeChild(this.body.lastChild); } - this.body.insertBefore(this.getStatusDOMElement(status), this.body.firstChild); + + this.body.insertBefore(new_node, this.body.firstChild); + } else { - this.body.appendChild(this.getStatusDOMElement(status)); + + this.body.appendChild(new_node); } } else if (status.type == "https://tent.io/types/post/delete/v0.1.0") { @@ -78,7 +85,8 @@ function(Core, Paths, HostApp, URI) { var post_types = [ "https://tent.io/types/post/repost/v0.1.0", "https://tent.io/types/post/status/v0.1.0", - "https://tent.io/types/post/delete/v0.1.0" + "https://tent.io/types/post/delete/v0.1.0", + "https://tent.io/types/post/photo/v0.1.0" ]; url.addSearch("post_types", post_types.join(",")); diff --git a/WebKit/scripts/helper/Core.js b/WebKit/scripts/helper/Core.js index 61a14a6..cacfb8d 100644 --- a/WebKit/scripts/helper/Core.js +++ b/WebKit/scripts/helper/Core.js @@ -211,7 +211,15 @@ function(jQuery, Paths, URI, HostApp, Followings) { template.in_reply.parentNode.className = "hidden"; - var text = status.content.text.escapeHTML().replace(/\n/g, "
"); + var text = ""; + + if (status.type == "https://tent.io/types/post/photo/v0.1.0") { + text = status.content.caption; + } else { + text = status.content.text; + } + + text = text.escapeHTML().replace(/\n/g, "
"); var entities = [status.entity]; status.mentions.map(function (mention) { @@ -222,6 +230,25 @@ function(jQuery, Paths, URI, HostApp, Followings) { this.replaceURLWithHTMLLinks(text, entities, template.message) ); + if (status.type == "https://tent.io/types/post/photo/v0.1.0") { + + for (var i = 0; i < status.attachments.length; i++) { + + var attachment = status.attachments[i]; + var img = new Image(); + img.className = "photo"; + template.message.parentNode.insertBefore(img, template.message.nextSibling); + + var url = Paths.mkApiRootPath("/posts/" + status.id + "/attachments/" + attachment.name); + + var callback = function(resp) { + img.src = "data:image/png;base64," + resp.responseText; + } + + Paths.getURL(url.toString(), "GET", callback, null, null, attachment.type); + }; + } + this.findMentions(template.message, status.mentions); for (var i = 0; i < status.mentions.length; i++) { @@ -320,8 +347,8 @@ function(jQuery, Paths, URI, HostApp, Followings) { var data_string = JSON.stringify(data); - var boundary = "-----------TentAttachment"; - var post = boundary + "\r\n"; + var boundary = "TentAttachment----------TentAttachment"; + var post = "--" + boundary + "\r\n"; post += 'Content-Disposition: form-data; name="post"; filename="post.json"\r\n'; post += 'Content-Length: ' + data_string.length + '\r\n'; @@ -329,10 +356,15 @@ function(jQuery, Paths, URI, HostApp, Followings) { post += 'Content-Transfer-Encoding: binary\r\n\r\n'; post += data_string; - post += "\r\n" + boundary + "\r\n"; + post += "\r\n--" + boundary + "\r\n"; var binary_data = this.dataURItoBlob(image_data_uri); var ext = "png"; + if (binary_data.mime_type == "image/jpeg") { + ext = "jpeg"; + } else if (binary_data.mime_type == "image/gif") { + ext = "gif"; + } var reader = new FileReader(); reader.onload = function(e) { @@ -341,9 +373,9 @@ function(jQuery, Paths, URI, HostApp, Followings) { post += 'Content-Disposition: form-data; name="photos[0]"; filename="photo.' + ext + '"\r\n'; post += 'Content-Length: ' + blob_string.length + "\r\n"; post += 'Content-Type: ' + binary_data.mime_type + "\r\n"; - post += 'Content-Transfer-Encoding: binary\r\n\r\n'; + post += 'Content-Transfer-Encoding: base64\r\n\r\n'; post += image_data_uri.split(',')[1]; - post += "\r\n" + boundary + "--\r\n"; + post += "\r\n--" + boundary + "--\r\n"; Paths.postMultipart(url.toString(), callback, post, boundary); } diff --git a/WebKit/scripts/helper/Paths.js b/WebKit/scripts/helper/Paths.js index 1ce21c8..92a0c32 100644 --- a/WebKit/scripts/helper/Paths.js +++ b/WebKit/scripts/helper/Paths.js @@ -20,11 +20,16 @@ function(jQuery, HostApp, Hmac) { return vars; } - Paths.getURL = function(url, http_method, callback, data, auth_header) { + Paths.getURL = function(url, http_method, callback, data, auth_header, accepts) { + + accepts = accepts || "application/vnd.tent.v0+json"; jQuery.ajax({ beforeSend: function(xhr) { + + xhr.setRequestHeader("Accept", accepts); + if (data) xhr.setRequestHeader("Content-Length", data.length); if (auth_header) { // if is_set? auth_header @@ -40,7 +45,6 @@ function(jQuery, HostApp, Hmac) { auth_header = Hmac.makeAuthHeader( url, http_method, - //HostApp.stringForKey("user_mac_key"), HostApp.secret(), user_access_token ); @@ -49,7 +53,6 @@ function(jQuery, HostApp, Hmac) { } }, url: url, - accepts: "application/vnd.tent.v0+json", contentType: "application/vnd.tent.v0+json", type: http_method, complete: callback, @@ -62,8 +65,6 @@ function(jQuery, HostApp, Hmac) { } Paths.postMultipart = function(url, callback, data, boundary) { - debug(url) - debug(data) jQuery.ajax({ @@ -79,7 +80,7 @@ function(jQuery, HostApp, Hmac) { auth_header = Hmac.makeAuthHeader( url, "POST", - HostApp.stringForKey("user_mac_key"), + HostApp.secret(), user_access_token ); debug(auth_header)