Added conversation view
This commit is contained in:
parent
6c05512285
commit
fa2bda0394
13 changed files with 474 additions and 48 deletions
|
@ -3,13 +3,16 @@ define([
|
|||
"helper/Paths",
|
||||
"lib/URI",
|
||||
"helper/HostApp",
|
||||
"helper/Followings",
|
||||
"lib/vendor/jquery.plugins"
|
||||
],
|
||||
|
||||
function(jQuery, Paths, URI, HostApp) {
|
||||
function(jQuery, Paths, URI, HostApp, Followings) {
|
||||
|
||||
function Core() {
|
||||
|
||||
this.followings = new Followings();
|
||||
|
||||
}
|
||||
|
||||
Core.prototype.getTemplate = function() {
|
||||
|
@ -121,7 +124,6 @@ function(jQuery, Paths, URI, HostApp) {
|
|||
|
||||
var template = this.getTemplate();
|
||||
|
||||
|
||||
template.reply_to.onclick = function() {
|
||||
|
||||
var mentions = [];
|
||||
|
@ -140,25 +142,39 @@ function(jQuery, Paths, URI, HostApp) {
|
|||
template.username.innerText = status.entity;
|
||||
template.username.href = status.entity; // FIXME open profile
|
||||
|
||||
Paths.findProfileURL(status.entity, function(profile_url) {
|
||||
if (profile_url) {
|
||||
Paths.getURL(profile_url, "GET", function(resp) {
|
||||
var profile = JSON.parse(resp.responseText);
|
||||
var basic = profile["https://tent.io/types/info/basic/v0.1.0"];
|
||||
var profile = function(profile) {
|
||||
|
||||
if (profile && basic) {
|
||||
if(basic.name) {
|
||||
template.username.title = template.username.innerText;
|
||||
template.username.innerText = basic.name;
|
||||
}
|
||||
if(basic.avatar_url) {
|
||||
template.image.onerror = function() { template.image.src = 'img/default-avatar.png' };
|
||||
template.image.src = basic.avatar_url;
|
||||
}
|
||||
}
|
||||
}, null, false); // do not send auth-headers
|
||||
var basic = profile["https://tent.io/types/info/basic/v0.1.0"];
|
||||
|
||||
if (profile && basic) {
|
||||
if(basic.name) {
|
||||
template.username.title = template.username.innerText;
|
||||
template.username.innerText = basic.name;
|
||||
}
|
||||
if(basic.avatar_url) {
|
||||
template.image.onerror = function() { template.image.src = 'img/default-avatar.png' };
|
||||
template.image.src = basic.avatar_url;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
if (this.followings.followings[status.entity]) {
|
||||
|
||||
profile(this.followings.followings[status.entity].profile);
|
||||
|
||||
} else {
|
||||
|
||||
Paths.findProfileURL(status.entity, function(profile_url) {
|
||||
if (profile_url) {
|
||||
Paths.getURL(profile_url, "GET", function(resp) {
|
||||
var p = JSON.parse(resp.responseText);
|
||||
profile(p)
|
||||
}, null, false); // do not send auth-headers
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
template.in_reply.parentNode.className = "hidden";
|
||||
|
||||
|
@ -174,6 +190,12 @@ function(jQuery, Paths, URI, HostApp) {
|
|||
time.className = "timeago";
|
||||
jQuery(time).timeago();
|
||||
template.ago.appendChild(time);
|
||||
|
||||
template.ago.href = "#"
|
||||
template.ago.onclick = function() {
|
||||
HostApp.showConversation(status.id, status.entity);
|
||||
return false;
|
||||
}
|
||||
|
||||
// {"type":"Point","coordinates":[57.10803113,12.25854746]}
|
||||
if (status.content && status.content.location && status.content.location.type == "Point") {
|
||||
|
@ -272,30 +294,44 @@ function(jQuery, Paths, URI, HostApp) {
|
|||
}
|
||||
}
|
||||
|
||||
var _this = this;
|
||||
for (var i = 0; i < mentions_in_text.length; i++) {
|
||||
var mention = mentions_in_text[i];
|
||||
|
||||
(function(mention) { // need this closure
|
||||
Paths.findProfileURL(mention.entity, function(profile_url) {
|
||||
if (profile_url) {
|
||||
Paths.getURL(profile_url, "GET", function(resp) {
|
||||
var profile = JSON.parse(resp.responseText);
|
||||
var basic = profile["https://tent.io/types/info/basic/v0.1.0"];
|
||||
|
||||
if (profile && basic) {
|
||||
if(basic.name) {
|
||||
var new_text = node.innerHTML.replace(
|
||||
mention.text,
|
||||
"<strong class='name' title='" + mention.entity + "'" + ">"
|
||||
+ basic.name
|
||||
+ "</strong>"
|
||||
);
|
||||
node.innerHTML = new_text;
|
||||
}
|
||||
}
|
||||
}, null, false); // do not send auth-headers
|
||||
var profile = function(profile) {
|
||||
var basic = profile["https://tent.io/types/info/basic/v0.1.0"];
|
||||
|
||||
if (profile && basic) {
|
||||
if(basic.name) {
|
||||
var new_text = node.innerHTML.replace(
|
||||
mention.text,
|
||||
"<strong class='name' title='" + mention.entity + "'" + ">"
|
||||
+ basic.name
|
||||
+ "</strong>"
|
||||
);
|
||||
node.innerHTML = new_text;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (_this.followings.followings[mention.entity]) {
|
||||
|
||||
profile(_this.followings.followings[mention.entity].profile)
|
||||
|
||||
} else {
|
||||
|
||||
Paths.findProfileURL(mention.entity, function(profile_url) {
|
||||
if (profile_url) {
|
||||
Paths.getURL(profile_url, "GET", function(resp) {
|
||||
var p = JSON.parse(resp.responseText);
|
||||
profile(p)
|
||||
}, null, false); // do not send auth-headers
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
})(mention);
|
||||
}
|
||||
}
|
||||
|
|
50
WebKit/scripts/helper/Followings.js
Normal file
50
WebKit/scripts/helper/Followings.js
Normal file
|
@ -0,0 +1,50 @@
|
|||
define([
|
||||
"helper/Paths",
|
||||
"lib/URI"
|
||||
],
|
||||
|
||||
function(Paths, URI) {
|
||||
|
||||
function Followings() {
|
||||
|
||||
this.timeout = 2 * 60 * 1000;
|
||||
this.followings = {};
|
||||
this.before_id = null;
|
||||
|
||||
var _this = this;
|
||||
this.intervall = setInterval(function() { _this.getAllFollowings(); }, this.timeout);
|
||||
|
||||
this.getAllFollowings();
|
||||
}
|
||||
|
||||
Followings.prototype.getAllFollowings = function() {
|
||||
|
||||
var _this = this;
|
||||
|
||||
var callback = function(resp) {
|
||||
|
||||
var fs = JSON.parse(resp.responseText)
|
||||
|
||||
if (fs.length < 1) return;
|
||||
|
||||
for (var i = 0; i < fs.length; i++) {
|
||||
|
||||
var following = fs[i];
|
||||
_this.before_id = following.id;
|
||||
_this.followings[following.entity] = following;
|
||||
}
|
||||
|
||||
_this.getAllFollowings();
|
||||
}
|
||||
|
||||
var url = URI(Paths.mkApiRootPath("/followings"));
|
||||
if (this.before_id) {
|
||||
url.addSearch("before_id", this.before_id);
|
||||
}
|
||||
|
||||
Paths.getURL(url, "GET", callback);
|
||||
}
|
||||
|
||||
return Followings;
|
||||
|
||||
});
|
|
@ -61,6 +61,15 @@ define(function() {
|
|||
}
|
||||
}
|
||||
|
||||
HostApp.showConversation = function(id, entity) {
|
||||
|
||||
if (OS_TYPE == "mac") {
|
||||
controller.showConversationForPostId_andEntity_(id, entity);
|
||||
} else {
|
||||
controller.showConversationForPostIdandEntity(id, entity);
|
||||
}
|
||||
}
|
||||
|
||||
return HostApp;
|
||||
|
||||
});
|
|
@ -21,21 +21,28 @@ function(jQuery, HostApp, Hmac) {
|
|||
}
|
||||
|
||||
Paths.getURL = function(url, http_method, callback, data, auth_header) {
|
||||
|
||||
jQuery.ajax({
|
||||
|
||||
beforeSend: function(xhr) {
|
||||
if (data) xhr.setRequestHeader("Content-Length", data.length);
|
||||
|
||||
if (auth_header) { // if is_set? auth_header
|
||||
|
||||
xhr.setRequestHeader("Authorization", auth_header);
|
||||
|
||||
} else {
|
||||
|
||||
var user_access_token = HostApp.stringForKey("user_access_token");
|
||||
|
||||
if (auth_header !== false && user_access_token) {
|
||||
|
||||
auth_header = Hmac.makeAuthHeader(
|
||||
url,
|
||||
http_method,
|
||||
HostApp.stringForKey("user_mac_key"),
|
||||
user_access_token
|
||||
)
|
||||
);
|
||||
xhr.setRequestHeader("Authorization", auth_header);
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +61,7 @@ function(jQuery, HostApp, Hmac) {
|
|||
}
|
||||
|
||||
Paths.findProfileURL = function(entity, callback) {
|
||||
|
||||
jQuery.ajax({
|
||||
url: entity,
|
||||
type: "HEAD",
|
||||
|
|
Reference in a new issue