This repository has been archived on 2025-08-18. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Bungloo/WebKit/scripts/controller/Timeline.js

195 lines
No EOL
6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

define([
"helper/Core",
"helper/APICalls",
"helper/HostApp",
"lib/URI"
],
function(Core, APICalls, HostApp, URI) {
function Timeline() {
Core.call(this);
this.action = "timeline";
this.reload_blocked = false;
this.posts_limit = 25;
this.max_length = 200;
this.timeout = 10 * 1000; // every 10 seconds
this.since_id = null;
this.since_id_entity = null;
this.since_time = 0;
this.before = {id: null, entity: null, loading: false};
this.container = document.createElement("div");
this.container.className = this.action;
this.body = document.createElement("ol");
this.container.appendChild(this.body)
document.getElementById("content").appendChild(this.container);
var _this = this;
//this.reloadIntervall = setInterval(function() { _this.getNewData() }, this.timeout); //FIXME back
this.getNewData();
}
Timeline.prototype = Object.create(Core.prototype);
Timeline.prototype.show = function() {
Core.prototype.show.call(this, this.container);
}
Timeline.prototype.hide = function() {
Core.prototype.hide.call(this, this.container);
}
Timeline.prototype.newStatus = function(statuses, append) {
statuses = statuses.data;
if(statuses != null && statuses.length > 0) {
this.before.loading = false;
if (append) statuses = statuses.reverse();
for(var i = statuses.length-1, c=0; i>=c; --i) {
var status = statuses[i];
if(!append) {
this.since_id = status.id;
this.since_id_entity = status.entity;
}
if (status.type == "https://tent.io/types/status/v0#" || status.type == "https://tent.io/types/post/photo/v0.1.0") {
var new_node = this.getStatusDOMElement(status);
if (!document.getElementById(new_node.id)) {
if(!append && this.body.childNodes.length > 0) {
if(this.body.childNodes.length > this.max_length) {
this.body.removeChild(this.body.lastChild);
}
this.body.insertBefore(new_node, this.body.firstChild);
} else {
this.body.appendChild(new_node);
}
}
} else if (status.type == "https://tent.io/types/post/delete/v0.1.0") {
HostApp.notificateViewsAboutDeletedPost(status.content.id, status.entity);
} else if (status.type == "https://tent.io/types/post/repost/v0.1.0") {
this.getRepost(status, append ? this.body.lastChild : this.body.firstChild, append);
}
}
}
}
Timeline.prototype.getNewData = function(add_to_search, append) {
add_to_search = add_to_search || {};
var those = this;
var url = URI(HostApp.serverUrl("posts_feed"));
var post_types = [
"https://tent.io/types/status/v0#",
"https://tent.io/types/status/v0#reply",
"https://tent.io/types/repost/v0#",
"https://tent.io/types/delete/v0#",
//"https://tent.io/types/post/photo/v0.1.0"
];
//url.addSearch("types", post_types.join(","));
//url.addSearch("sort_by", "published_at");
url.addSearch("limit", this.posts_limit);
if(this.since_id && !append) {
url.addSearch("since_id", this.since_id);
url.addSearch("since_id_entity", this.since_id_entity);
}
for (key in add_to_search) {
url.addSearch(key, add_to_search[key]);
}
var http_method = "GET";
var callback = function(resp) {
those.reload_blocked = false;
try {
var json = JSON.parse(resp.responseText);
those.newStatus(json, append);
} catch (e) {
console.error(url + " JSON parse error");
throw e;
}
}
var data = null;
if (HostApp.stringForKey("user_access_token")) {
if (!this.reload_blocked) {
this.reload_blocked = true;
// APICalls.http_call(url.toString(), http_method, callback, data); // FIXME: error callback
APICalls.get(url.toString(), { callback: callback });
}
}
}
Timeline.prototype.getMoreStatusPosts = function() {
if (!this.before.loading) {
this.before.loading = true;
var add_search = {
"before_id": this.body.lastChild.status.id,
"before_id_entity": this.body.lastChild.status.entity
}
this.getNewData(add_search, true);
}
}
Timeline.prototype.sendNewMessage = function(content, in_reply_to_status_id, in_reply_to_entity, location, image_data_uri, is_private) {
var _this = this;
var callback = function(data) { _this.getNewData(); }
Core.prototype.sendNewMessage.call(this, content, in_reply_to_status_id, in_reply_to_entity, location, image_data_uri, is_private, callback);
}
Timeline.prototype.remove = function(id, callback, type) {
var _this = this;
var new_callback = function(data) {
if(callback) callback(data);
_this.getNewData();
}
Core.prototype.remove.call(this, id, new_callback, type);
}
Timeline.prototype.repost = function(id, entity, callback) {
var _this = this;
if (!callback) {
callback = function(data) { _this.getNewData(); }
}
Core.prototype.repost.call(this, id, entity, callback);
}
Timeline.prototype.logout = function() {
clearInterval(this.reloadIntervall);
Core.prototype.logout.call(this);
}
return Timeline;
});