Tu mam kod JS od Shoutboxa w którym chce zrobić żeby Administratorzy pisali na Zielono.
String.prototype.sReplace = function(find, replace) {
return this.split(find).join(replace);
};
String.prototype.repeat = function(times) {
var rep = new Array(times + 1);
return rep.join(this);
}
var YShout = function() {
var self = this;
var args = arguments;
$(document).ready(function() {
self.init.apply(self, args);
});
}
var yShout;
YShout.prototype = {
animSpeed: 300,
p: [],
init: function(options) {
yShout = this;
var self = this;
this.initializing = true;
var dOptions = {
yPath: 'yshout/',
log: 1
};
this.options = jQuery.extend(dOptions, options);
this.postNum = 0;
this.floodAttempt = 0;
// Correct for missing trailing /
if ((this.options.yPath.length > 0) && (this.options.yPath.charAt(this.options.yPath.length - 1) != '/'))
this.options.yPath += '/';
if (this.options.yLink) {
if (this.options.yLink.charAt(0) != '#')
this.options.yLink = '#' + this.options.yLink;
$(this.options.yLink).click(function() {
self.openYShout.apply(self);
return false;
});
}
// Load YShout from a link, in-page
if (this.options.h_loadlink) {
$(this.options.h_loadlink).click(function() {
$('#yshout').css('display', 'block');
$(this).unbind('click').click(function() { return false; });
return false;
});
this.load(true);
} else
this.load();
},
load: function(hidden) {
if ($('#yshout').length == 0) return;
if (hidden) $('#yshout').css('display', 'none');
this.ajax(this.initialLoad, {
reqType: 'init',
yPath: this.options.yPath,
log: this.options.log
});
},
initialLoad: function(updates) {
if (updates.yError) alert('There appears to be a problem: \n' + updates.yError + '\n\nIf you haven\'t already, try chmodding everything inside the YShout directory to 777.');
this.d('In initialLoad');
var self = this;
this.prefs = jQuery.extend(updates.prefs, this.options.prefs);
this.initForm();
this.initRefresh();
this.initLinks();
if (this.prefs.flood) this.initFlood();
if (updates.nickname)
$('#ys-input-nickname')
.removeClass('ys-before-focus')
.addClass( 'ys-after-focus')
.val(updates.nickname);
if (updates)
this.updates(updates);
if (!this.prefs.doTruncate) {
$('#ys-posts').css('height', $('#ys-posts').height + 'px');
}
if (!this.prefs.inverse) {
var postsDiv = $('#ys-posts')[0];
postsDiv.scrollTop = postsDiv.scrollHeight;
}
this.markEnds();
this.initializing = false;
},
initForm: function() {
this.d('In initForm');
var postForm =
'' +
'' +
(this.prefs.showSubmit ? '' : '') +
(this.prefs.postFormLink == 'cp' ? 'Admin CP' : '') +
(this.prefs.postFormLink == 'history' ? 'View History' : '') +
'';
var postsDiv = '
‘; if (this.prefs.inverse) $(’#yshout’).html(postForm + postsDiv); else $(’#yshout’).html(postsDiv + postForm); $(’#ys-posts’) .before(’
‘) .after(’
‘); $(’#ys-post-form’) .before(’
‘) .after(’
‘); var self = this; var defaults = { ‘ys-input-nickname’: self.prefs.defaultNickname, ‘ys-input-message’: self.prefs.defaultMessage }; var keypress = function(e) { var key = window.event ? e.keyCode : e.which; if (key == 13 || key == 3) { self.send.apply(self); return false; } }; var focus = function() { if (this.value == defaults[this.id]) $(this).removeClass(‘ys-before-focus’).addClass( ‘ys-after-focus’).val(’’); }; var blur = function() { if (this.value == ‘’) $(this).removeClass(‘ys-after-focus’).addClass(‘ys-before-focus’).val(defaults[this.id]); }; $(’#ys-input-message’).keypress(keypress).focus(focus).blur(blur); $(’#ys-input-nickname’).keypress(keypress).focus(focus).blur(blur); $(’#ys-input-submit’).click(function(){ self.send.apply(self) }); $(’#ys-post-form’).submit(function(){ return false }); }, initRefresh: function() { var self = this; if (this.refreshTimer) clearInterval(this.refreshTimer) this.refreshTimer = setInterval(function() { self.ajax(self.updates, { reqType: ‘refresh’ }); }, this.prefs.refresh); // ! 3000…? }, initFlood: function() { this.d(‘in initFlood’); var self = this; this.floodCount = 0; this.floodControl = false; this.floodTimer = setInterval(function() { self.floodCount = 0; }, this.prefs.floodTimeout); }, initLinks: function() { if ($.browser.msie) return; var self = this; $(’#ys-cp-link’).click(function() { self.openCP.apply(self); return false; }); $(’#ys-history-link’).click(function() { self.openHistory.apply(self); return false; }); }, openCP: function() { var self = this; if (this.cpOpen) return; this.cpOpen = true; var url = this.options.yPath + ‘cp/’; $(‘body’).append(’
CloseView History’);
$(’#ys-overlay, #ys-closeoverlay-link’).click(function() {
self.reload.apply(self, [true]);
self.closeCP.apply(self);
return false;
});
$(’#ys-switchoverlay-link’).click(function() {
self.closeCP.apply(self);
self.openHistory.apply(self);
return false;
});
},
closeCP: function() {
this.cpOpen = false;
$(’#ys-overlay, #ys-cp’).remove();
},
openHistory: function() {
var self = this;
if (this.hOpen) return;
this.hOpen = true;
var url = this.options.yPath + ‘history/?log=’+ this.options.log;
$(‘body’).append(’
$(’#ys-overlay, #ys-closeoverlay-link’).click(function() {
self.reload.apply(self, [true]);
self.closeHistory.apply(self);
return false;
});
$(’#ys-switchoverlay-link’).click(function() {
self.closeHistory.apply(self);
self.openCP.apply(self);
return false;
});
},
closeHistory: function() {
this.hOpen = false;
$(’#ys-overlay, #ys-history’).remove();
},
openYShout: function() {
var self = this;
if (this.ysOpen) return;
this.ysOpen = true;
url = this.options.yPath + ‘example/yshout.html’;
$(‘body’).append(’
$(’#ys-overlay, #ys-closeoverlay-link’).click(function() {
self.reload.apply(self, [true]);
self.closeYShout.apply(self);
return false;
});
},
closeYShout: function() {
this.ysOpen = false;
$(’#ys-overlay, #ys-yshout’).remove();
},
send: function() {
if (!this.validate()) return;
if (this.prefs.flood this.floodControl) return;
var postNickname = $(’#ys-input-nickname’).val(), postMessage = $(’#ys-input-message’).val();
if (postMessage == ‘/cp’)
this.openCP();
else if (postMessage == ‘/history’)
this.openHistory();
else
this.ajax(this.updates, {
reqType: ‘post’,
nickname: postNickname,
message: postMessage
});
$(’#ys-input-message’).val(’’)
if (this.prefs.flood) this.flood();
},
validate: function() {
var nickname = $(’#ys-input-nickname’).val(),
message = $(’#ys-input-message’).val(),
error = false;
var showInvalid = function(input) {
$(input).removeClass(‘ys-input-valid’).addClass(‘ys-input-invalid’)[0].focus();
error = true;
}
var showValid = function(input) {
$(input).removeClass(‘ys-input-invalid’).addClass(‘ys-input-valid’);
}
if (nickname == ‘’ || nickname == this.prefs.defaultNickname)
showInvalid(’#ys-input-nickname’);
else
showValid(’#ys-input-nickname’);
if (message == ‘’ || message == this.prefs.defaultMessage)
showInvalid(’#ys-input-message’);
else
showValid(’#ys-input-message’);
return !error;
},
flood: function() {
var self = this;
this.d(‘in flood’);
if (this.floodCount this.prefs.floodMessages) {
this.floodCount++;
return;
}
this.floodAttempt++;
this.disable();
if (this.floodAttempt == this.prefs.autobanFlood)
this.banSelf(‘You have been banned for flooding the shoutbox!’);
setTimeout(function() {
self.floodCount = 0;
self.enable.apply(self);
}, this.prefs.floodDisable);
},
disable: function () {
$(’#ys-input-submit’)[0].disabled = true;
this.floodControl = true;
},
enable: function () {
$(’#ys-input-submit’)[0].disabled = false;
this.floodControl = false;
},
findBySame: function(ip) {
if (!$.browser.safari) return;
var same = [];
for (var i = 0; i this.p.length; i++)
if (this.p[i].adminInfo.ip == ip)
same.push(this.p[i]);
for (var i = 0; i same.length; i++) {
$(’#’ + same[i].id).fadeTo(this.animSpeed, .8).fadeTo(this.animSpeed, 1);
}
},
updates: function(updates) {
if (!updates) return;
if (updates.prefs) this.prefs = updates.prefs;
if (updates.posts) this.posts(updates.posts);
if (updates.banned) this.banned();
},
banned: function() {
var self = this;
clearInterval(this.refreshTimer);
clearInterval(this.floodTimer);
if (this.initializing)
$(’#ys-post-form’).css(‘display’, ‘none’);
else
$(’#ys-post-form’).fadeOut(this.animSpeed);
if ($(’#ys-banned’).length == 0) {
$(’#ys-input-message’)[0].blur();
$(’#ys-posts’).append(‘
’);$(’#ys-banned-cp-link’).click(function() {
self.openCP.apply(self);
return false;
});
$(’#ys-unban-self’).click(function() {
self.ajax(function(json) {
if (!json.error)
self.unbanned();
else if (json.error == ‘admin’)
alert(‘You can only unban yourself if you’re an admin.’);
}, { reqType: ‘unbanself’ });
return false;
});
}
},
unbanned: function() {
var self = this;
$(’#ys-banned’).fadeOut(function() { $(this).remove(); });
this.initRefresh();
$(’#ys-post-form’).css(‘display’, ‘block’).fadeIn(this.animSpeed, function(){
self.reload();
});
},
posts: function§ {
for (var i = 0; i p.length; i++) {
this.post(p[i]);
}
this.truncate();
if (!this.prefs.inverse) {
var postsDiv = $(’#ys-posts’)[0];
postsDiv.scrollTop = postsDiv.scrollHeight;
}
},
post: function(post) {
var self = this;
var pad = function(n) { return n 9 ? n : ‘0’ + n; };
var date = function(ts) { return new Date(ts * 1000); };
var time = function(ts) {
var d = date(ts);
var h = d.getHours(), m = d.getMinutes();
if (self.prefs.timestamp == 12) {
h = (h 12 ? h - 12 : h);
if (h == 0) h = 12;
}
return pad(h) + ‘:’ + pad(m);
};
var dateStr = function(ts) {
var t = date(ts);
var Y = t.getFullYear();
var M = t.getMonth();
var D = t.getDay();
var d = t.getDate();
var day = [‘Sunday’, ‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Saturday’][D];
var mon = [‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’, ‘May’, ‘Jun’,
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][M];
return day + ’ ’ + mon + '. ’ + d + ', ’ + Y;
};
var self = this;
this.postNum++;
var id = ‘ys-post-’ + this.postNum;
post.id = id;
post.message = this.links(post.message);
post.message = this.smileys(post.message);
post.message = this.bbcode(post.message);
var html =
‘
(this.prefs.timestamp 0 ? ‘’ + time(post.timestamp) + ’ ’ : ‘’) +
‘’ + post.nickname + this.prefs.nicknameSeparator + ’ ’ +
‘’ + post.message + ’ ’ +
‘’ + (post.adminInfo ? 'IP: ’ + post.adminInfo.ip + ', ’ : ‘’) + 'Posted: ’ + dateStr(post.timestamp) + ’ at ’ + time(post.timestamp) + ‘.’ +
‘Info’ + (post.adminInfo ? ’ | Delete | ’ + (post.banned ? ‘Unban’ : ‘Ban’) : ‘’) + ‘’ +
‘
if (this.prefs.inverse) $(’#ys-posts’).prepend(html);
else $(’#ys-posts’).append(html);
this.p.push(post);
$(’#’ + id)
.find(’.ys-post-nickname’).click(function() {
if (post.adminInfo)
self.findBySame(post.adminInfo.ip);
}).end()
.find(’.ys-info-link’).toggle(
function() { self.showInfo.apply(self, [id, this]); return false; },
function() { self.hideInfo.apply(self, [id, this]); return false; })
.end()
.find(’.ys-ban-link’).click(
function() { self.ban.apply(self, [post, id]); return false; })
.end()
.find(’.ys-delete-link’).click(
function() { self.del.apply(self, [post, id]); return false; });
},
showInfo: function(id, el) {
var jEl = $(’#’ + id + ’ .ys-post-info’);
if (this.prefs.info == ‘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 (this.prefs.info == ‘overlay’)
jEl.fadeOut(this.animSpeed);
else
jEl.slideUp(this.animSpeed);
el.innerHTML = ‘Info’;
return false;
},
ban: function(post, id) {
var self = this;
var link = $(’#’ + id).find(’.ys-ban-link’)[0];
switch(link.innerHTML) {
case ‘Ban’:
var pars = {
reqType: ‘ban’,
ip: post.adminInfo.ip,
nickname: post.nickname
};
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;
}
//alert('p: ’ + this.p + ’ / ’ + this.p.length);
if (json.bannedSelf)
self.banned(); // ?
else
$.each(self.p, function(i) {
if (this.adminInfo this.adminInfo.ip == post.adminInfo.ip)
$(’#’ + this.id)
.addClass(‘ys-banned-post’)
.find(’.ys-ban-link’).html(‘Unban’);
});
}, pars);
link.innerHTML = ‘Banning…’;
return false;
break;
case ‘Banning…’:
return false;
break;
case ‘Unban’:
var pars = {
reqType: ‘unban’,
ip: post.adminInfo.ip
};
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;
break;
}
}
$.each(self.p, function(i) {
if (this.adminInfo this.adminInfo.ip == post.adminInfo.ip)
$(’#’ + this.id)
.removeClass(‘ys-banned-post’)
.find(’.ys-ban-link’).html(‘Ban’);
});
}, pars);
link.innerHTML = ‘Unbanning…’;
return false;
break;
case ‘Unbanning…’:
return false;
break;
}
},
del: function(post, id) {
var self = this;
var link = $(’#’ + id).find(’.ys-delete-link’)[0];
if (link.innerHTML == ‘Deleting…’) return;
var pars = {
reqType: ‘delete’,
uid: post.uid
};
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;
break;
}
}
self.reload();
}, pars);
link.innerHTML = ‘Deleting…’;
return false;
},
banSelf: function(reason) {
var self = this;
this.ajax(function(json) {
if (json.error == false)
self.banned();
}, {
reqType: ‘banself’,
nickname: $(’#ys-input-nickname’).val()
});
},
bbcode: function(s) {
s = s.sReplace(’’, ‘’);
s = s.sReplace(’’, ‘’);
s = s.sReplace(’’, ‘’);
return s;
},
smileys: function(s) {
var yp = this.options.yPath;
var smile = function(str, smiley, image) {
return str.sReplace(smiley, ’
’ + message + ‘’);
return message;
}
};[/code]
Szukałem bardzo długo i nie znalazłem może mi ktoś pomóc?
I na tej stronie znajduje się mój Shoutbox http://e-shoutbox.tk/