Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
708
gaia/apps/communications/contacts/js/contacts.js
Executable file
708
gaia/apps/communications/contacts/js/contacts.js
Executable file
|
|
@ -0,0 +1,708 @@
|
|||
'use strict';
|
||||
/* global ActivityHandler */
|
||||
/* global Cache */
|
||||
/* global contacts */
|
||||
/* global DeferredActions */
|
||||
/* global fb */
|
||||
/* global fbLoader */
|
||||
/* global LazyLoader */
|
||||
/* global MainNavigation */
|
||||
/* global Loader */
|
||||
/* global TAG_OPTIONS */
|
||||
/* global utils */
|
||||
/* global HeaderUI */
|
||||
/* global Search */
|
||||
/* global ContactsService */
|
||||
|
||||
/* exported COMMS_APP_ORIGIN */
|
||||
/* exported SCALE_RATIO */
|
||||
|
||||
/* jshint nonew: false */
|
||||
|
||||
var COMMS_APP_ORIGIN = location.origin;
|
||||
|
||||
// Scale ratio for different devices
|
||||
var SCALE_RATIO = window.devicePixelRatio || 1;
|
||||
|
||||
var Contacts = (function() {
|
||||
|
||||
var goToForm = function edit() {
|
||||
var transition = ActivityHandler.currentlyHandling ? 'activity-popup'
|
||||
: 'fade-in';
|
||||
MainNavigation.go('view-contact-form', transition);
|
||||
};
|
||||
|
||||
var loadAsyncScriptsDeferred = {};
|
||||
loadAsyncScriptsDeferred.promise = new Promise((resolve) => {
|
||||
loadAsyncScriptsDeferred.resolve = resolve;
|
||||
});
|
||||
|
||||
var settingsReady = false;
|
||||
var detailsReady = false;
|
||||
var formReady = false;
|
||||
|
||||
var currentContact = {},
|
||||
currentFbContact;
|
||||
|
||||
var contactsList;
|
||||
var contactsDetails;
|
||||
var contactsForm;
|
||||
|
||||
// Shows the edit form for the current contact being in an update activity
|
||||
// It receives an array of two elements with the facebook data && values
|
||||
function showEditForm(facebookData, params) {
|
||||
contactsForm.render(currentContact, goToForm,
|
||||
facebookData, params.fromUpdateActivity);
|
||||
}
|
||||
|
||||
var checkUrl = function checkUrl() {
|
||||
var hasParams = window.location.hash.split('?');
|
||||
var hash = hasParams[0];
|
||||
var sectionId = hash.substr(1, hash.length) || '';
|
||||
var params = hasParams.length > 1 ?
|
||||
utils.extractParams(hasParams[1]) : -1;
|
||||
|
||||
switch (sectionId) {
|
||||
case 'view-contact-list':
|
||||
initContactsList();
|
||||
break;
|
||||
case 'view-contact-details':
|
||||
initContactsList();
|
||||
initDetails(function onInitDetails() {
|
||||
// At this point, a parameter is required
|
||||
if (params == -1) {
|
||||
console.error('Param missing');
|
||||
return;
|
||||
}
|
||||
|
||||
// If the parameter is an id, the corresponding contact is loaded
|
||||
// from the device.
|
||||
if ('id' in params) {
|
||||
var id = params.id;
|
||||
ContactsService.get(id, function onSuccess(savedContact) {
|
||||
currentContact = savedContact;
|
||||
|
||||
contactsDetails.render(currentContact);
|
||||
|
||||
MainNavigation.go(sectionId, 'right-left');
|
||||
}, function onError() {
|
||||
console.error('Error retrieving contact');
|
||||
});
|
||||
// If mozContactParam is true, we know there is a mozContact
|
||||
// attached to the activity, so we render it using contacts details'
|
||||
// read only mode. This is used when we receive an activity to open
|
||||
// a given contact with allowSave set to false.
|
||||
} else if (params.mozContactParam) {
|
||||
var contact = ActivityHandler.mozContactParam;
|
||||
contactsDetails.render(contact, null, true);
|
||||
MainNavigation.go(sectionId, 'activity-popup');
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 'view-contact-form':
|
||||
initForm(function onInitForm() {
|
||||
if (params.mozContactParam) {
|
||||
contactsForm.render(ActivityHandler.mozContactParam, goToForm);
|
||||
ActivityHandler.mozContactParam = null;
|
||||
} else if (params == -1 || !(params.id)) {
|
||||
contactsForm.render(params, goToForm);
|
||||
} else {
|
||||
// Editing existing contact
|
||||
if (params.id) {
|
||||
var id = params.id;
|
||||
ContactsService.get(id, function onSuccess(savedContact) {
|
||||
currentContact = savedContact;
|
||||
// Check if we have extra parameters to render
|
||||
if ('extras' in params) {
|
||||
addExtrasToContact(params.extras);
|
||||
}
|
||||
if (fb.isFbContact(savedContact)) {
|
||||
var fbContact = new fb.Contact(savedContact);
|
||||
var req = fbContact.getDataAndValues();
|
||||
req.onsuccess = function() {
|
||||
showEditForm(req.result, params);
|
||||
};
|
||||
req.onerror = function() {
|
||||
console.error('Error retrieving FB information');
|
||||
showEditForm(null, params);
|
||||
};
|
||||
}
|
||||
else {
|
||||
showEditForm(null, params);
|
||||
}
|
||||
}, function onError() {
|
||||
console.error('Error retrieving contact to be edited');
|
||||
contactsForm.render(null, goToForm);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 'add-parameters':
|
||||
initContactsList();
|
||||
initForm(function onInitForm() {
|
||||
MainNavigation.home();
|
||||
if (ActivityHandler.currentlyHandling) {
|
||||
selectList(params, true);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 'multiple-select-view':
|
||||
Loader.view('multiple_select', () => {
|
||||
MainNavigation.go('multiple-select-view', 'activity-popup');
|
||||
});
|
||||
break;
|
||||
case 'home':
|
||||
MainNavigation.home();
|
||||
break;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var addExtrasToContact = function addExtrasToContact(extrasString) {
|
||||
try {
|
||||
var extras = JSON.parse(decodeURIComponent(extrasString));
|
||||
for (var type in extras) {
|
||||
var extra = extras[type];
|
||||
if (currentContact[type]) {
|
||||
if (Array.isArray(currentContact[type])) {
|
||||
var joinArray = currentContact[type].concat(extra);
|
||||
currentContact[type] = joinArray;
|
||||
} else {
|
||||
currentContact[type] = extra;
|
||||
}
|
||||
} else {
|
||||
currentContact[type] = Array.isArray(extra) ? extra : [extra];
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Extras malformed');
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
var onLocalized = function onLocalized() {
|
||||
init();
|
||||
|
||||
// We need to return the promise here for testing purposes
|
||||
return addAsyncScripts().then(() => {
|
||||
checkUrl();
|
||||
if (!ActivityHandler.currentlyHandling ||
|
||||
ActivityHandler.currentActivityIs(['pick', 'update'])) {
|
||||
initContactsList();
|
||||
} else {
|
||||
// Unregister here to avoid un-necessary list operations.
|
||||
ContactsService.removeListener('contactchange', oncontactchange);
|
||||
}
|
||||
|
||||
if (contactsList) {
|
||||
contactsList.initAlphaScroll();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var loadDeferredActions = function loadDeferredActions() {
|
||||
window.removeEventListener('listRendered', loadDeferredActions);
|
||||
LazyLoader.load([
|
||||
'js/deferred_actions.js',
|
||||
'/contacts/js/fb_loader.js',
|
||||
'/contacts/js/fb/fb_init.js'
|
||||
], function() {
|
||||
DeferredActions.execute();
|
||||
});
|
||||
};
|
||||
|
||||
var init = function init() {
|
||||
window.addEventListener('hashchange', checkUrl);
|
||||
|
||||
window.addEventListener('listRendered', loadDeferredActions);
|
||||
|
||||
/* Tell the audio channel manager that we want to adjust the "notification"
|
||||
* channel when the user presses the volumeup/volumedown buttons. */
|
||||
if (navigator.mozAudioChannelManager) {
|
||||
navigator.mozAudioChannelManager.volumeControlChannel = 'notification';
|
||||
}
|
||||
};
|
||||
|
||||
var initContactsList = function initContactsList() {
|
||||
if (contactsList) {
|
||||
return;
|
||||
}
|
||||
contactsList = contactsList || contacts.List;
|
||||
var list = document.getElementById('groups-list');
|
||||
contactsList.init(list);
|
||||
getFirstContacts();
|
||||
contactsList.initAlphaScroll();
|
||||
contactsList.handleClick(contactListClickHandler);
|
||||
ActivityHandler.isCancelable().then(isCancelable => {
|
||||
HeaderUI.updateHeader(isCancelable);
|
||||
});
|
||||
};
|
||||
|
||||
var contactListClickHandler = function originalHandler(id) {
|
||||
initDetails(function onDetailsReady() {
|
||||
ContactsService.get(id, function findCb(contact, fbContact) {
|
||||
|
||||
currentContact = contact;
|
||||
currentFbContact = fbContact;
|
||||
|
||||
if (ActivityHandler.currentActivityIsNot(['import'])) {
|
||||
if (ActivityHandler.currentActivityIs(['pick'])) {
|
||||
ActivityHandler.dataPickHandler(currentFbContact || currentContact);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
contactsDetails.render(currentContact, currentFbContact);
|
||||
if (window.Search && Search.isInSearchMode()) {
|
||||
MainNavigation.go('view-contact-details', 'go-deeper-search');
|
||||
} else {
|
||||
MainNavigation.go('view-contact-details', 'go-deeper');
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var updateContactDetail = function updateContactDetail(id) {
|
||||
ContactsService.get(id, function findCallback(contact) {
|
||||
currentContact = contact;
|
||||
contactsDetails.render(currentContact);
|
||||
});
|
||||
};
|
||||
|
||||
var selectList = function selectList(params, fromUpdateActivity) {
|
||||
HeaderUI.hideAddButton();
|
||||
contactsList.clearClickHandlers();
|
||||
contactsList.handleClick(function addToContactHandler(id) {
|
||||
var data = {};
|
||||
if (params.hasOwnProperty('tel')) {
|
||||
var phoneNumber = params.tel;
|
||||
data.tel = [{
|
||||
'value': phoneNumber,
|
||||
'carrier': null,
|
||||
'type': [TAG_OPTIONS['phone-type'][0].type]
|
||||
}];
|
||||
}
|
||||
if (params.hasOwnProperty('email')) {
|
||||
var email = params.email;
|
||||
data.email = [{
|
||||
'value': email,
|
||||
'type': [TAG_OPTIONS['email-type'][0].type]
|
||||
}];
|
||||
}
|
||||
var hash = '#view-contact-form?extras=' +
|
||||
encodeURIComponent(JSON.stringify(data)) + '&id=' + id;
|
||||
if (fromUpdateActivity) {
|
||||
hash += '&fromUpdateActivity=1';
|
||||
}
|
||||
window.location.hash = hash;
|
||||
});
|
||||
};
|
||||
|
||||
var handleBack = function handleBack(cb) {
|
||||
MainNavigation.back(cb);
|
||||
};
|
||||
|
||||
var handleCancel = function handleCancel() {
|
||||
//If in an activity, cancel it
|
||||
if (ActivityHandler.currentlyHandling) {
|
||||
ActivityHandler.postCancel();
|
||||
MainNavigation.home();
|
||||
} else {
|
||||
handleBack(function() {
|
||||
// TODO: remove all interaction with detail.js when it works
|
||||
// as an independent view
|
||||
if (MainNavigation.currentView() === 'view-contact-details') {
|
||||
contactsDetails.startNFC(currentContact);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var showAddContact = function showAddContact() {
|
||||
showForm();
|
||||
};
|
||||
|
||||
var loadFacebook = function loadFacebook(callback) {
|
||||
LazyLoader.load([
|
||||
'/contacts/js/fb_loader.js',
|
||||
'/contacts/js/fb/fb_init.js'
|
||||
], () => {
|
||||
if (!fbLoader.loaded) {
|
||||
fb.init(function onInitFb() {
|
||||
window.addEventListener('facebookLoaded', function onFbLoaded() {
|
||||
window.removeEventListener('facebookLoaded', onFbLoaded);
|
||||
callback();
|
||||
});
|
||||
fbLoader.load();
|
||||
});
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var initForm = function c_initForm(callback) {
|
||||
if (formReady) {
|
||||
callback();
|
||||
} else {
|
||||
initDetails(function onDetails() {
|
||||
LazyLoader.load([
|
||||
'/shared/js/contacts/import/utilities/misc.js',
|
||||
'/shared/js/contacts/utilities/image_thumbnail.js',
|
||||
'/contacts/js/match_service.js'],
|
||||
function() {
|
||||
Loader.view('Form', function viewLoaded() {
|
||||
formReady = true;
|
||||
contactsForm = contacts.Form;
|
||||
contactsForm.init(TAG_OPTIONS);
|
||||
callback();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var initSettings = function c_initSettings(callback) {
|
||||
if (settingsReady) {
|
||||
callback();
|
||||
} else {
|
||||
Loader.view('Settings', function viewLoaded() {
|
||||
LazyLoader.load(['/contacts/js/utilities/sim_dom_generator.js',
|
||||
'/contacts/js/utilities/normalizer.js',
|
||||
'/shared/js/contacts/import/utilities/misc.js',
|
||||
'/shared/js/mime_mapper.js',
|
||||
'/shared/js/contacts/import/utilities/vcard_parser.js',
|
||||
'/contacts/js/utilities/icc_handler.js',
|
||||
'/shared/js/contacts/import/utilities/sdcard.js',
|
||||
'/shared/elements/gaia_switch/script.js',
|
||||
'/shared/js/date_time_helper.js',
|
||||
'/shared/js/contacts/import/import_status_data.js'], function() {
|
||||
settingsReady = true;
|
||||
contacts.Settings.init();
|
||||
callback();
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var initDetails = function c_initDetails(callback) {
|
||||
if (detailsReady) {
|
||||
callback();
|
||||
} else {
|
||||
Loader.view('Details', function viewLoaded() {
|
||||
LazyLoader.load(
|
||||
['/shared/js/contacts/import/utilities/misc.js',
|
||||
'/dialer/js/telephony_helper.js',
|
||||
'/shared/js/contacts/sms_integration.js',
|
||||
'/shared/js/contacts/contacts_buttons.js',
|
||||
'/contacts/js/match_service.js',
|
||||
'/contacts/js/utilities/mozContact.js'],
|
||||
function() {
|
||||
detailsReady = true;
|
||||
contactsDetails = contacts.Details;
|
||||
contactsDetails.init();
|
||||
callback();
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var showForm = function c_showForm(edit, contact) {
|
||||
currentContact = contact || currentContact;
|
||||
initForm(function onInit() {
|
||||
doShowForm(edit);
|
||||
});
|
||||
};
|
||||
|
||||
var doShowForm = function c_doShowForm(edit) {
|
||||
var contact = edit ? currentContact : null;
|
||||
|
||||
if (contact && fb.isFbContact(contact)) {
|
||||
var fbContact = new fb.Contact(contact);
|
||||
var req = fbContact.getDataAndValues();
|
||||
|
||||
req.onsuccess = function() {
|
||||
contactsForm.render(contact, goToForm, req.result);
|
||||
};
|
||||
|
||||
req.onerror = function() {
|
||||
contactsForm.render(contact, goToForm);
|
||||
};
|
||||
}
|
||||
else {
|
||||
contactsForm.render(contact, goToForm);
|
||||
}
|
||||
};
|
||||
|
||||
var setCurrent = function c_setCurrent(contact) {
|
||||
currentContact = contact;
|
||||
|
||||
if (contacts.Details) {
|
||||
contacts.Details.setContact(contact);
|
||||
}
|
||||
};
|
||||
|
||||
var showOverlay = function c_showOverlay(messageId, progressClass, textId) {
|
||||
var out = utils.overlay.show(messageId, progressClass, textId);
|
||||
// When we are showing the overlay we are often performing other
|
||||
// significant work, such as importing. While performing this work
|
||||
// it would be nice to avoid the overhead of any accidental reflows
|
||||
// due to touching the list DOM. For example, importing incrementally
|
||||
// adds contacts to the list which triggers many reflows. Therefore,
|
||||
// minimize this impact by hiding the list while we are showing the
|
||||
// overlay.
|
||||
contacts.List.hide();
|
||||
return out;
|
||||
};
|
||||
|
||||
var hideOverlay = function c_hideOverlay() {
|
||||
Loader.utility('Overlay', function _loaded() {
|
||||
contacts.List.show();
|
||||
utils.overlay.hide();
|
||||
});
|
||||
};
|
||||
|
||||
var showSettings = function showSettings() {
|
||||
initSettings(function onSettingsReady() {
|
||||
// The number of FB Friends has to be recalculated
|
||||
contacts.Settings.refresh();
|
||||
MainNavigation.go('view-settings', 'fade-in');
|
||||
});
|
||||
};
|
||||
|
||||
var stopPropagation = function stopPropagation(evt) {
|
||||
evt.preventDefault();
|
||||
};
|
||||
|
||||
var enterSearchMode = function enterSearchMode(evt) {
|
||||
Loader.view('Search', function viewLoaded() {
|
||||
contacts.List.initSearch(function onInit() {
|
||||
Search.enterSearchMode(evt);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var initEventListeners = function initEventListener() {
|
||||
// Definition of elements and handlers
|
||||
utils.listeners.add({
|
||||
'#add-contact-button': showAddContact,
|
||||
'#settings-button': showSettings, // Settings related
|
||||
'#search-start': [
|
||||
{
|
||||
event: 'click',
|
||||
handler: enterSearchMode
|
||||
}
|
||||
],
|
||||
// For screen reader users
|
||||
'#search-start > input': [
|
||||
{
|
||||
event: 'focus',
|
||||
handler: enterSearchMode
|
||||
}
|
||||
],
|
||||
'button[type="reset"]': stopPropagation
|
||||
});
|
||||
};
|
||||
|
||||
var getFirstContacts = function c_getFirstContacts() {
|
||||
var onerror = function() {
|
||||
console.error('Error getting first contacts');
|
||||
};
|
||||
contactsList = contactsList || contacts.List;
|
||||
|
||||
contactsList.getAllContacts(onerror);
|
||||
};
|
||||
|
||||
var addAsyncScripts = function addAsyncScripts() {
|
||||
|
||||
var lazyLoadFiles = [
|
||||
'/shared/js/contacts/utilities/templates.js',
|
||||
'/shared/js/contacts/contacts_shortcuts.js',
|
||||
'/contacts/js/contacts_tag.js',
|
||||
'/contacts/js/tag_options.js',
|
||||
'/contacts/js/loader.js',
|
||||
'/shared/js/text_normalizer.js',
|
||||
'/shared/js/contacts/import/utilities/status.js',
|
||||
'/shared/js/contacts/utilities/dom.js',
|
||||
'/shared/js/confirm.js',
|
||||
document.getElementById('confirmation-message')
|
||||
];
|
||||
|
||||
LazyLoader.load(lazyLoadFiles, function() {
|
||||
loadAsyncScriptsDeferred.resolve();
|
||||
});
|
||||
return loadAsyncScriptsDeferred.promise;
|
||||
};
|
||||
|
||||
var pendingChanges = {};
|
||||
|
||||
// This function is called when we finish a oncontactchange operation to
|
||||
// remove the op of the pending changes and check if we need to apply more
|
||||
// changes request over the same id.
|
||||
var checkPendingChanges = function checkPendingChanges(id) {
|
||||
var changes = pendingChanges[id];
|
||||
|
||||
if (!changes) {
|
||||
return;
|
||||
}
|
||||
|
||||
pendingChanges[id].shift();
|
||||
|
||||
if (pendingChanges[id].length >= 1) {
|
||||
performOnContactChange(pendingChanges[id][0]);
|
||||
}
|
||||
};
|
||||
|
||||
var oncontactchange = function oncontactchange(event) {
|
||||
if (typeof pendingChanges[event.contactID] !== 'undefined') {
|
||||
pendingChanges[event.contactID].push({
|
||||
contactID: event.contactID,
|
||||
reason: event.reason
|
||||
});
|
||||
} else {
|
||||
pendingChanges[event.contactID] = [{
|
||||
contactID: event.contactID,
|
||||
reason: event.reason
|
||||
}];
|
||||
}
|
||||
|
||||
// If there is already a pending request, don't do anything,
|
||||
// just wait to finish it in order
|
||||
if (pendingChanges[event.contactID].length > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
performOnContactChange(event);
|
||||
};
|
||||
|
||||
|
||||
ContactsService.addListener('contactchange', oncontactchange);
|
||||
|
||||
var performOnContactChange = function performOnContactChange(event) {
|
||||
// To be on the safe side for now we evict the cache everytime a
|
||||
// contact change event is received. In the future, we may want to check
|
||||
// if the change affects the cache or not, so we avoid evicting it when
|
||||
// is not needed.
|
||||
Cache.evict();
|
||||
initContactsList();
|
||||
var currView = MainNavigation.currentView();
|
||||
switch (event.reason) {
|
||||
case 'update':
|
||||
if (currView == 'view-contact-details' && currentContact != null &&
|
||||
currentContact.id == event.contactID) {
|
||||
ContactsService.get(event.contactID,
|
||||
function success(contact, enrichedContact) {
|
||||
currentContact = contact;
|
||||
if (contactsDetails) {
|
||||
contactsDetails.render(currentContact, enrichedContact);
|
||||
}
|
||||
if (contactsList) {
|
||||
contactsList.refresh(enrichedContact || currentContact,
|
||||
checkPendingChanges, event.reason);
|
||||
}
|
||||
notifyContactChanged(event.contactID, event.reason);
|
||||
});
|
||||
} else {
|
||||
refreshContactInList(event.contactID);
|
||||
}
|
||||
break;
|
||||
case 'create':
|
||||
refreshContactInList(event.contactID);
|
||||
break;
|
||||
case 'remove':
|
||||
if (currentContact != null && currentContact.id == event.contactID &&
|
||||
(currView == 'view-contact-details' ||
|
||||
currView == 'view-contact-form')) {
|
||||
MainNavigation.home();
|
||||
}
|
||||
contactsList.remove(event.contactID, event.reason);
|
||||
currentContact = {};
|
||||
checkPendingChanges(event.contactID);
|
||||
notifyContactChanged(event.contactID, event.reason);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// Refresh a contact in the list, and notifies of contact
|
||||
// changed to possible listeners.
|
||||
function refreshContactInList(id) {
|
||||
contactsList.refresh(id, function() {
|
||||
notifyContactChanged(id);
|
||||
checkPendingChanges(id);
|
||||
});
|
||||
}
|
||||
|
||||
// Send a custom event when we know that a contact changed and
|
||||
// the contact list was updated.
|
||||
// Used internally in places where the contact list is a reference
|
||||
function notifyContactChanged(id, reason) {
|
||||
document.dispatchEvent(new CustomEvent('contactChanged', {
|
||||
detail: {
|
||||
contactID: id,
|
||||
reason: reason
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
var close = function close() {
|
||||
window.removeEventListener('localized', initContacts);
|
||||
};
|
||||
|
||||
var initContacts = function initContacts(evt) {
|
||||
initEventListeners();
|
||||
HeaderUI.setNormalHeader();
|
||||
utils.PerformanceHelper.contentInteractive();
|
||||
utils.PerformanceHelper.chromeInteractive();
|
||||
window.setTimeout(Contacts && Contacts.onLocalized);
|
||||
if (window.navigator.mozSetMessageHandler && window.self == window.top) {
|
||||
LazyLoader.load(['/shared/js/contacts/import/utilities/misc.js',
|
||||
'/shared/js/contacts/import/utilities/vcard_reader.js',
|
||||
'/shared/js/contacts/import/utilities/vcard_parser.js'],
|
||||
function() {
|
||||
var actHandler = ActivityHandler.handle.bind(ActivityHandler);
|
||||
window.navigator.mozSetMessageHandler('activity', actHandler);
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener('visibilitychange', function visibility(e) {
|
||||
if (document.hidden === false &&
|
||||
MainNavigation.currentView() === 'view-settings') {
|
||||
Loader.view('Settings', function viewLoaded() {
|
||||
contacts.Settings.updateTimestamps();
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
LazyLoader.load('/shared/js/l10n.js', () => {
|
||||
navigator.mozL10n.once(() => {
|
||||
initContacts();
|
||||
});
|
||||
navigator.mozL10n.ready(() => {
|
||||
Cache.maybeEvict();
|
||||
});
|
||||
});
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function onLoad() {
|
||||
window.removeEventListener('DOMContentLoaded', onLoad);
|
||||
});
|
||||
|
||||
return {
|
||||
'goBack' : handleBack,
|
||||
'cancel': handleCancel,
|
||||
'showForm': showForm,
|
||||
'setCurrent': setCurrent,
|
||||
'onLocalized': onLocalized,
|
||||
'init': init,
|
||||
'showOverlay': showOverlay,
|
||||
'hideOverlay': hideOverlay,
|
||||
'showContactDetail': contactListClickHandler,
|
||||
'updateContactDetail': updateContactDetail,
|
||||
'loadFacebook': loadFacebook,
|
||||
'close': close,
|
||||
get asyncScriptsLoaded() {
|
||||
return loadAsyncScriptsDeferred.promise;
|
||||
}
|
||||
};
|
||||
})();
|
||||
Loading…
Reference in a new issue