$(function(){
"use strict";
if(location.host != purl(__HOSTNAME__).attr('host')){
location.href = __HOSTNAME__;
}
Pomo.domain = 'messages';
Pomo.unescapeStrings = true;
var _ = window._ = function(text){
try{
var t = Pomo.getText(text);
return t.translation;
}catch(e){
return text;
}
},
loadingHTML = '
',
dialogs = $('#dialogs').children('div'),
memos,
news,
channels,
templates = [],
logout = function(){
$.removeCookie('user',{
path: '/'
});
$.removeCookie('key',{
path: '/'
});
$.removeCookie('token',{
path: '/'
});
$.removeCookie('PHPSESSID',{
path: '/'
});
$.ajax(__HOSTNAME__+'site/api/',{
data: {
action: 'logout'
},
complete: function(){
location.reload();
},
dataType: 'json'
});
},
LANG = navigator.language,
lang = Pomo.load(
__HOSTNAME__+'site/api?action=lang',{
format: 'po',
mode: 'ajax'
}
),
lang_keys = (function(){
var keys = [];
$('body').find('*').contents().filter(function(){
return this.nodeType === 3;
}).each(function(){
keys.push({
node: this,
key: this.nodeValue
});
});
return keys;
})(),
has_key = function(node){
for(var i in lang_keys){
if(node === lang_keys[i].node){
return true;
}
}
return false;
},
get_key = function(node){
for(var i in lang_keys){
if(node === lang_keys[i].node){
return lang_keys[i].key;
}
}
return false;
},
translate = function(parent){
$(parent).find('*').contents().filter(function(){
return this.nodeType === 3;
}).each(function(){
if(!has_key(this)){
lang_keys.push({
node: this,
key: this.nodeValue
});
}
this.nodeValue = _(get_key(this));
});
$(parent).find('input[type=submit],input[type=button]').each(function(){
if(this.tagName == 'INPUT' && this.type == 'submit'){
if(!has_key(this)){
lang_keys.push({
node: this,
key: this.value
});
}
this.value = _(get_key(this));
}
});
};
lang.ready(function(){
$('script[id^=template-]').each(function(){
templates[this.id.substr(9)] = Handlebars.compile($(this).html());
});
Handlebars.registerHelper('html',function(body){
return new Handlebars.SafeString(body.replace(/(\b(https?|ftps?|file|irc):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"$1"));
});
$('form').submit(function(){
var form = $(this),
btn = form.children('input[type=submit]'),
action = form.children('input[type=hidden][name=action]').val();
$.ajax(__HOSTNAME__+'site/api/?'+form.serialize(),{
success: function(d){
if(d.log){
console.log(d.log);
}
btn.removeAttr('disabled');
if(d.code === 0){
switch(action){
case 'oper':
form.find('input[name=password]').val('');
alert(_('Oper updated'));
break;
default:
location.reload();
}
}else{
alert(d.message);
}
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not submit the form")+": "+msg);
btn.removeAttr('disabled');
},
dataType: 'json'
});
btn.attr('disabled','disabled');
return false;
}).children('input[type=hidden][name=action]').removeAttr('disabled');
$('#logout').click(logout);
$('#newpass-button').click(function(){
$('#newpass-diag').dialog('open');
});
$('#roles-button').click(function(){
$('#roles-diag').dialog('open');
});
$('#rehash-servers').click(function(){
$.ajax(__HOSTNAME__+'site/api/?action=rehash',{
success: function(d){
if(d.log){
console.log(d.log);
}
alert(d.message);
$('#rehash-servers').removeAttr('disabled');
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not rehash the servers")+": "+msg);
$('#rehash-servers').removeAttr('disabled');
},
dataType: 'json'
});
$(this).attr('disabled','disabled');
return false;
});
$('#2-factor-disable').click(function(){
var btn = $(this);
$.ajax(__HOSTNAME__+'site/api/?action=2-factor-delete',{
success: function(d){
if(d.log){
console.log(d.log);
}
alert(d.message);
btn.removeAttr('disabled');
location.reload();
},
error: function(xhr,msg,e){
console.error(e);
alert("Could not disable 2-factor: "+msg);
btn.removeAttr('disabled');
},
dataType: 'json'
});
$(this).attr('disabled','disabled');
return false;
});
$('#sync-pass').click(function(){
var btn = $(this);
$.ajax(__HOSTNAME__+'site/api/?action=sync-pass',{
success: function(d){
if(d.log){
console.log(d.log);
}
alert(d.message);
btn.removeAttr('disabled');
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not synchronize your password")+": "+msg);
btn.removeAttr('disabled');
},
dataType: 'json'
});
btn.attr('disabled','disabled');
return false;
});
$('#sync-groups').click(function(){
var btn = $(this);
$.ajax(__HOSTNAME__+'site/api/?action=sync-groups',{
success: function(d){
if(d.log){
console.log(d.log);
}
alert(d.message);
btn.removeAttr('disabled');
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not synchronize your groups")+": "+msg);
btn.removeAttr('disabled');
},
dataType: 'json'
});
btn.attr('disabled','disabled');
return false;
});
$('#persona-register').hover(function(){
$(this).addClass('ui-state-hover');
},function(){
$(this).removeClass('ui-state-hover');
}).click(function(){
if(confirm(_("This is an admin only feature. Continue?"))){
navigator.id.request({
siteName: 'Omninet'
});
}
});
if(navigator.id){
navigator.id.watch({
loggedInUser: $.cookie('personaUser'),
onlogin: function(assertion){
$.ajax({
type: 'post',
url: __HOSTNAME__+'site/api/?action=persona-login',
data: {
assertion: assertion
},
success: function(d){
if(d.code !== 0){
if(d.message){
console.log(d.message);
alert(d.message);
}
}
location.reload();
},
error: function(xhr,s,e){
navigator.id.logout();
alert(_("Login failure")+": " + e);
}
});
},
onlogout: function(){
//$('#logout').click();
}
});
}
$('button[id^=persona-remove-]').each(function(){
var id = this.id.substr(15),
btn = $(this);
btn.click(function(){
$.ajax(__HOSTNAME__+'site/api/?action=persona-remove&id='+id,{
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
location.reload();
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not remove persona address")+": "+msg);
btn.removeAttr('disabled');
},
dataType: 'json'
});
btn.attr('disabled','disabled');
return false;
});
});
$('.server-opers,.server-owner,.server-children,.server-parent').click(function(){
$(this).next().toggle();
}).next().hide();
$('.button,button,input[type=button],input[type=submit]').button();
$('.tabs').tabs({
activate: function(e,ui){
var url = $.url(),
params = url.data.param.query;
params.tab = ui.newPanel.attr('id');
History.pushState({},document.title,url.attr('path')+'?'+$.param(params)+url.attr('anchor'));
},
create: function(e,ui){
$(window).trigger('statechange');
},
heightStyle: 'fill'
}).addClass('transparent').each(function(){
var tabs = $(this);
tabs.parent().resize(function(){
tabs.tabs('refresh');
});
});
dialogs.dialog({
modal: true,
draggable: false,
autoOpen: false,
width: 500
});
$('.menu').menu();
$(window).on('statechange',function(){
var url = $.url(),
tab = url.param('tab'),
params = url.data.param.query,
tabel = $('.tabs').children('ul').children('li').children('a[href="#'+tab+'"]');
if(tab && tabel.length == 1){
$('.tabs').tabs('option','active',tabel.parent().index());
}else{
var href = $('.tabs').children('ul').children('li').children('a');
if(href.length > 0){
href = href.get(0).href;
}else{
href = '';
}
params.tab = $.url(href).attr('fragment');
History.pushState({},document.title,url.attr('path')+'?'+$.param(params)+url.attr('anchor'));
}
}).trigger('statechange').resize(function(){
dialogs.each(function(){
var d = $(this);
if(d.dialog('isOpen')){
d.dialog("option", "position", "center");
}
});
var b = $('#user-menu-button');
if(b.length > 0){
$('#user-menu').offset({
top: b.offset().top
});
}
});
$('#login-diag,#verify-diag').dialog('option',{
closeOnEscape: false,
close: function(){
location.href = 'http://omnimaga.org';
},
position:{
my: "center",
at: "center",
of: window
}
}).dialog('open');
if(typeof $.cookie('user') != 'undefined'){
$('#login').find('input[name=username]').val($.cookie('user'));
}
if(typeof $.cookie('type') != 'undefined'){
$('#login').find('select[name=type]').val($.cookie('type'));
}
$('#verify-diag').dialog('option','close',logout);
$('.accordion').accordion({
collapsible: true,
active: false,
heightStyle: 'content'
}).css('max-height','500px');
$('.tree').treegrid({
initialState: 'collapsed'
});
$('#user-menu-button').click(function(){
$('#user-menu').show();
});
$('#user-menu').css({
position: 'fixed',
right: '0'
}).hover(function(){},function(){
$(this).hide();
}).click(function(){
$(this).hide();
}).hide();
if(!Modernizr.inputtypes.date){
$('input[type=date]').datepicker({
dateFormat: 'yy-mm-dd'
});
}
if(!Modernizr.inputtypes.datetime){
$('input[type=datetime]').datetimepicker({
dateFormat: 'yy-mm-dd',
timeFormat:'HH:mm:ssZ'
});
}
if(!Modernizr.inputtypes.number){
$('input[type=number]').spinner();
}
window.ServerPing = function(){
console.log(_("Server Ping"));
$.ajax(__HOSTNAME__+'site/api/?action=ping',{
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
if(d.code!==0){
location.reload();
}
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not ping server")+": "+msg);
location.reload();
},
dataType: 'json'
});
setTimeout(window.ServerPing,1000*60*5); // Every 5 minutes
};
window.FetchMemos = function(once){
console.log(_("Fetching Memos"));
$('#memos').prepend(loadingHTML);
$.ajax(__HOSTNAME__+'site/api/?action=get-memos',{
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
if(d.code!==0){
location.reload();
}
var i,
m;
if(d.memos){
for(i in d.memos){
m = d.memos[i];
m.date = m.date.year+'-'+m.date.month+'-'+m.date.day+' '+m.date.time;
d.memos[i] = m;
}
if(typeof memos != 'undefined' && !once && ($(d.memos).not(memos).length !== 0 || $(memos).not(d.memos).length !== 0)){
alert('New memo');
}
memos = d.memos;
}
$('#memos').html(templates.memos(d)).find('button').button();
translate('#memos');
$('body').resize();
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not contact server")+": "+msg);
location.reload();
},
dataType: 'json'
});
if(!once){
setTimeout(window.ServerPing,1000*60); // Every minute
}
};
window.ReplyToMemo = function(from){
$('#memo-diag').dialog('open').find('input[name=to]').val(from);
$('#memo-diag').find('input[name=message]').select();
};
window.DeleteMemos = function(){
window.DeleteMemo('all',function(){
window.FetchMemos(true);
});
};
window.DeleteMemo = function(id,callback){
console.log(_("Deleting memo")+": "+id);
$('#memos').prepend(loadingHTML);
$.ajax(__HOSTNAME__+'site/api/?action=delete-memo&id='+id,{
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
if(d.code!==0){
location.reload();
}
$('#memo-'+id).remove();
if(typeof callback != 'undefined'){
callback();
}
$('#memos>.loading').remove();
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not ping server")+": "+msg);
location.reload();
},
dataType: 'json'
});
};
window.FetchNews = function(once){
console.log(_("Fetching News"));
$('#news').prepend(loadingHTML);
$.ajax(__HOSTNAME__+'site/api/?action=get-news',{
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
if(d.code!==0){
location.reload();
}
var i,
n;
if(d.news){
d.news = d.news.reverse();
for(i in d.news){
n = d.news[i];
n.date = n.date.year+'-'+n.date.month+'-'+n.date.day+' '+n.date.time;
d.news[i] = n;
}
if(typeof news != 'undefined' && !once && ($(d.news).not(news).length !== 0 || $(news).not(d.news).length !== 0)){
alert(_('New news item'));
}
news = d.news;
}
$('#news').html(templates.news(d)).find('button').button();
translate('#news');
$('body').resize();
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not contact server")+": "+msg);
location.reload();
},
dataType: 'json'
});
if(!once){
setTimeout(window.ServerPing,1000*60); // Every minute
}
};
window.FetchChannels = function(){
console.log(_("Fetching Channels"));
$('#channels').prepend(loadingHTML);
$.ajax(__HOSTNAME__+'site/api/?action=get-channels',{
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
if(d.code!==0){
location.reload();
}
var i,
j,
f,
n,
u,
div = $('');
if(d.channels && d.flags){
for(i in d.channels){
n = d.channels[i];
if(n.users){
for(j in n.users){
u = n.users[j];
if(u.flags){
for(f in u.flags){
u.flags[f] = {
flag: u.flags[f],
name: d.flags[u.flags[f]]
};
}
}
}
d.channels[i] = n;
}
}
}
div.append(templates.channels(d)).find('button').button();
translate(div);
div.find('.tree').treegrid({
initialState: 'collapsed'
});
channels = d.channels;
$('#channels').html(div.children());
$('body').resize();
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not contact server")+": "+msg);
location.reload();
},
dataType: 'json'
});
};
window.DeleteChannel = function(channel){
if(confirm(_('Are you sure you want to delete channel')+' '+channel)){
console.log(_("Deleting channel")+": "+channel);
$('#channels').prepend(loadingHTML);
$.ajax(__HOSTNAME__+'site/api/?action=delete-channel',{
data: {
channel: channel
},
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
if(d.code!==0){
location.reload();
}
$('[id=channel-'+channel+']').remove();
if(typeof callback != 'undefined'){
callback();
}
$('#channels>.loading').remove();
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not ping server")+": "+msg);
location.reload();
},
dataType: 'json'
});
}
};
window.RegisterChannel = function(channel){
console.log(_("Registering channel")+": "+channel);
$('#channels').prepend(loadingHTML);
$.ajax(__HOSTNAME__+'site/api/?action=register-channel',{
data: {
channel: channel
},
success: function(d){
if(d.log){
console.log(d.log);
}
if(d.message){
alert(d.message);
}
if(d.code!==0){
location.reload();
}
window.FetchChannels(true);
$('#channels>.loading').remove();
},
error: function(xhr,msg,e){
console.error(e);
alert(_("Could not ping server")+": "+msg);
location.reload();
},
dataType: 'json'
});
};
window.ModifyChannelAccess = function(channel,user,id){
var d = $('#channel-flags-diag');
if(typeof user != 'undefined'){
d.find('input[name=user]').val(user);
}else{
d.find('input[name=user]').val('');
}
d.find('input[type=checkbox]').prop('checked',false);
if(typeof id != 'undefined'){
$('div[id=channel-'+channel+']>table').find('tr.treegrid-parent-'+id).each(function(){
var flag = this.className.substr(9,1);
d.find('input[name^=flags]').each(function(){
if(this.name.substr(6,1) == flag){
$(this).prop('checked',true);
}
});
});
}
d.find('input[name=channel]').val(channel);
d.dialog('open');
};
setInterval(function(){
if(LANG != window.navigator.language){
console.log(_('Language change detected'));
location.reload();
}
},1000);
if(typeof delayedload == 'function'){
delayedload();
}
$('body').show();
$('body').resize();
});
});