Qvitter/js/ajax-functions.js

384 lines
11 KiB
JavaScript
Raw Normal View History

2013-08-19 22:30:57 +09:00
/* · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
· ·
· ·
· Q V I T T E R ·
· ·
· http://github.com/hannesmannerheim/qvitter ·
· ·
· ·
· <o) ·
· /_//// ·
· (____/ ·
· (o< ·
· o> \\\\_\ ·
· \\) \____) ·
· ·
· ·
· ·
· Qvitter is free software: you can redistribute it and / or modify it ·
· under the terms of the GNU Affero General Public License as published by ·
· the Free Software Foundation, either version three of the License or (at ·
· your option) any later version. ·
· ·
· Qvitter is distributed in hope that it will be useful but WITHOUT ANY ·
· WARRANTY; without even the implied warranty of MERCHANTABILTY or FITNESS ·
· FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for ·
· more details. ·
· ·
· You should have received a copy of the GNU Affero General Public License ·
· along with Qvitter. If not, see <http://www.gnu.org/licenses/>. ·
· ·
· Contact h@nnesmannerhe.im if you have any questions. ·
· ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
/* ·
·
· Current time in milliseconds, to send with each request to make sure
· we're not getting 304 responses.
·
·
· · · · · · · · · · · · · */
function timeNow() {
return new Date().getTime();
}
2013-08-19 22:30:57 +09:00
/* ·
·
· Check login credentials with http basic auth
·
· @param username: users screen name
· @param password: users password
· @param actionOnSuccess: callback function on log in success
·
· · · · · · · · · */
function checkLogin(username,password,actionOnSuccess) {
2014-05-17 05:30:10 +09:00
$.ajax({ url: window.apiRoot + 'qvitter/checklogin.json',
type: 'POST',
data: {
username: username,
password: password
},
2013-08-19 22:30:57 +09:00
dataType: 'json',
error: function() {
logoutWithoutReload(true);
},
success: function(data) {
if(typeof data.error == 'undefined' && data !== false) {
2013-08-19 22:30:57 +09:00
actionOnSuccess(data);
}
else {
logoutWithoutReload(true);
2013-08-19 22:30:57 +09:00
}
}
});
}
/* ·
·
· Generic API GET request
·
· @param stream: any api get-request e.g. 'statuses/favs/111111.json'
· @param actionOnSuccess: callback function
·
· · · · · · · · · · · · · */
function getFromAPI(stream, actionOnSuccess) {
$.ajax({ url: window.apiRoot + stream + qOrAmp(stream) + 't=' + timeNow(),
type: "GET",
dataType: 'json',
statusCode: {
400:function() {
location.reload(); // we may have been logged out in another tab, reload page
},
404:function() {
window.location.replace(window.siteInstanceURL); // redirect to frontpage, probably when trying to access non-existing users
}
},
success: function(data) {
data = convertEmptyObjectToEmptyArray(data);
actionOnSuccess(data);
},
error: function(data) {
actionOnSuccess(false);
console.log(data);
remove_spinner();
}
});
2013-08-19 22:30:57 +09:00
}
/* ·
·
· Post new link color
·
· @param newLinkColor: the new link color in hex without #
·
· · · · · · · · · · · · · */
function postNewLinkColor(newLinkColor) {
$.ajax({ url: window.apiRoot + 'qvitter/update_link_color.json?t=' + timeNow(),
type: "POST",
data: {
linkcolor: newLinkColor
},
dataType:"json",
error: function(data){ console.log(data); },
2013-08-26 05:34:09 +09:00
success: function(data) {
window.userLinkColor = newLinkColor;
}
});
}
2013-08-26 05:34:09 +09:00
/* ·
·
· Post new background color
·
· @param newBackgroundColor: the new background color in hex without #
·
· · · · · · · · · · · · · */
function postNewBackgroundColor(newBackgroundColor) {
$.ajax({ url: window.apiRoot + 'qvitter/update_background_color.json?t=' + timeNow(),
2013-08-26 05:34:09 +09:00
type: "POST",
data: {
backgroundcolor: newBackgroundColor
2013-08-26 05:34:09 +09:00
},
dataType:"json",
error: function(data){ console.log(data); },
success: function(data) {
window.userBackgroundColor = newBackgroundColor;
}
});
}
2013-08-19 22:30:57 +09:00
/* ·
·
· Post follow or unfollow user request
·
· @param followOrUnfollow: either 'follow' or 'unfollow'
· @param user_id: the user id of the user we want to follow
· @param actionOnSuccess: callback function, false on error, data on success
·
· · · · · · · · · · · · · */
function APIFollowOrUnfollowUser(followOrUnfollow,user_id,this_element,actionOnSuccess) {
if(followOrUnfollow == 'follow') {
var postRequest = 'friendships/create.json?t=' + timeNow();
2013-08-19 22:30:57 +09:00
}
else if (followOrUnfollow == 'unfollow') {
var postRequest = 'friendships/destroy.json?t=' + timeNow();
2013-08-19 22:30:57 +09:00
}
$.ajax({ url: window.apiRoot + postRequest,
2013-08-19 22:30:57 +09:00
type: "POST",
data: {
user_id: user_id
2013-08-19 22:30:57 +09:00
},
dataType:"json",
error: function(data){ actionOnSuccess(false,this_element); console.log(data); },
success: function(data) { actionOnSuccess(data,this_element);}
});
}
/* ·
·
· Post join or leave group request
·
· @param joinOrLeave: either 'join' or 'leave'
· @param group_id: group's id
· @param actionOnSuccess: callback function, false on error, data on success
·
· · · · · · · · · · · · · */
function APIJoinOrLeaveGroup(joinOrLeave,group_id,this_element,actionOnSuccess) {
$.ajax({ url: window.apiRoot + 'statusnet/groups/' + joinOrLeave + '.json?t=' + timeNow(),
2013-08-19 22:30:57 +09:00
type: "POST",
data: {
id: group_id
2013-08-19 22:30:57 +09:00
},
dataType:"json",
error: function(data){ actionOnSuccess(false,this_element); console.log(data); },
success: function(data) { actionOnSuccess(data,this_element);}
});
}
/* ·
·
· Post queet
2013-08-19 22:30:57 +09:00
·
· @param queetText_txt: the text to post
· @param in_reply_to_status_id: the local id for the queet to reply to
· @param actionOnSuccess: callback function, false on error, data on success
·
· · · · · · · · · · · · · */
function postQueetToAPI(queetText_txt, in_reply_to_status_id, actionOnSuccess) {
$.ajax({ url: window.apiRoot + 'statuses/update.json?t=' + timeNow(),
2013-08-19 22:30:57 +09:00
type: "POST",
data: {
status: queetText_txt,
source: 'Qvitter',
in_reply_to_status_id: in_reply_to_status_id
},
dataType:"json",
error: function(data){ actionOnSuccess(false); console.log(data); },
success: function(data) { actionOnSuccess(data);}
});
}
/* ·
·
· Generic POST-action
·
· @param action: the api action, e.q. 'statuses/retweet/1.json'
· @param actionOnSuccess: callback function, false on error, data on success
·
· · · · · · · · · · · · · */
function postActionToAPI(action, actionOnSuccess) {
$.ajax({ url: window.apiRoot + action + qOrAmp(action) + 't=' + timeNow(),
2013-08-19 22:30:57 +09:00
type: "POST",
data: {
source: 'Qvitter'
2013-08-19 22:30:57 +09:00
},
dataType:"json",
error: function(data){ actionOnSuccess(false); console.log(data); },
success: function(data) {
data = convertEmptyObjectToEmptyArray(data);
actionOnSuccess(data);
}
2013-08-19 22:30:57 +09:00
});
}
/* ·
·
· Delete requeet
·
· @param this_stream_item: jQuery object for stream-item
· @param this_action: JQuery object for the requeet-button
· @param my_rq_id: the id for the requeet
·
· · · · · · · · · */
function unRequeet(this_stream_item, this_action, my_rq_id) {
this_action.children('.with-icn').removeClass('done');
this_action.find('.with-icn b').html(window.sL.requeetVerb);
this_stream_item.removeClass('requeeted');
// post unrequeet
postActionToAPI('statuses/destroy/' + my_rq_id + '.json', function(data) {
if(data) {
remove_spinner();
this_stream_item.removeAttr('data-requeeted-by-me-id');
}
else {
remove_spinner();
this_action.children('.with-icn').addClass('done');
this_action.find('.with-icn b').html(window.sL.requeetedVerb);
this_stream_item.addClass('requeeted');
}
});
}
/* ·
·
· Gets favs or requeets for a queet from api
·
· @param apiaction: i.e. 'favs' or 'requeets'
· @param qid: the queet id
· @param actionOnSuccess: callback function
·
· · · · · · · · · */
function getFavsOrRequeetsForQueet(apiaction,qid,actionOnSuccess) {
if(apiaction=="requeets") { apiaction="retweets"; } // we might mix this up...
$.ajax({ url: window.apiRoot + "statuses/" + apiaction + "/" + qid + ".json?t=" + timeNow(),
type: "GET",
2013-08-19 22:30:57 +09:00
dataType: 'json',
success: function(data) {
if(data.length > 0) {
actionOnSuccess(data);
}
else {
actionOnSuccess(false);
}
},
error: function(data) {
remove_spinner();
console.log(data);
}
});
}
2014-09-25 06:20:35 +09:00
/* ·
·
· Check for unseen notifications
·
· @param actionOnSuccess: callback function
·
· · · · · · · · · */
function checkForNewNotifications() {
$.ajax({ url: window.apiRoot + "qvitter/newnotifications.json",
type: "GET",
dataType: 'json',
success: function(data) {
if(data.length == 0) {
$('#unseen-notifications').hide();
document.title = window.siteTitle;
}
else {
var totNotif = 0;
$.each(data,function(k,v){
totNotif = totNotif + parseInt(v,10);
});
if(totNotif>0) {
$('#unseen-notifications').html(totNotif);
document.title = window.siteTitle + ' (' + totNotif + ')'; // update html page title
$('#unseen-notifications').show();
}
else {
$('#unseen-notifications').hide();
document.title = window.siteTitle;
}
}
},
error: function(data) {
$('#unseen-notifications').hide();
document.title = window.siteTitle;
remove_spinner();
console.log(data);
}
});
}