1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jappix_ynh.git synced 2024-09-03 19:26:19 +02:00
jappix_ynh/source/app/javascripts/options.js

1008 lines
34 KiB
JavaScript
Raw Normal View History

2014-03-12 14:52:47 +01:00
/*
Jappix - An open social platform
These are the options JS scripts for Jappix
-------------------------------------------------
License: AGPL
Author: Valérian Saliou, Maranda
*/
// Bundle
var Options = (function () {
/**
* Alias of this
* @private
*/
var self = {};
2014-04-08 20:14:28 +02:00
/**
2014-03-12 14:52:47 +01:00
* Opens the options popup
* @public
* @return {boolean}
*/
self.open = function() {
try {
// Popup HTML content
2014-11-25 23:42:38 +01:00
var html =
'<div class="top">' + Common._e("Edit options") + '</div>' +
'<div class="tab">' +
'<a href="#" class="tab-general tab-active" data-key="1">' + Common._e("General") + '</a>' +
'<a href="#" class="tab-channel pubsub-hidable pubsub-hidable-cn" data-key="2">' + Common._e("Channel") + '</a>' +
'<a href="#" class="tab-account" data-key="3">' + Common._e("Account") + '</a>' +
'</div>' +
'<div class="content">' +
'<div id="conf1" class="lap-active one-lap forms">' +
'<fieldset class="privacy">' +
'<legend>' + Common._e("Privacy") + '</legend>' +
2014-03-12 14:52:47 +01:00
'<div class="geolocation">' +
2014-11-25 23:42:38 +01:00
'<label for="geolocation" class="pep-hidable">' + Common._e("Geolocation") + '</label>' +
'<input id="geolocation" type="checkbox" class="pep-hidable" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
'<div class="archiving">' +
2014-11-25 23:42:38 +01:00
'<label for="archiving" class="mam-hidable">' + Common._e("Message archiving") + '</label>' +
'<select id="archiving" class="mam-hidable">' +
'<option value="never">' + Common._e("Disabled") + '</option>' +
'<option value="roster">' + Common._e("Store friend chats") + '</option>' +
'<option value="always">' + Common._e("Store all chats") + '</option>' +
'</select>' +
'<a href="#" class="linked empty-archives mam-purge-hidable">' + Common._e("Remove all archives") + '</a>' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
'</fieldset>' +
'<fieldset class="application">' +
'<legend>' + Common._e("Application") + '</legend>' +
2014-03-12 14:52:47 +01:00
'<div class="sounds">' +
2014-11-25 23:42:38 +01:00
'<label for="sounds">' + Common._e("Sounds") + '</label>' +
'<input id="sounds" type="checkbox" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
'<div class="showall">' +
2014-11-25 23:42:38 +01:00
'<label for="showall">' + Common._e("Show all friends") + '</label>' +
'<input id="showall" type="checkbox" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
'<div class="groupchatpresence">' +
2014-11-25 23:42:38 +01:00
'<label for="groupchatpresence">' + Common._e("Groupchat presence messages") + '</label>' +
'<input id="groupchatpresence" type="checkbox" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
'<div class="noxhtmlimg">' +
2014-11-25 23:42:38 +01:00
'<label for="noxhtmlimg">' + Common._e("No chat images auto-load") + '</label>' +
'<input id="noxhtmlimg" type="checkbox" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
'<div class="integratemedias">' +
2014-11-25 23:42:38 +01:00
'<label for="integratemedias">' + Common._e("Media integration") + '</label>' +
'<input id="integratemedias" type="checkbox" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
'<div class="localarchives mam-showable">' +
2014-11-25 23:42:38 +01:00
'<label for="localarchives">' + Common._e("Keep local chat archives") + '</label>' +
'<input id="localarchives" type="checkbox" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
'<div class="xmpplinks">' +
2014-11-25 23:42:38 +01:00
'<label class="xmpplinks-hidable">' + Common._e("XMPP links") + '</label>' +
'<a href="#" class="linked xmpp-links xmpplinks-hidable">' + Common._e("Open XMPP links with Jappix") + '</a>' +
'</div>' +
'</fieldset>' +
'<div class="sub-ask sub-ask-mam sub-ask-element">' +
'<div class="sub-ask-top">' +
'<div class="sub-ask-title">' + Common._e("Remove all archives") + '</div>' +
'<a href="#" class="sub-ask-close">X</a>' +
'</div>' +
'<div class="sub-ask-content">' +
'<label>' + Common._e("Password") + '</label>' +
'<input type="password" class="purge-archives check-mam" required="" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
'<a href="#" class="sub-ask-bottom">' + Common._e("Remove") + ' &raquo;</a>' +
'</div>' +
'</div>' +
'<div id="conf2" class="one-lap forms">' +
'<fieldset class="channel">' +
'<legend>' + Common._e("Channel") + '</legend>' +
2014-03-12 14:52:47 +01:00
'<div class="empty-channel">' +
2014-11-25 23:42:38 +01:00
'<label>' + Common._e("Empty") + '</label>' +
'<a href="#" class="linked empty-channel">' + Common._e("Empty channel") + '</a>' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
'<div class="persistent">' +
2014-11-25 23:42:38 +01:00
'<label>' + Common._e("Persistent") + '</label>' +
'<input id="persistent" type="checkbox" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
'<div class="maxnotices">' +
2014-11-25 23:42:38 +01:00
'<label>' + Common._e("Maximum notices") + '</label>' +
'<select id="maxnotices">' +
'<option value="1">1</option>' +
'<option value="100">100</option>' +
'<option value="1000">1000</option>' +
'<option value="10000">10000</option>' +
'<option value="100000">100000</option>' +
'<option value="1000000">1000000</option>' +
'</select>' +
'</div>' +
'</fieldset>' +
'<div class="sub-ask sub-ask-empty sub-ask-element">' +
'<div class="sub-ask-top">' +
'<div class="sub-ask-title">' + Common._e("Empty channel") + '</div>' +
'<a href="#" class="sub-ask-close">X</a>' +
'</div>' +
'<div class="sub-ask-content">' +
'<label>' + Common._e("Password") + '</label>' +
'<input type="password" class="purge-microblog check-empty" required="" />' +
'</div>' +
'<a href="#" class="sub-ask-bottom">' + Common._e("Empty") + ' &raquo;</a>' +
'</div>' +
'</div>' +
'<div id="conf3" class="one-lap forms">' +
'<fieldset>' +
'<legend>' + Common._e("Account") + '</legend>' +
'<label>' + Common._e("Password") + '</label>' +
'<a href="#" class="linked change-password">' + Common._e("Change password") + '</a>' +
'<label>' + Common._e("Delete") + '</label>' +
'<a href="#" class="linked delete-account">' + Common._e("Delete account") + '</a>' +
'</fieldset>' +
'<div class="sub-ask sub-ask-pass sub-ask-element">' +
'<div class="sub-ask-top">' +
'<div class="sub-ask-title">' + Common._e("Change password") + '</div>' +
'<a href="#" class="sub-ask-close">X</a>' +
'</div>' +
'<div class="sub-ask-content">' +
'<label>' + Common._e("Old") + '</label>' +
'<input type="password" class="password-change old" required="" />' +
'<label>' + Common._e("New (2 times)") + '</label>' +
'<input type="password" class="password-change new1" required="" />' +
'<input type="password" class="password-change new2" required="" />' +
2014-03-12 14:52:47 +01:00
'</div>' +
2014-11-25 23:42:38 +01:00
'<a href="#" class="sub-ask-bottom">' + Common._e("Continue") + ' &raquo;</a>' +
'</div>' +
'<div class="sub-ask sub-ask-delete sub-ask-element">' +
'<div class="sub-ask-top">' +
'<div class="sub-ask-title">' + Common._e("Delete account") + '</div>' +
'<a href="#" class="sub-ask-close">X</a>' +
'</div>' +
'<div class="sub-ask-content">' +
'<label>' + Common._e("Password") + '</label>' +
'<input type="password" class="delete-account check-password" required="" />' +
'</div>' +
'<a href="#" class="sub-ask-bottom">' + Common._e("Delete") + ' &raquo;</a>' +
'</div>' +
'</div>' +
'</div>' +
'<div class="bottom">' +
'<div class="wait wait-medium"></div>' +
'<a href="#" class="finish save">' + Common._e("Save") + '</a>' +
'<a href="#" class="finish cancel">' + Common._e("Cancel") + '</a>' +
2014-03-12 14:52:47 +01:00
'</div>';
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Create the popup
Popup.create('options', html);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Apply the features
Features.apply('options');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Associate the events
self.instance();
} catch(e) {
Console.error('Options.open', e);
} finally {
return false;
}
};
/**
* Closes the options popup
* @public
* @return {boolean}
*/
self.close = function() {
try {
// Destroy the popup
Popup.destroy('options');
} catch(e) {
Console.error('Options.close', e);
} finally {
return false;
}
};
/**
* Checks whether the options are loaded or not
* @public
* @return {boolean}
*/
self.loaded = function() {
is_loaded = false;
try {
if($('.options-hidable').is(':visible')) {
is_loaded = true;
}
} catch(e) {
Console.error('Options.loaded', e);
} finally {
return is_loaded;
}
};
/**
* Switches between the options tabs
* @public
* @param {string} id
* @return {boolean}
*/
self.switchTab = function(id) {
try {
2014-11-25 20:12:58 +01:00
var options_sel = $('#options');
options_sel.find('.one-lap').hide();
options_sel.find('#conf' + id).show();
options_sel.find('.tab a').removeClass('tab-active');
options_sel.find('.tab a[data-key="' + id + '"]').addClass('tab-active');
options_sel.find('.sub-ask .sub-ask-close').click();
2014-03-12 14:52:47 +01:00
} catch(e) {
Console.error('Options.switchTab', e);
} finally {
return false;
}
};
/**
* Manages the options wait item
* @public
* @param {string} id
* @return {undefined}
*/
self.wait = function(id) {
try {
2014-11-25 20:12:58 +01:00
var options_sel = $('#options');
var content_sel = options_sel.find('.content');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Remove the current item class
2014-11-25 20:12:58 +01:00
content_sel.removeClass(id);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Hide the waiting items if all was received
2014-11-25 20:12:58 +01:00
if(!content_sel.hasClass('microblog') && !content_sel.hasClass('mam')) {
options_sel.find('.wait').hide();
options_sel.find('.finish:first').removeClass('disabled');
2014-03-12 14:52:47 +01:00
}
} catch(e) {
Console.error('Options.wait', e);
}
};
2014-04-08 20:14:28 +02:00
/**
2014-03-12 14:52:47 +01:00
* Sends the options to the XMPP server
* @public
* @return {undefined}
*/
self.store = function() {
try {
// Get the values
var sounds = DataStore.getDB(Connection.desktop_hash, 'options', 'sounds');
var geolocation = DataStore.getDB(Connection.desktop_hash, 'options', 'geolocation');
var showall = DataStore.getDB(Connection.desktop_hash, 'options', 'roster-showall');
var noxhtmlimg = DataStore.getDB(Connection.desktop_hash, 'options', 'no-xhtml-images');
var groupchatpresence = DataStore.getDB(Connection.desktop_hash, 'options', 'groupchatpresence');
var integratemedias = DataStore.getDB(Connection.desktop_hash, 'options', 'integratemedias');
var localarchives = DataStore.getDB(Connection.desktop_hash, 'options', 'localarchives');
var status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Create an array to be looped
var oType = ['sounds', 'geolocation', 'roster-showall', 'no-xhtml-images', 'groupchatpresence', 'integratemedias', 'localarchives', 'presence-status'];
var oContent = [sounds, geolocation, showall, noxhtmlimg, groupchatpresence, integratemedias, localarchives, status];
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// New IQ
var iq = new JSJaCIQ();
iq.setType('set');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
var query = iq.setQuery(NS_PRIVATE);
var storage = query.appendChild(iq.buildNode('storage', {'xmlns': NS_OPTIONS}));
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Loop the array
for(var i in oType) {
storage.appendChild(iq.buildNode('option', {'type': oType[i], 'xmlns': NS_OPTIONS}, oContent[i]));
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
con.send(iq, self.handleStore);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
Console.info('Storing options...');
} catch(e) {
Console.error('Options.store', e);
}
};
/**
* Handles the option storing
* @public
* @param {object} iq
* @return {undefined}
*/
self.handleStore = function(iq) {
try {
if(!iq || (iq.getType() != 'result')) {
Console.warn('Options not stored.');
} else {
Console.info('Options stored.');
}
} catch(e) {
Console.error('Options.handleStore', e);
}
};
/**
* Saves the user options
* @public
* @return {boolean}
*/
self.save = function() {
try {
// We apply the sounds
var sounds = '0';
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
if($('#sounds').filter(':checked').size()) {
sounds = '1';
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
DataStore.setDB(Connection.desktop_hash, 'options', 'sounds', sounds);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We apply the geolocation
if($('#geolocation').filter(':checked').size()) {
DataStore.setDB(Connection.desktop_hash, 'options', 'geolocation', '1');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We geolocate the user on the go
PEP.geolocate();
} else {
DataStore.setDB(Connection.desktop_hash, 'options', 'geolocation', '0');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We delete the geolocation informations
PEP.sendPosition();
DataStore.removeDB(Connection.desktop_hash, 'geolocation', 'now');
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We apply the roster show all
if($('#showall').filter(':checked').size()) {
DataStore.setDB(Connection.desktop_hash, 'options', 'roster-showall', '1');
Interface.showAllBuddies('options');
} else {
DataStore.setDB(Connection.desktop_hash, 'options', 'roster-showall', '0');
Interface.showOnlineBuddies('options');
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We apply the XHTML-IM images filter
var noxhtmlimg = '1' ? $('#noxhtmlimg').filter(':checked').size() : '0';
DataStore.setDB(Connection.desktop_hash, 'options', 'no-xhtml-images', noxhtmlimg);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We apply the groupchat presence messages configuration
var groupchatpresence = '1' ? $('#groupchatpresence').filter(':checked').size() : '0';
DataStore.setDB(Connection.desktop_hash, 'options', 'groupchatpresence', groupchatpresence);
// We apply the media integration
var integratemedias = '1' ? $('#integratemedias').filter(':checked').size() : '0';
DataStore.setDB(Connection.desktop_hash, 'options', 'integratemedias', integratemedias);
// We apply the local archiving
var localarchives = '1' ? $('#localarchives').filter(':checked').size() : '0';
DataStore.setDB(Connection.desktop_hash, 'options', 'localarchives', localarchives);
// Flush local archives?
if(localarchives === '0') {
Message.flushLocalArchive();
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We apply the message archiving
if(Features.enabledMAM()) {
MAM.setConfig($('#archiving').val() || 'never');
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We apply the microblog configuration
var persist = '1' ? $('#persist').filter(':checked').size() : '0';
var maximum = $('#maxnotices').val();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
if(Features.enabledPEP() && (Features.enabledPubSub() || Features.enabledPubSubCN())) {
Pubsub.setup('', NS_URN_MBLOG, persist, maximum, '', '', false);
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We send the options to the database
self.store();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Close the options
self.close();
} catch(e) {
Console.error('Options.save', e);
} finally {
return false;
}
};
/**
* Handles the password changing
* @public
* @param {string} iq
* @return {undefined}
*/
self.handlePwdChange = function(iq) {
try {
// Remove the general wait item
Interface.removeGeneralWait();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// If no errors
if(!Errors.handleReply(iq)) {
Connection.clearLastSession();
Connection.quit();
Board.openThisInfo(1);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
Console.info('Password changed.');
} else {
Console.warn('Password not changed.');
}
} catch(e) {
Console.error('Options.handlePwdChange', e);
}
};
/**
* Sends the new account password
* @public
* @return {boolean}
*/
self.sendNewPassword = function() {
/* REF: http://xmpp.org/extensions/xep-0077.html#usecases-changepw */
try {
var password0 = $('#options .old').val();
var password1 = $('#options .new1').val();
var password2 = $('#options .new2').val();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
if ((password1 == password2) && (password0 == Utils.getPassword())) {
// We show the waiting image
Interface.showGeneralWait();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We send the IQ
var iq = new JSJaCIQ();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
iq.setTo(Utils.getServer());
iq.setType('set');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
var iqQuery = iq.setQuery(NS_REGISTER);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
iqQuery.appendChild(iq.buildNode('username', {'xmlns': NS_REGISTER}, con.username));
iqQuery.appendChild(iq.buildNode('password', {'xmlns': NS_REGISTER}, password1));
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
con.send(iq, self.handlePwdChange);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
Console.info('Password change sent.');
} else {
$('.sub-ask-pass input').each(function() {
var select = $(this);
2014-11-25 23:42:38 +01:00
2014-11-25 20:12:58 +01:00
if(!select.val()) {
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
select.addClass('please-complete').focus();
});
2014-11-25 20:12:58 +01:00
} else {
2014-11-25 23:42:38 +01:00
select.removeClass('please-complete');
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
});
2014-11-25 23:42:38 +01:00
2014-11-25 20:12:58 +01:00
if(password0 != Utils.getPassword()) {
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
$('#options .old').addClass('please-complete').focus();
});
2014-11-25 20:12:58 +01:00
}
if(password1 != password2) {
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
$('#options .new1, #options .new2').addClass('please-complete').focus();
});
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
}
} catch(e) {
Console.error('Options.sendNewPassword', e);
} finally {
return false;
}
};
2014-04-08 20:14:28 +02:00
/**
2014-03-12 14:52:47 +01:00
* Handles the account deletion request
* @public
* @param {object} iq
* @return {undefined}
*/
self.handleAccDeletion = function(iq) {
try {
// Remove the general wait item
Interface.removeGeneralWait();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// If no errors
if(!Errors.handleReply(iq)) {
Connection.clearLastSession();
Talk.destroy();
Board.openThisInfo(2);
Connection.logout();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
Console.info('Account deleted.');
} else {
Console.warn('Account not deleted.');
}
} catch(e) {
Console.error('Options.handleAccDeletion', e);
}
};
/**
* Purge the user's archives (MAM)
* @public
* @return {boolean}
*/
self.purgeMyArchives = function() {
try {
var pwd_input_sel = $('#options .check-mam');
var password = pwd_input_sel.val();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
if(password == Utils.getPassword()) {
MAM.purgeArchives();
// Clear archives in UI
$('.page-engine-chan[data-type="chat"] .tools-clear').click();
// Hide the tool
pwd_input_sel.val('');
$('#options .sub-ask-mam .sub-ask-close').click();
} else {
var selector = $('#options .check-mam');
2014-11-25 23:42:38 +01:00
2014-11-25 20:12:58 +01:00
if(password != Utils.getPassword()) {
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
selector.addClass('please-complete').focus();
});
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
selector.removeClass('please-complete');
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
}
} catch(e) {
Console.error('Options.purgeMyArchives', e);
} finally {
return false;
}
};
/**
* Purge the user's microblog items
* @public
* @return {boolean}
*/
self.purgeMyMicroblog = function() {
/* REF: http://xmpp.org/extensions/xep-0060.html#owner-purge */
try {
var pwd_input_sel = $('#options .check-empty');
var password = pwd_input_sel.val();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
if(password == Utils.getPassword()) {
// Send the IQ to remove the item (and get eventual error callback)
var iq = new JSJaCIQ();
iq.setType('set');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB_OWNER});
pubsub.appendChild(iq.buildNode('purge', {'node': NS_URN_MBLOG, 'xmlns': NS_PUBSUB_OWNER}));
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
con.send(iq, self.handleMicroblogPurge);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Hide the tool
pwd_input_sel.val('');
$('#options .sub-ask-empty .sub-ask-close').click();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
Console.info('Microblog purge sent.');
} else {
var selector = $('#options .check-empty');
2014-11-25 23:42:38 +01:00
2014-11-25 20:12:58 +01:00
if(password != Utils.getPassword()) {
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
selector.addClass('please-complete').focus();
});
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
selector.removeClass('please-complete');
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
}
} catch(e) {
Console.error('Options.purgeMyMicroblog', e);
} finally {
return false;
}
};
/**
* Handles the microblog purge
* @public
* @param {object} iq
* @return {undefined}
*/
self.handleMicroblogPurge = function(iq) {
try {
// If no errors
if(!Errors.handleReply(iq)) {
// Remove the microblog items
$('.one-update.update_' + hex_md5(Common.getXID())).remove();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
Console.info('Microblog purged.');
} else {
Console.warn('Microblog not purged.');
}
} catch(e) {
Console.error('Options.handleMicroblogPurge', e);
}
};
/**
* Deletes the user's account
* @public
* @return {boolean}
*/
self.deleteMyAccount = function() {
/* REF: http://xmpp.org/extensions/xep-0077.html#usecases-cancel */
try {
var password = $('#options .check-password').val();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
if(password == Utils.getPassword()) {
// We show the waiting image
Interface.showGeneralWait();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We send the IQ
var iq = new JSJaCIQ();
iq.setType('set');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
var iqQuery = iq.setQuery(NS_REGISTER);
iqQuery.appendChild(iq.buildNode('remove', {'xmlns': NS_REGISTER}));
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
con.send(iq, self.handleAccDeletion);
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
Console.info('Delete account sent.');
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
var selector = $('#options .check-password');
2014-11-25 23:42:38 +01:00
2014-11-25 20:12:58 +01:00
if(password != Utils.getPassword()) {
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
selector.addClass('please-complete').focus();
});
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
selector.removeClass('please-complete');
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
}
} catch(e) {
Console.error('Options.deleteMyAccount', e);
} finally {
return false;
}
};
2014-04-08 20:14:28 +02:00
/**
2014-03-12 14:52:47 +01:00
* Loads the user options
* @public
* @return {undefined}
*/
self.load = function() {
try {
// Process the good stuffs, depending of the server features
var enabled_mam = Features.enabledMAM();
var enabled_pubsub = Features.enabledPubSub();
var enabled_pubsub_cn = Features.enabledPubSubCN();
var enabled_pep = Features.enabledPEP();
var sWait = $('#options .content');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Show the waiting items if necessary
if(enabled_mam || (enabled_pep && (enabled_pubsub || enabled_pubsub_cn))) {
$('#options .wait').show();
$('#options .finish:first').addClass('disabled');
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We get the archiving configuration
if(enabled_mam) {
sWait.addClass('mam');
MAM.getConfig();
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We get the microblog configuration
if((enabled_pubsub || enabled_pubsub_cn) && enabled_pep) {
sWait.addClass('microblog');
Microblog.getConfig();
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We show the "privacy" form if something is visible into it
2014-11-25 20:12:58 +01:00
if(enabled_mam || enabled_pep) {
2014-03-12 14:52:47 +01:00
$('#options fieldset.privacy').show();
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We get the values of the forms for the sounds
2014-11-25 20:12:58 +01:00
if(DataStore.getDB(Connection.desktop_hash, 'options', 'sounds') == '0') {
2014-03-12 14:52:47 +01:00
$('#sounds').attr('checked', false);
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
$('#sounds').attr('checked', true);
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We get the values of the forms for the geolocation
2014-11-25 20:12:58 +01:00
if(DataStore.getDB(Connection.desktop_hash, 'options', 'geolocation') == '1') {
2014-03-12 14:52:47 +01:00
$('#geolocation').attr('checked', true);
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
$('#geolocation').attr('checked', false);
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We get the values of the forms for the roster show all
2014-11-25 20:12:58 +01:00
if(DataStore.getDB(Connection.desktop_hash, 'options', 'roster-showall') == '1') {
2014-03-12 14:52:47 +01:00
$('#showall').attr('checked', true);
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
$('#showall').attr('checked', false);
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We get the values of the forms for the XHTML-IM images filter
2014-11-25 20:12:58 +01:00
if(DataStore.getDB(Connection.desktop_hash, 'options', 'no-xhtml-images') == '1') {
2014-03-12 14:52:47 +01:00
$('#noxhtmlimg').attr('checked', true);
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
$('#noxhtmlimg').attr('checked', false);
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// We get the values of the forms for the integratemedias
2014-11-25 20:12:58 +01:00
if(DataStore.getDB(Connection.desktop_hash, 'options', 'integratemedias') == '0') {
2014-03-12 14:52:47 +01:00
$('#integratemedias').attr('checked', false);
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
$('#integratemedias').attr('checked', true);
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
// We get the values of the forms for the groupchatpresence
2014-11-25 20:12:58 +01:00
if(DataStore.getDB(Connection.desktop_hash, 'options', 'groupchatpresence') == '0') {
2014-03-12 14:52:47 +01:00
$('#groupchatpresence').attr('checked', false);
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
$('#groupchatpresence').attr('checked', true);
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
// We get the values of the forms for the localarchives
2014-11-25 20:12:58 +01:00
if(DataStore.getDB(Connection.desktop_hash, 'options', 'localarchives') == '0') {
2014-03-12 14:52:47 +01:00
$('#localarchives').attr('checked', false);
2014-11-25 20:12:58 +01:00
} else {
2014-03-12 14:52:47 +01:00
$('#localarchives').attr('checked', true);
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
} catch(e) {
Console.error('Options.load', e);
}
};
/**
* Plugin launcher
* @public
* @return {undefined}
*/
self.instance = function() {
try {
// Click events
$('#options .tab a').click(function() {
// Yet active?
if($(this).hasClass('tab-active'))
return false;
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Switch to the good tab
var key = parseInt($(this).attr('data-key'));
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return self.switchTab(key);
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .linked').click(function() {
$('#options .sub-ask').hide();
$('#options .forms').removeClass('in_background');
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .xmpp-links').click(function() {
Utils.xmppLinksHandler();
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return false;
});
$('#options .empty-archives').click(function() {
var selector = '#options .sub-ask-mam';
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(selector).show();
$('#options .forms').addClass('in_background');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
$(selector + ' input').focus();
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return false;
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .empty-channel').click(function() {
var selector = '#options .sub-ask-empty';
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(selector).show();
$('#options .forms').addClass('in_background');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
$(selector + ' input').focus();
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return false;
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .change-password').click(function() {
var selector = '#options .sub-ask-pass';
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(selector).show();
$('#options .forms').addClass('in_background');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
$(selector + ' input:first').focus();
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return false;
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .delete-account').click(function() {
var selector = '#options .sub-ask-delete';
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(selector).show();
$('#options .forms').addClass('in_background');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$(document).oneTime(10, function() {
$(selector + ' input').focus();
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return false;
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .sub-ask-pass .sub-ask-bottom').click(function() {
return self.sendNewPassword();
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .sub-ask-mam .sub-ask-bottom').click(function() {
return self.purgeMyArchives();
});
$('#options .sub-ask-empty .sub-ask-bottom').click(function() {
return self.purgeMyMicroblog();
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .sub-ask-delete .sub-ask-bottom').click(function() {
return self.deleteMyAccount();
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .sub-ask-close').click(function() {
$('#options .sub-ask').hide();
$('#options .forms').removeClass('in_background');
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return false;
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
$('#options .bottom .finish').click(function() {
2014-11-25 20:12:58 +01:00
if($(this).is('.save') && !$(this).hasClass('disabled')) {
2014-03-12 14:52:47 +01:00
return self.save();
2014-11-25 20:12:58 +01:00
}
if($(this).is('.cancel')) {
2014-03-12 14:52:47 +01:00
return self.close();
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
return false;
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// The keyup events
$('#options .sub-ask input').keyup(function(e) {
if(e.keyCode == 13) {
// Archives purge
2014-11-25 20:12:58 +01:00
if($(this).is('.purge-archives')) {
2014-03-12 14:52:47 +01:00
return self.purgeMyArchives();
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
// Microblog purge
2014-11-25 20:12:58 +01:00
else if($(this).is('.purge-microblog')) {
2014-03-12 14:52:47 +01:00
return self.purgeMyMicroblog();
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Password change
2014-11-25 20:12:58 +01:00
else if($(this).is('.password-change')) {
2014-03-12 14:52:47 +01:00
return self.sendNewPassword();
2014-11-25 20:12:58 +01:00
}
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Account deletion
2014-11-25 20:12:58 +01:00
else if($(this).is('.delete-account')) {
2014-03-12 14:52:47 +01:00
return self.deleteMyAccount();
2014-11-25 20:12:58 +01:00
}
2014-03-12 14:52:47 +01:00
}
});
2014-11-25 23:42:38 +01:00
2014-03-12 14:52:47 +01:00
// Load the options
self.load();
} catch(e) {
Console.error('Options.instance', e);
}
};
/**
* Return class scope
*/
return self;
})();