Browse Source

Improved contacts updates

Also fixed scroll in emoji menu
master
Igor Zhukov 10 years ago
parent
commit
1c4150d2ab
  1. 5
      app/css/mobile.css
  2. 66
      app/js/controllers.js
  3. 5
      app/js/services.js
  4. 2
      app/partials/desktop/im.html
  5. 2
      app/partials/mobile/head.html
  6. 10
      app/vendor/jquery.emojiarea/jquery.emojiarea.js

5
app/css/mobile.css

@ -1203,9 +1203,12 @@ a.mobile_modal_action .tg_checkbox_label {
.emoji-menu { .emoji-menu {
margin-left: -20px; margin-left: -20px;
margin-top: -267px; margin-top: -202px;
width: 262px; width: 262px;
} }
.emoji-menu .emoji-items-wrap {
height: 106px;
}
.emoji-menu .emoji-items a { .emoji-menu .emoji-items a {
padding: 5px; padding: 5px;
} }

66
app/js/controllers.js

@ -373,7 +373,9 @@ angular.module('myApp.controllers', [])
$scope.importContact = function () { $scope.importContact = function () {
AppUsersManager.openImportContact().then(function (foundContact) { AppUsersManager.openImportContact().then(function (foundContact) {
if (foundContact) { if (foundContact) {
$scope.$broadcast('contact_imported'); $rootScope.$broadcast('history_focus', {
peerString: AppUsersManager.getUserString(foundContact)
});
} }
}); });
}; };
@ -496,6 +498,14 @@ angular.module('myApp.controllers', [])
offset++; offset++;
} }
$scope.dialogs.unshift(wrappedDialog); $scope.dialogs.unshift(wrappedDialog);
if (!peersInDialogs[dialog.peerID]) {
peersInDialogs[dialog.peerID] = true;
if (contactsShown) {
showMoreContacts();
}
}
}); });
$scope.$on('dialog_flush', function (e, dialog) { $scope.$on('dialog_flush', function (e, dialog) {
@ -518,12 +528,6 @@ angular.module('myApp.controllers', [])
} }
}); });
$scope.$on('contact_imported', function () {
if (contactsShown) {
loadDialogs();
}
})
var prevMessages = false; var prevMessages = false;
$scope.$watchCollection('search', function () { $scope.$watchCollection('search', function () {
if ($scope.search.messages != prevMessages) { if ($scope.search.messages != prevMessages) {
@ -555,13 +559,15 @@ angular.module('myApp.controllers', [])
} }
$scope.importPhonebook = function () { $scope.importPhonebook = function () {
PhonebookContactsService.openPhonebookImport().result.then(function (foundContacts) { PhonebookContactsService.openPhonebookImport();
if (contactsShown && foundContacts.length) {
loadDialogs();
}
})
}; };
$scope.$on('contacts_update', function () {
if (contactsShown) {
showMoreContacts();
}
});
$scope.searchClear = function () { $scope.searchClear = function () {
$scope.search.query = ''; $scope.search.query = '';
$scope.search.messages = false; $scope.search.messages = false;
@ -630,14 +636,6 @@ angular.module('myApp.controllers', [])
}); });
}; };
$scope.importPhonebook = function () {
PhonebookContactsService.openPhonebookImport().result.then(function (foundContacts) {
if (contactsShown && foundContacts.length) {
loadDialogs();
}
})
};
function loadDialogs (force) { function loadDialogs (force) {
offset = 0; offset = 0;
maxID = 0; maxID = 0;
@ -669,6 +667,7 @@ angular.module('myApp.controllers', [])
AppMessagesManager.getDialogs('', maxID, 100); AppMessagesManager.getDialogs('', maxID, 100);
if (!dialogsResult.dialogs.length) { if (!dialogsResult.dialogs.length) {
$scope.isEmpty.dialogs = true; $scope.isEmpty.dialogs = true;
showMoreDialogs();
} }
} else { } else {
showMoreDialogs(); showMoreDialogs();
@ -677,12 +676,7 @@ angular.module('myApp.controllers', [])
}); });
} }
function showMoreDialogs () { function showMoreContacts () {
if (contactsShown && (!hasMore || !offset)) {
return;
}
if (!hasMore && !$scope.search.messages && ($scope.search.query || !$scope.dialogs.length)) {
contactsShown = true; contactsShown = true;
var curJump = ++jump; var curJump = ++jump;
@ -707,6 +701,15 @@ angular.module('myApp.controllers', [])
} }
}); });
$scope.$broadcast('ui_dialogs_append'); $scope.$broadcast('ui_dialogs_append');
}
function showMoreDialogs () {
if (contactsShown && (!hasMore || !offset)) {
return;
}
if (!hasMore && !$scope.search.messages && ($scope.search.query || !$scope.dialogs.length)) {
showMoreContacts();
return; return;
} }
@ -2285,6 +2288,9 @@ angular.module('myApp.controllers', [])
}; };
$scope.$watch('search.query', updateContacts); $scope.$watch('search.query', updateContacts);
$scope.$on('contacts_update', function () {
updateContacts($scope.search && $scope.search.query || '');
});
$scope.toggleEdit = function (enabled) { $scope.toggleEdit = function (enabled) {
$scope.action = enabled ? 'edit' : ''; $scope.action = enabled ? 'edit' : '';
@ -2325,17 +2331,13 @@ angular.module('myApp.controllers', [])
selectedUserIDs.push(userID); selectedUserIDs.push(userID);
}); });
AppUsersManager.deleteContacts(selectedUserIDs).then(function () { AppUsersManager.deleteContacts(selectedUserIDs).then(function () {
resetSelected(); $scope.toggleEdit(false);
$scope.action = '';
updateContacts($scope.search.query);
}); });
} }
}; };
$scope.importContact = function () { $scope.importContact = function () {
AppUsersManager.openImportContact().then(function () { AppUsersManager.openImportContact();
updateContacts($scope.search && $scope.search.query || '');
});
}; };
}) })

