/* Jappix - An open social platform These are the Roster Item Exchange JS script for Jappix ------------------------------------------------- License: AGPL Author: Vanaryon Last revision: 23/06/11 */ // Opens the welcome tools function openRosterX(data) { // Popup HTML content var html = '<div class="top">' + _e("Suggested friends") + '</div>' + '<div class="content">' + '<div class="rosterx-head">' + '<a href="#" class="uncheck">' + _e("Uncheck all") + '</a>' + '<a href="#" class="check">' + _e("Check all") + '</a>' + '</div>' + '<div class="results"></div>' + '</div>' + '<div class="bottom">' + '<a href="#" class="finish save">' + _e("Save") + '</a>' + '<a href="#" class="finish cancel">' + _e("Cancel") + '</a>' + '</div>'; // Create the popup createPopup('rosterx', html); // Associate the events launchRosterX(); // Parse the data parseRosterX(data); logThis('Roster Item Exchange popup opened.'); } // Closes the welcome tools function closeRosterX() { // Destroy the popup destroyPopup('rosterx'); return false; } // Parses a rosterx query function parseRosterX(data) { // Main selector var x = $(data).find('x[xmlns=' + NS_ROSTERX + ']:first'); // Parse data x.find('item').each(function() { // Generate group XML var group = ''; $(this).find('group').each(function() { group += '<group>' + $(this).text().htmlEnc() + '</group>'; }); if(group) group = '<groups>' + group + '</groups>'; // Display it! displayRosterX($(this).attr('jid'), $(this).attr('name'), group, $(this).attr('action')); }); // Click to check/uncheck $('#rosterx .oneresult').click(function(evt) { // No need to apply when click on input if($(evt.target).is('input[type=checkbox]')) return; // Input selector var checkbox = $(this).find('input[type=checkbox]'); // Check or uncheck? if(checkbox.filter(':checked').size()) checkbox.removeAttr('checked'); else checkbox.attr('checked', true); }); } // Displays a rosterx item function displayRosterX(xid, nick, group, action) { // End if no XID if(!xid) return false; // Set up a default action if no one if(!action || (action != 'modify') || (action != 'delete')) action = 'add'; // Override "undefined" for nickname if(!nick) nick = ''; // Display it $('#rosterx .results').append( '<div class="oneresult">' + '<input type="checkbox" checked="" data-name="' + encodeQuotes(nick) + '" data-xid="' + encodeQuotes(xid) + '" data-action="' + encodeQuotes(action) + '" data-group="' + encodeQuotes(group) + '" />' + '<span class="name">' + nick.htmlEnc() + '</span>' + '<span class="xid">' + xid.htmlEnc() + '</span>' + '<span class="action ' + action + ' talk-images"></span>' + '</div>' ); } // Saves the rosterx settings function saveRosterX() { // Send the requests $('#rosterx .results input[type=checkbox]').filter(':checked').each(function() { // Read the attributes var nick = $(this).attr('data-name'); var xid = $(this).attr('data-xid'); var action = $(this).attr('data-action'); var group = $(this).attr('data-group'); // Parse groups XML if(group) { var group_arr = [] $(group).find('group').each(function() { group_arr.push($(this).text().revertHtmlEnc()); }); } // Process the asked action var roster_item = $('#buddy-list .' + hex_md5(xid)); switch(action) { // Buddy add case 'add': if(!exists(roster_item)) { sendSubscribe(xid, 'subscribe'); sendRoster(xid, '', nick, group_arr); } break; // Buddy edit case 'modify': if(exists(roster_item)) sendRoster(xid, '', nick, group_arr); break; // Buddy delete case 'delete': if(exists(roster_item)) sendRoster(xid, 'remove'); break; } }); // Close the popup closeRosterX(); } // Plugin launcher function launchRosterX() { // Click events $('#rosterx .bottom .finish').click(function() { if($(this).is('.save')) return saveRosterX(); if($(this).is('.cancel')) return closeRosterX(); }); $('#rosterx .rosterx-head a').click(function() { if($(this).is('.check')) $('#rosterx .results input[type=checkbox]').attr('checked', true); else if($(this).is('.uncheck')) $('#rosterx .results input[type=checkbox]').removeAttr('checked'); return false; }); }