mirror of
https://github.com/Mibew/java.git
synced 2025-04-08 05:40:14 +03:00
156 lines
3.8 KiB
JavaScript
156 lines
3.8 KiB
JavaScript
/**
|
|
* @preserve This file is part of Mibew Messenger project.
|
|
* http://mibew.org
|
|
*
|
|
* Copyright (c) 2005-2011 Mibew Messenger Community
|
|
* License: http://mibew.org/license.php
|
|
*/
|
|
|
|
var mibewRequestedScripts = new Array();
|
|
var mibewHandlers = new Array();
|
|
var mibewHandlersDependences = new Array();
|
|
|
|
function mibewMakeRequest()
|
|
{
|
|
// Try to get user id from local cookie
|
|
var userId = mibewReadCookie(mibewVisitorCookieName);
|
|
|
|
mibewDoLoadScript(
|
|
mibewRequestUrl + '&rnd=' + Math.random()
|
|
+ ((userId !== false) ? '&user_id=' + userId : ''),
|
|
'responseScript'
|
|
);
|
|
}
|
|
|
|
function mibewOnResponse(response)
|
|
{
|
|
var load = response.load;
|
|
var handlers = response.handlers;
|
|
var data = response.data;
|
|
var dependences = response.dependences;
|
|
|
|
for(id in load){
|
|
if(! (load[id] in mibewRequestedScripts)){
|
|
mibewRequestedScripts[id] = new Array();
|
|
mibewRequestedScripts[id]['url'] = load[id];
|
|
mibewRequestedScripts[id]['status'] = 'loading';
|
|
mibewLoadScript(id);
|
|
}
|
|
}
|
|
|
|
for(handler in dependences){
|
|
if(! (handler in mibewHandlersDependences)){
|
|
mibewHandlersDependences[handler] = dependences[handler];
|
|
}
|
|
}
|
|
|
|
for(var i = 0; i < handlers.length; i++){
|
|
var handlerName = handlers[i];
|
|
if(mibewCanRunHandler(handlers[i])){
|
|
window[handlerName](data);
|
|
}else{
|
|
if(! (handlers[i] in mibewHandlers)){
|
|
mibewHandlers[handlerName] = function(){
|
|
window[handlerName](data);
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
mibewCleanUpAfterRequest();
|
|
|
|
window.setTimeout(mibewMakeRequest,mibewRequestTimeout);
|
|
}
|
|
|
|
function mibewCleanUpAfterRequest()
|
|
{
|
|
document.getElementsByTagName('head')[0].removeChild(document.getElementById('responseScript'));
|
|
}
|
|
|
|
function mibewDoLoadScript(url, id)
|
|
{
|
|
var script = document.createElement('script');
|
|
script.setAttribute('type', 'text/javascript');
|
|
script.setAttribute('src', url);
|
|
script.setAttribute('id', id);
|
|
document.getElementsByTagName('head')[0].appendChild(script);
|
|
return script;
|
|
}
|
|
|
|
function mibewLoadScript(id)
|
|
{
|
|
var script = mibewDoLoadScript(mibewRequestedScripts[id]['url'], id);
|
|
script.onload = function(){
|
|
mibewScriptReady(id);
|
|
}
|
|
script.onreadystatechange = function(){
|
|
if (this.readyState == 'complete' || this.readyState == 'loaded') {
|
|
mibewScriptReady(id);
|
|
}
|
|
}
|
|
}
|
|
|
|
function mibewScriptReady(id)
|
|
{
|
|
mibewRequestedScripts[id]['status'] = 'ready';
|
|
for(handlerName in mibewHandlers){
|
|
if(mibewCanRunHandler(handlerName)){
|
|
mibewHandlers[handlerName]();
|
|
delete mibewHandlers[handlerName];
|
|
}
|
|
}
|
|
}
|
|
|
|
function mibewCanRunHandler(handlerName)
|
|
{
|
|
var dependences = mibewHandlersDependences[handlerName];
|
|
for(var i = 0; i < dependences.length; i++){
|
|
if(mibewRequestedScripts[dependences[i]]['status'] != 'ready'){
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Create session cookie for top level domain with path equals to '/'.
|
|
*
|
|
* @param {String} name Cookie name
|
|
* @param {String} value Cookie value
|
|
*/
|
|
function mibewCreateCookie(name, value) {
|
|
var domainParts = /([^\.]+\.[^\.]+)$/.exec(document.location.hostname);
|
|
var domain = domainParts[1];
|
|
document.cookie = "" + name + "=" + value + "; "
|
|
+ "path=/; "
|
|
+ (domain ? ("domain=" + domain + ";") : '');
|
|
}
|
|
|
|
/**
|
|
* Try to read cookie.
|
|
*
|
|
* @param {String} name Cookie name
|
|
* @returns {String|Boolean} Cookie value or boolean false if cookie with
|
|
* specified name does not exist
|
|
*/
|
|
function mibewReadCookie(name) {
|
|
var cookies = document.cookie.split('; ');
|
|
var nameForSearch = name + '=';
|
|
var value = false;
|
|
for (var i = 0; i < cookies.length; i++) {
|
|
if (cookies[i].indexOf(nameForSearch) != -1) {
|
|
value = cookies[i].substr(nameForSearch.length);
|
|
break;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
|
|
/**
|
|
* Update user id. API function
|
|
* @param {Object} response Data object from server
|
|
*/
|
|
function mibewUpdateUserId(response) {
|
|
mibewCreateCookie(mibewVisitorCookieName, response.user.id);
|
|
}
|