Browse Source

Add edit contact modal. Support ability to customize contact name.

pull/104/head
Evan Theurer 11 years ago
parent
commit
239794f49b
  1. 48
      static/js/controllers/contactsmanagercontroller.js
  2. 2
      static/js/directives/contactrequest.js
  3. 52
      static/js/directives/settings.js
  4. 9
      static/js/services/buddylist.js
  5. 4
      static/js/services/contactdata.js
  6. 9
      static/js/services/contacts.js
  7. 6
      static/partials/contactsmanager.html
  8. 37
      static/partials/contactsmanageredit.html

48
static/js/controllers/contactsmanagercontroller.js

@ -21,11 +21,30 @@ @@ -21,11 +21,30 @@
define([], function() {
// ContactsmanagerController
return ["$scope", "$modalInstance", "contactData", "data", "contacts", function($scope, $modalInstance, contactData, data, contacts) {
return ["$scope", "$modalInstance", "contactData", "data", "contacts", 'buddySession', function($scope, $modalInstance, contactData, data, contacts, buddySession) {
$scope.header = data.header;
$scope.contacts = [];
$scope.search = {};
$scope.tmp = {};
$scope.tmp.displayName = data.contact && data.contact.Status.displayName;
$scope.contact = data.contact;
$scope.session = null;
if(data.contact) {
var sessions = buddySession.sessions();
for (var id in sessions) {
if (sessions.hasOwnProperty(id) && sessions[id].Userid === $scope.contact.Userid) {
$scope.session = sessions[id] && sessions[id].sessions[id];
//console.log('contact manager session', $scope.session);
}
}
}
var totalUnnamed = 0;
$scope.unnamed = function() {
return totalUnnamed += 1;
};
var updateContacts = function() {
$scope.contacts = contactData.getAll();
@ -35,9 +54,32 @@ define([], function() { @@ -35,9 +54,32 @@ define([], function() {
updateContacts();
});
$scope.removeContact = function(id) {
contacts.remove(id);
var setContactInfo = function(contact) {
contact.Status.displayName = $scope.tmp.displayName;
contacts.update({Id: contact.Id, Success: contact.Success, Token: contact.Token, Userid: contact.Userid}, contact.Status);
};
$scope.removeContact = function() {
contacts.remove($scope.contact.Userid);
updateContacts();
$modalInstance.close();
};
$scope.syncContactInfo = function() {
$scope.tmp.displayName = $scope.session.Status.displayName;
};
$scope.edit = function(contact) {
$modalInstance.close(contact);
};
$scope.save = function() {
setContactInfo(data.contact);
$modalInstance.close();
};
$scope.cancel = function(contact) {
$modalInstance.dismiss();
};
}];

2
static/js/directives/contactrequest.js

@ -53,7 +53,7 @@ define(['jquery', 'underscore'], function($, _) { @@ -53,7 +53,7 @@ define(['jquery', 'underscore'], function($, _) {
var buddy = buddyData.lookup($scope.id);
var status = {};
if (buddy) {
$.extend(status, buddy.status);
status = angular.isObject(buddy.status) ? angular.extend(status, buddy.status) : buddy.status;
}
$scope.addContact(request, status);
}

52
static/js/directives/settings.js

@ -85,15 +85,49 @@ define(['jquery', 'underscore', 'text!partials/settings.html'], function($, _, t @@ -85,15 +85,49 @@ define(['jquery', 'underscore', 'text!partials/settings.html'], function($, _, t
};
$scope.openContactsManager = function() {
dialogs.create(
"/contactsmanager/main.html",
"ContactsmanagerController",
{
header: translation._("Contacts Manager")
}, {
wc: "contactsmanager"
}
)
var dlgMain = null;
var dlgEdit = null;
var main = function() {
return dialogs.create(
"/contactsmanager/main.html",
"ContactsmanagerController",
{
header: translation._("Contacts Manager")
}, {
wc: "contactsmanager"
}
);
};
var edit = function(contact) {
return dialogs.create(
"/contactsmanager/edit.html",
"ContactsmanagerController",
{
header: translation._("Edit Contact"),
contact: contact,
}, {
wc: "contactsmanager"
}
);
};
function setupContactsManager() {
dlgMain = main();
dlgMain.result.then(function(contact) {
if(contact && contact.Id) {
setupContactsManagerEdit(contact);
}
});
}
function setupContactsManagerEdit(contact) {
dlgEdit = edit(contact);
dlgEdit.result.finally(function(final) {
setupContactsManager();
});
}
setupContactsManager();
};
$scope.checkDefaultMediaSources = function() {

9
static/js/services/buddylist.js

@ -129,7 +129,7 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! @@ -129,7 +129,7 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text!
};
// buddyList
return ["$window", "$compile", "playSound", "buddyData", "buddySession", "buddyPicture", "fastScroll", "mediaStream", "animationFrame", "$q", function($window, $compile, playSound, buddyData, buddySession, buddyPicture, fastScroll, mediaStream, animationFrame, $q) {
return ["$window", "$compile", "playSound", "buddyData", "buddySession", "buddyPicture", "fastScroll", "mediaStream", "animationFrame", "$q", '$timeout', function($window, $compile, playSound, buddyData, buddySession, buddyPicture, fastScroll, mediaStream, animationFrame, $q, $timeout) {
var buddyTemplate = $compile(templateBuddy);
var buddyActions = $compile(templateBuddyActions);
@ -585,7 +585,7 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! @@ -585,7 +585,7 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text!
scope.contact = contact;
var sessionData = scope.session.get();
if (sessionData) {
if (contact.Status === null && sessionData.Status) {
if (angular.isString(contact.Status) && sessionData.Status) {
// Update contact status with session.Status
var status = contact.Status = _.extend({}, sessionData.Status);
// Remove status message.
@ -602,7 +602,10 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! @@ -602,7 +602,10 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text!
console.log("Injected status into contact", contact);
}
this.updateDisplay(sessionData.Id, scope, contact, "status");
scope.$apply();
// keep asyc nature but eliminate $apply conflicts
$timeout(function() {
scope.$apply();
}, 0, false);
}
} else {
// Create new scope for contact.

4
static/js/services/contactdata.js

@ -54,8 +54,8 @@ define(['underscore', 'jquery'], function(underscore, $) { @@ -54,8 +54,8 @@ define(['underscore', 'jquery'], function(underscore, $) {
Id: "contact-"+id,
Userid: userid,
Token: token,
Status: null
}
Status: status
};
return contact;
},
addByData: function(data) {

9
static/js/services/contacts.js

@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
define(['underscore', 'jquery', 'modernizr', 'sjcl', 'text!partials/contactsmanager.html'], function(underscore, $, Modernizr, sjcl, templateContactsManager) {
define(['underscore', 'jquery', 'modernizr', 'sjcl', 'text!partials/contactsmanager.html', 'text!partials/contactsmanageredit.html'], function(underscore, $, Modernizr, sjcl, templateContactsManager, templateContactsManagerEdit) {
var Database = function(name) {
this.version = 3;
@ -124,6 +124,7 @@ define(['underscore', 'jquery', 'modernizr', 'sjcl', 'text!partials/contactsmana @@ -124,6 +124,7 @@ define(['underscore', 'jquery', 'modernizr', 'sjcl', 'text!partials/contactsmana
// Inject our templates.
$templateCache.put('/contactsmanager/main.html', templateContactsManager);
$templateCache.put('/contactsmanager/edit.html', templateContactsManagerEdit);
var Contacts = function() {
@ -261,6 +262,12 @@ define(['underscore', 'jquery', 'modernizr', 'sjcl', 'text!partials/contactsmana @@ -261,6 +262,12 @@ define(['underscore', 'jquery', 'modernizr', 'sjcl', 'text!partials/contactsmana
}
};
Contacts.prototype.update = function(request, status) {
console.log("contact update", status);
this.remove(request.Userid);
this.add(request, status);
};
return new Contacts();
}];

6
static/partials/contactsmanager.html

@ -14,10 +14,12 @@ @@ -14,10 +14,12 @@
<div class="buddyPicture"><i class="fa fa-user"/><img ng-show="contact.Status.buddyPicture" alt ng-src="{{contact.Status.buddyPicture}}"/></div>
</td>
<td class="name">
<span>{{contact.Status.displayName}}</span>
<span ng-if="contact.Status.displayName">{{contact.Status.displayName}}</span>
<span ng-if="!contact.Status.displayName" ng-init="i = unnamed()">Unnamed Contact {{i}}</span>
</td>
<td class="action">
<button class="btn btn-danger" ng-click="removeContact(contact.Userid)">{{_('Remove')}}</button>
<!-- <button class="btn btn-danger" ng-click="removeContact(contact.Userid)">{{_('Remove')}}</button> -->
<button class="btn btn-primary" ng-click="edit(contact)">{{_('Edit')}}</button>
</td>
</tr>
</tbody>

37
static/partials/contactsmanageredit.html

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
<div>
<div class="modal-header">
<button type="button" class="close" ng-click="$close()">×</button>
<h3 class="modal-title" ng-bind-html="header"></h3>
</div>
<div class="modal-header">
<div class="row">
<form class="form-horizontal">
<div class="form-group">
<label class="col-xs-4 control-label">{{_('Name')}}</label>
<div class="col-xs-6">
<input type="text" class="form-control" ng-model="tmp.displayName">
</div>
</div>
<div class="form-group" ng-if="session.Type">
<label class="col-xs-4 control-label">{{_('Sync')}}</label>
<div class="col-xs-6">
<button class="btn btn-warning" ng-click="syncContactInfo()"><span class="fa fa-rotate-right"></span> {{_('Sync contact info')}}</button>
</div>
</div>
</form>
</div>
</div>
<div class="modal-footer">
<div class="row">
<div class="col-xs-2">
<button class="btn btn-danger" ng-click="removeContact()">{{_('Remove')}}</button>
</div>
<div class="col-xs-offset-4 col-xs-6">
<div class="pull-right">
<button class="btn btn-default" ng-click="cancel()">{{_('Cancel')}}</button>
<button class="btn btn-primary" ng-click="save()">{{_('Save')}}</button>
</div>
</div>
</div>
</div>
</div>
Loading…
Cancel
Save