This repository has been archived on 2024-09-05. You can view files and clone it, but cannot push or open issues or pull requests.
shimmie2/ext/chatbox/history/js/history.js

276 lines
5.9 KiB
JavaScript

/*jshint bitwise:true, curly:true, devel:true, eqeqeq:true, evil:true, forin:false, noarg:true, noempty:true, nonew:true, undef:true, strict:false, browser:true, jquery:true */
var History = function() {
var self = this;
var args = arguments;
$(function(){
self.init.apply(self, args);
});
};
History.prototype = {
animSpeed: 'normal',
noPosts: '<div id="ys-post-1" class="ys-post ys-first ys-admin-post">\n<span class="ys-post-timestamp">13:37</span>\n<span class="ys-post-nickname">Yurivish:<span>\n<span class="ys-post-message">Hey, there aren\'t any posts in this log.</span>\n</div>',
init: function(options) {
this.prefsInfo = options.prefsInfo;
this.log = options.log;
this.initEvents();
$('body').ScrollToAnchors({ duration: 800 });
},
initEvents: function() {
var self = this;
this.initLogEvents();
// Select log
$('#log').change(function() {
var logIndex = $(this).find('option[@selected]').attr('rel');
var pars = {
p: 'yes',
log: logIndex
};
self.ajax(function(html) {
$('#ys-posts').html(html);
$('#yshout').fadeIn();
self.initLogEvents();
}, pars, true, 'index.php');
});
// Clear the log
$('#clear-log').click(function() {
var el = this;
var pars = {
reqType: 'clearlog'
};
self.ajax(function(json) {
if (json.error) {
switch(json.error) {
case 'admin':
self.error('You\'re not an admin. Log in through the admin CP to clear the log.');
el.innerHTML = 'Clear this log';
return;
}
}
$('#ys-posts').html(self.noPosts);
self.initLogEvents();
el.innerHTML = 'Clear this log';
}, pars);
this.innerHTML = 'Clearing...';
return false;
});
// Clear all logs
$('#clear-logs').click(function() {
var el = this;
var pars = {
reqType: 'clearlogs'
};
self.ajax(function(json) {
if (json.error) {
switch(json.error) {
case 'admin':
el.innerHTML = 'Clear all logs';
self.error('You\'re not an admin. Log in through the admin CP to clear logs.');
return;
}
}
$('#ys-posts').html(self.noPosts);
self.initLogEvents();
el.innerHTML = 'Clear all logs';
}, pars);
this.innerHTML = 'Clearing...';
return false;
});
},
initLogEvents: function() {
var self = this;
$('#yshout .ys-post')
.find('.ys-info-link').toggle(
function() { self.showInfo.apply(self, [$(this).parent().parent()[0].id, this]); return false; },
function() { self.hideInfo.apply(self, [$(this).parent().parent()[0].id, this]); return false; })
.end()
.find('.ys-ban-link').click(
function() { self.ban.apply(self, [$(this).parent().parent()[0]]); return false; })
.end()
.find('.ys-delete-link').click(
function() { self.del.apply(self, [$(this).parent().parent()[0]]); return false; });
},
showInfo: function(id, el) {
var jEl = $('#' + id + ' .ys-post-info');
if (jEl.length === 0) { return false; }
if (this.prefsInfo === 'overlay') {
jEl.css('display', 'block').fadeIn(this.animSpeed);
} else {
jEl.slideDown(this.animSpeed);
}
el.innerHTML ='Close Info';
return false;
},
hideInfo: function(id, el) {
var jEl = $('#' + id + ' .ys-post-info');
if (jEl.length === 0) { return false; }
if (this.prefsInfo === 'overlay') {
jEl.fadeOut(this.animSpeed);
} else {
jEl.slideUp(this.animSpeed);
}
el.innerHTML = 'Info';
return false;
},
ban: function(post) {
var self = this;
var link = $('#' + post.id).find('.ys-ban-link')[0];
switch(link.innerHTML)
{
case 'Ban':
var pIP = $(post).find('.ys-h-ip').html();
var pNickname = $(post).find('.ys-h-nickname').html();
var pars = {
log: self.log,
reqType: 'ban',
ip: pIP,
nickname: pNickname
};
this.ajax(function(json) {
if (json.error) {
switch (json.error) {
case 'admin':
self.error('You\'re not an admin. Log in through the admin CP to ban people.');
break;
}
return;
}
$('#yshout .ys-post[@rel="' + pars.ip + '"]')
.addClass('ys-banned-post')
.find('.ys-ban-link')
.html('Unban');
}, pars);
link.innerHTML = 'Banning...';
return false;
case 'Banning...':
return false;
case 'Unban':
var pIP = $(post).find('.ys-h-ip').html();
var pars = {
reqType: 'unban',
ip: pIP
};
this.ajax(function(json) {
if (json.error) {
switch(json.error) {
case 'admin':
self.error('You\'re not an admin. Log in through the admin CP to unban people.');
return;
}
}
$('#yshout .ys-post[@rel="' + pars.ip + '"]')
.removeClass('ys-banned-post')
.find('.ys-ban-link')
.html('Ban');
}, pars);
link.innerHTML = 'Unbanning...';
return false;
case 'Unbanning...':
return false;
}
},
del: function(post) {
var self = this;
var link = $('#' + post.id).find('.ys-delete-link')[0];
if (link.innerHTML === 'Deleting...') { return; }
var pUID = $(post).find('.ys-h-uid').html();
var pars = {
reqType: 'delete',
uid: pUID
};
self.ajax(function(json) {
if (json.error) {
switch(json.error) {
case 'admin':
self.error('You\'re not an admin. Log in through the admin CP to ban people.');
return;
}
}
$(post).slideUp(self.animSpeed);
}, pars);
link.innerHTML = 'Deleting...';
return false;
},
json: function(parse) {
var json = eval('(' + parse + ')');
return json;
},
ajax: function(callback, pars, html, page) {
pars = jQuery.extend({
reqFor: 'history',
log: this.log
}, pars);
var self = this;
if (page === null) { page = '../yshout.php'; }
$.post(page, pars, function(parse) {
if (parse) {
if (html) {
callback.apply(self, [parse]);
} else {
callback.apply(self, [self.json(parse)]);
}
} else {
callback.apply(self);
}
});
},
error: function(err) {
alert(err);
}
};