5
app/js/services.js

@ -220,7 +220,7 @@ angular.module('myApp.services', [])
onContactUpdated(foundUserID = importedContact.user_id, true); onContactUpdated(foundUserID = importedContact.user_id, true);
}); });
return foundUserID ? 1 : 0; return foundUserID || false;
}); });
}; };
@ -272,7 +272,7 @@ angular.module('myApp.services', [])
function onContactUpdated (userID, isContact) { function onContactUpdated (userID, isContact) {
if (angular.isArray(contactsList)) { if (angular.isArray(contactsList)) {
var curPos = curIsContact = contactsList.indexOf(userID), var curPos = curIsContact = contactsList.indexOf(parseInt(userID)),
curIsContact = curPos != -1; curIsContact = curPos != -1;
if (isContact != curIsContact) { if (isContact != curIsContact) {
@ -282,6 +282,7 @@ angular.module('myApp.services', [])
} else { } else {
contactsList.splice(curPos, 1); contactsList.splice(curPos, 1);
} }
$rootScope.$broadcast('contacts_update', userID);
} }
} }
} }

2
app/partials/desktop/im.html

@ -15,7 +15,7 @@
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a ng-click="openGroup()">New Group</a></li> <li><a ng-click="openGroup()">New Group</a></li>
<li><a ng-click="importContact()">New Contact</a></li> <li><a ng-click="importContact()">New Contact</a></li>
<li><a ng-click="openContacts()">Contacts</a></li> <li ng-if="!isEmpty.contacts"><a ng-click="openContacts()">Contacts</a></li>
<li><a ng-click="openSettings()">Settings</a></li> <li><a ng-click="openSettings()">Settings</a></li>
</ul> </ul>
</div> </div>

2
app/partials/mobile/head.html

@ -19,7 +19,7 @@
<ul ng-if="!curDialog.peer &amp;&amp; isLoggedIn" class="dropdown-menu"> <ul ng-if="!curDialog.peer &amp;&amp; isLoggedIn" class="dropdown-menu">
<li><a ng-click="openGroup()">New Group</a></li> <li><a ng-click="openGroup()">New Group</a></li>
<li><a ng-click="importContact()">New Contact</a></li> <li><a ng-click="importContact()">New Contact</a></li>
<li><a ng-click="openContacts()">Contacts</a></li> <li ng-if="!isEmpty.contacts"><a ng-click="openContacts()">Contacts</a></li>
<li><a ng-click="openSettings()">Settings</a></li> <li><a ng-click="openSettings()">Settings</a></li>
<li><a ng-click="logOut()">Log Out</a></li> <li><a ng-click="logOut()">Log Out</a></li>
</ul> </ul>

10
app/vendor/jquery.emojiarea/jquery.emojiarea.js vendored

@ -484,15 +484,17 @@
'<td><a class="emoji-menu-tab icon-car"></a></td>' + '<td><a class="emoji-menu-tab icon-car"></a></td>' +
'<td><a class="emoji-menu-tab icon-grid"></a></td>' + '<td><a class="emoji-menu-tab icon-grid"></a></td>' +
'</tr></table>').appendTo(this.$itemsTailWrap); '</tr></table>').appendTo(this.$itemsTailWrap);
this.$itemsWrap = $('<div class="emoji-items-wrap nano"></div>').appendTo(this.$itemsTailWrap); this.$itemsWrap = $('<div class="emoji-items-wrap nano mobile_scrollable_wrap"></div>').appendTo(this.$itemsTailWrap);
this.$items = $('<div class="emoji-items nano-content">').appendTo(this.$itemsWrap); this.$items = $('<div class="emoji-items nano-content">').appendTo(this.$itemsWrap);
$('<div class="emoji-menu-tail">').appendTo(this.$menu); $('<div class="emoji-menu-tail">').appendTo(this.$menu);
/*! MODIFICATION END */ /*! MODIFICATION END */
$body.append(this.$menu); $body.append(this.$menu);
/*! MODIFICATION: Following line is added by Igor Zhukov, in order to add scrollbars to EmojiMenu */ /*! MODIFICATION: Following 3 lines were added by Igor Zhukov, in order to add scrollbars to EmojiMenu */
if (!Config.Mobile) {
this.$itemsWrap.nanoScroller({preventPageScrolling: true, tabIndex: -1}); this.$itemsWrap.nanoScroller({preventPageScrolling: true, tabIndex: -1});
}
$body.on('keydown', function(e) { $body.on('keydown', function(e) {
if (e.keyCode === KEY_ESC || e.keyCode === KEY_TAB) { if (e.keyCode === KEY_ESC || e.keyCode === KEY_TAB) {
@ -583,7 +585,9 @@
}); });
this.currentCategory = category; this.currentCategory = category;
this.load(category); this.load(category);
if (!Config.Mobile) {
this.$itemsWrap.nanoScroller({ scroll: 'top' }); this.$itemsWrap.nanoScroller({ scroll: 'top' });
}
}; };
/*! MODIFICATION END */ /*! MODIFICATION END */
@ -608,10 +612,12 @@
var updateItems = function () { var updateItems = function () {
self.$items.html(html.join('')); self.$items.html(html.join(''));
if (!Config.Mobile) {
setTimeout(function () { setTimeout(function () {
self.$itemsWrap.nanoScroller(); self.$itemsWrap.nanoScroller();
}, 100); }, 100);
} }
}
if (category > 0) { if (category > 0) {
for (var key in options) { for (var key in options) {

Loading…
Cancel
Save