You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

137 lines
3.8 KiB

(function($){
var $modals = null;
var $modal = null;
var $html = $(document.documentElement);
var $body = $(document.body);
var $converse = $('#conversejs');
var Template = function(tpl) {
this.content = {};
this.setContent = function(content) {
this.content = content;
return this;
}
this.render = function() {
var self = this;
return tpl.replace(/\{\{ *(\w+) *\}\}/g, function(g0, g1){
var value = self.content[g1];
if(typeof value === 'string' || value instanceof String) {
return value;
}
return '';
});
}
};
var tplform = $('#wikiplugin_xmpp_tplform').html();
var tplitem = $('#wikiplugin_xmpp_tplitem').html();
function show_modal(data) {
$modals = $modals || $('.modal.fade');
$modal = $modals.filter(':not(.show)').first();
var items = data['items'] || [];
var form = new Template(tplform);
form.setContent({
'title': data['title'],
'action': data['action'],
'room': data['room'],
'next': data['next'],
'items': items
.map(function(item){
if(!item.fullname) {
item.fullname = item.jid;
}
return item;
})
.reduce(function(html, item){
return html + (new Template(tplitem))
.setContent(item)
.render();
}, '')
});
$modal.find('.modal-dialog').html(form.render());
$modal.modal('show');
}
$(document).on('submit', 'form.wikiplugin-xmpp-form', function(evt){
evt.preventDefault();
var $form = $(this);
var room = $form.find(':input[name=room]').val();
var cursor = document.body.style.cursor;
document.body.style.cursor = 'wait';
$.ajax({
data: $form.serialize(),
dataType: 'json',
type: 'POST',
url: $form.prop('action')
})
.done(function(response){
$modal && $modal.modal('hide');
var msg = response.length + ' users added to ' + room;
feedback(msg, 'success');
})
.fail(function(){
var msg = 'Failed to add users to ' + room;
feedback(msg, 'error');
})
.always(function() {
document.body.style.cursor = cursor;
});
return false;
});
$(document).on('click', 'a[data-xmpp]', function(evt) {
evt.preventDefault();
var $this = $(this);
var data = {
'title': $this.text(),
'room': $this.data('xmpp'),
'action': $this.data('xmpp-action'),
'items': [
]
};
var cursor = document.body.style.cursor;
document.body.style.cursor = 'wait';
$.ajax({
url: data['action'],
dataType: 'json'
})
.done(function(items){
data.items = items;
show_modal(data);
})
.always(function() {
document.body.style.cursor = cursor;
});
return false;
});
if ($converse.data('view-mode') === 'fullscreen') {
$body
.css('border-width', '0')
.css('height', '100vh')
.css('margin', '0')
.css('overflow', 'hidden')
.css('padding', '0');
$converse.remove()
.css('width', '100%')
.css('height', '100%')
.css('position', 'fixed')
.css('left', 0)
.css('top', 0)
.appendTo($body);
}
})(jQuery);