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/cp/js/admincp.js

388 lines
No EOL
8.7 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 */
Array.prototype.inArray = function (value) {
for (var i = 0; i < this.length; i++) {
if (this[i] === value) {
return true;
}
}
return false;
};
var AdminCP = function() {
var self = this;
var args = arguments;
$(function(){
self.init.apply(self, args);
});
};
AdminCP.prototype = {
z: 5,
animSpeed: 'normal',
curSection: 'login',
curPrefPane: 'administration',
curAboutPane: 'about',
init: function(options) {
this.initializing = true;
this.loginForm();
this.initEvents();
if (this.loaded()) {
this.afterLogin();
} else {
$('#login-password')[0].focus();
}
this.initializing = false;
},
loginForm: function() {
$('#login-loading').fadeTo(1, 0);
},
initEvents: function() {
var self = this;
$('#login-form').submit(function() { self.login(); return false; });
$('#n-prefs').click(function() { self.show('preferences'); return false; });
$('#n-bans').click(function() { self.show('bans'); return false; });
$('#n-about').click(function() { self.show('about'); return false; });
},
afterLogin: function() {
var self = this;
// Login and logout
$('#login-password')[0].blur();
$('.logout').click(function() { self.logout(); return false; });
// Show the nav
if (this.initializing) {
$('#nav ul').css('display', 'block');
} else {
$('#nav ul').slideDown();
}
// Some css for betterlookingness
$('#preferences-form fieldset:odd').addClass('odd');
$('#preferences-form fieldset:even').addClass('even');
$('#bans-list li:odd').addClass('odd');
$('#bans-list li:even').addClass('even');
// Hide the loading thingie
$('.sn-loading').fadeTo(1, 0);
// Events after load
this.initEventsAfter();
// If they want to go directly to a section
var anchor = this.getAnchor();
if (anchor.length > 0 && ['preferences', 'bans', 'about'].inArray(anchor)) {
self.show(anchor);
} else {
self.show('preferences');
}
},
initEventsAfter: function() {
var self = this;
// Navigation
$('#sn-administration').click(function() { self.showPrefPane('administration'); return false; });
$('#sn-display').click(function() { self.showPrefPane('display'); return false; });
$('#sn-about').click(function() { self.showAboutPane('about'); return false; });
$('#sn-contact').click(function() { self.showAboutPane('contact'); return false; });
$('#sn-resetall').click(function() { self.resetPrefs(); return false; });
$('#sn-unbanall').click(function() { self.unbanAll(); return false; });
// Bans
$('.unban-link').click(function() {
self.unban($(this).parent().find('.ip').html(), $(this).parent());
return false;
});
// Preferences
$('#preferences-form input').keypress(function(e) {
var key = window.event ? e.keyCode : e.which;
if (key === 13 || key === 3) {
self.changePref.apply(self, [$(this).attr('rel'), this.value]);
return false;
}
}).focus(function() {
this.name = this.value;
}).blur(function() {
if (this.name !== this.value) {
self.changePref.apply(self, [$(this).attr('rel'), this.value]);
}
});
$('#preferences-form select').change(function() {
self.changePref.apply(self, [$(this).attr('rel'), $(this).find('option:selected').attr('rel')]);
});
},
changePref: function(pref, value) {
this.loading();
var pars = {
mode: 'setpreference',
preference: pref,
'value': value
};
this.ajax(function(json) {
if (!json.error) {
this.done();
} else {
alert(json.error);
}
}, pars);
},
resetPrefs: function() {
this.loading();
var pars = {
mode: 'resetpreferences'
};
this.ajax(function(json) {
this.done();
if (json.prefs) {
for (pref in json.prefs) {
var value = json.prefs[pref];
var el = $('#preferences-form input[@rel=' + pref + '], select[@rel=' + pref + ']')[0];
if (el.type === 'text') {
el.value = value;
} else {
if (value === true) { value = 'true'; }
if (value === false) { value = 'false'; }
$('#preferences-form select[@rel=' + pref + ']')
.find('option')
.removeAttr('selected')
.end()
.find('option[@rel=' + value + ']')
.attr('selected', 'yeah');
}
}
}
}, pars);
},
invalidPassword: function() {
// Shake the login form
$('#login-form')
.animate({ marginLeft: -145 }, 100)
.animate({ marginLeft: -155 }, 100)
.animate({ marginLeft: -145 }, 100)
.animate({ marginLeft: -155 }, 100)
.animate({ marginLeft: -150 }, 50);
$('#login-password').val('').focus();
},
login: function() {
if (this.loaded()) {
alert('Something _really_ weird has happened. Refresh and pretend nothing ever happened.');
return;
}
var self = this;
var pars = {
mode: 'login',
password: $('#login-password').val()
};
this.loginLoading();
this.ajax(function() {
this.ajax(function(json) {
self.loginDone();
if (json.error) {
self.invalidPassword();
return;
}
$('#content').append(json.html);
self.afterLogin.apply(self);
}, pars);
}, pars);
},
logout: function() {
var self = this;
var pars = {
mode: 'logout'
};
this.loading();
this.ajax(function() {
$('#login-password').val('');
$('#nav ul').slideUp();
self.show('login', function() {
$('#login-password')[0].focus();
$('.section').not('#login').remove();
self.done();
});
}, pars);
},
show: function(section, callback) {
// var sections = ['login', 'preferences', 'bans', 'about'];
// if (!sections.inArray(section)) section = 'preferences';
if ($.browser.msie) {
if (section === 'preferences') {
$('#preferences select').css('display', 'block');
} else {
$('#preferences select').css('display', 'none');
}
}
if (section === this.curSection) { return; }
this.curSection = section;
$('#' + section)[0].style.zIndex = ++this.z;
if (this.initializing) {
$('#' + section).css('display', 'block');
} else {
$('#' + section).fadeIn(this.animSpeed, callback);
}
},
showPrefPane: function(pane) {
var self = this;
if (pane === this.curPrefPane) { return; }
this.curPrefPane = pane;
$('#preferences .cp-pane').css('display', 'none');
$('#cp-pane-' + pane).css('display', 'block').fadeIn(this.animSpeed, function() {
if (self.curPrefPane === pane) {
$('#preferences .cp-pane').not('#cp-pane-' + pane).css('display', 'none');
} else {
$('#cp-pane-' + pane).css('display', 'none');
}
});
},
showAboutPane: function(pane) {
var self = this;
if (pane === this.curAboutPane) { return; }
this.curAboutPane = pane;
$('#about .cp-pane').css('display', 'none');
$('#cp-pane-' + pane).css('display', 'block').fadeIn(this.animSpeed, function() {
if (self.curAboutPane === pane) {
$('#about .cp-pane').not('#cp-pane-' + pane).css('display', 'none');
} else {
$('#cp-pane-' + pane).css('display', 'none');
}
});
},
ajax: function(callback, pars, html) {
var self = this;
$.post('ajax.php', pars, function(parse) {
// alert(parse);
if (parse) {
if (html) {
callback.apply(self, [parse]);
} else {
callback.apply(self, [self.json(parse)]);
}
} else {
callback.apply(self);
}
});
},
json: function(parse) {
var json = eval('(' + parse + ')');
return json;
},
loaded: function() {
return ($('#cp-loaded').length === 1);
},
loading: function() {
$('#' + this.curSection + ' .sn-loading').fadeTo(this.animSpeed, 1);
},
done: function() {
$('#' + this.curSection + ' .sn-loading').fadeTo(this.animSpeed, 0);
},
loginLoading: function() {
$('#login-password').animate({
width: 134
});
$('#login-loading').fadeTo(this.animSpeed, 1);
},
loginDone: function() {
$('#login-password').animate({
width: 157
});
$('#login-loading').fadeTo(this.animSpeed, 0);
},
getAnchor: function() {
var href = window.location.href;
if (href.indexOf('#') > -1 ) {
return href.substr(href.indexOf('#') + 1).toLowerCase();
}
return '';
},
unban: function(ip, el) {
var self = this;
this.loading();
var pars = {
mode: 'unban',
'ip': ip
};
this.ajax(function(json) {
if (!json.error) {
$(el).fadeOut(function() {
$(this).remove();
$('#bans-list li:odd').removeClass('even').addClass('odd');
$('#bans-list li:even').removeClass('odd').addClass('even');
}, this.animSpeed);
}
self.done();
}, pars);
},
unbanAll: function() {
this.loading();
var pars = {
mode: 'unbanall'
};
this.ajax(function(json) {
this.done();
$('#bans-list').fadeOut(this.animSpeed, function() {
$('#bans-list').children().remove();
$('#bans-list').fadeIn();
});
}, pars);
}
};
var cp = new AdminCP();