Привет :). Сегодня выкладываю функции для работы с ЛС. Функции:
(function(window){
window.PM = function(theme,message){
var ready = [], sent = [], that = this;
this.theme = theme;
this.message = message;
this.readyState = 'loading';
this.ready = function(fn){
if(this.readyState == 'ready') fn.call(this);
else ready.push(fn);
}
$.get('/index/14-0-0-1', function(data){
that.ssid = $('[name=ssid]',data).val();
that.seckey = $('[name=seckey]',data).val();
that.captcha = $('#secuImg',data).attr('src');
that.readyState = 'ready';
for(var i = 0, l = ready.length; i < l; i++){
ready[i].call(that);
}
});
this.sent = function(fn){
if(this.readyState == 'sent') fn.call(this);
else sent.push(fn);
}
this.send = function(user,captcha){
this.ready(function(){
var obj = {
_tp:'xml',
a:18,
message:this.message,
s:user,
ssid:this.ssid,
subject:this.theme
};
if(this.captcha){
obj.seckey = this.seckey;
obj.code = captcha;
}
$.post('/index/', obj, function(data){
that.readyState = 'sent';
that.data = data;
for(var i = 0, l = sent.length; i < l; i++){
sent[i].call(that,data);
}
});
});
}
this.toString = function(){ return '[object uAdminPM]' }
}
window.getInputPM = function(fn){
$.get('/index/14-0-0', function(data){
var pm = [];
data = $(data);
$('#pmdform tr',data).each(function(){
var id = $(this).attr('id'), obj = {};
if(!id) return;
obj.id = id.substring(3);
obj.link = $('td:eq(1) a:eq(0)',this);
obj.theme = obj.link.text();
obj.link = obj.link.attr('href');
obj.userpage = $('td:eq(1) a:eq(1)',this);
obj.username = obj.userpage.text();
obj.userpage = obj.userpage.attr('href');
obj.date = $('td:eq(2)',this).text();
obj.getText = function(fn){
$.get('/index/14-' + obj.id + '-0', function(data){
var t = $('#snewmes',data).parent().text();
fn( t.substring(0, t.length-19) );
});
}
obj.delete = function(fn){
$.get('/index/16-' + obj.id + '?_tp=xml',fn);
}
pm.push(obj);
});
fn(pm);
});
}
window.getOutputPM(fn){
$.get('/index/14-0-1', function(data){
var pm = [];
data = $(data);
$('#pmdform tr',data).each(function(){
var id = $(this).attr('id'), obj = {};
if(!id) return;
obj.id = id.substring(3);
obj.link = $('td:eq(1) a:eq(0)',this);
obj.theme = obj.link.text();
obj.link = obj.link.attr('href');
obj.userpage = $('td:eq(1) a:eq(1)',this);
obj.username = obj.userpage.text();
obj.userpage = obj.userpage.attr('href');
obj.date = $('td:eq(2)',this).text();
obj.getText = function(fn){
$.get('/index/14-' + obj.id + '-0', function(data){
var t = $('#snewmes',data).parent().text();
fn( t.substring(0, t.length-19) );
});
}
obj.delete = function(fn){
$.get('/index/16-' + obj.id + '?_tp=xml',fn);
}
pm.push(obj);
});
fn(pm);
});
}
})(window);
Ну а теперь представим, что у нас есть некий пользователь. Наш скрипт должен отправить от него некоему пользователю Васе сообщение с темой "Ы" и сообщением "Привет". Для начала создадим новое сообщение.
var pm = new PM('Ы', 'Привет');
Затем нам надо показать пользователю капчу, если это надо, и отправить сообщение:
pm.ready(function(){
if(pm.captcha){
// создаём картинку с капчей
var img = $('<img />');
img.attr('src', pm.captcha);
img.appendTo('body');
// теперь текстовое поле
var inp = $('<input />');
inp.blur(function(){
pm.send('Вася', inp.val());
});
inp.appendTo('body');
}
else {
pm.send('Вася');
}
});
Вот и всё :). Описывать методы и свойства не буду, итак всё понятно. Добавлю, что есть функция sent(func), которая добавляет обработчик события на отправку сообщения. И свойство readyState, которое может принимать значения "loading", "ready" и "sent".
Кроме этого, мы можем получать все входящие или все исходящие сообщения пользователя. Для этого есть функции getInputPM для входящих и getOutputPM для исходящих. Синтаксис одинаковый, потому покажу только для одной функции:
getInputPM(function(pm){
// pm - массив
$.each(pm, function(){
this.theme; // тема
this.link; // ссылка на страницу сообщения
this.username; // имя пользователя, отправившего/принявшего ЛС
this.userpage; // ссылка на его страницу
this.date; // дата (в формате строки)
this.getText(function(text){ // получаем текст сообшения
// text - это и есть текст сообщения
});
this.delete(); // удаляем сообщение (можно передать функцию-обработчик)
});
});
Вот вроде и всё... С новым годом :).
|