mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-09-15 02:18:00 +00:00
(js) Review Mail module to decrease watchers
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
|
||||
(function() {
|
||||
|
||||
/**
|
||||
* sgMessageListItem - A directive that watches some attributes of a message. Any component inside the
|
||||
* list item should depends on this directive and extend the 'onUpdate' method instead of creating new
|
||||
* independent watchers.
|
||||
* @memberof SOGo.MailerUI
|
||||
*/
|
||||
function sgMessageListItem() {
|
||||
return {
|
||||
restrict: 'C',
|
||||
scope: {},
|
||||
bindToController: {
|
||||
message: '=sgMessage'
|
||||
},
|
||||
controller: 'sgMessageListItemController'
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
sgMessageListItemController.$inject = ['$scope', '$element', 'Mailbox'];
|
||||
function sgMessageListItemController($scope, $element, Mailbox) {
|
||||
var $ctrl = this;
|
||||
|
||||
|
||||
this.$onInit = function () {
|
||||
// this.service = Message;
|
||||
this.MailboxService = Mailbox;
|
||||
|
||||
$scope.$watch(
|
||||
function() {
|
||||
return $ctrl.message? [ _.pick($ctrl.message, ['uid', 'isread', 'isflagged']) ] : null;
|
||||
},
|
||||
function(newId, oldId) {
|
||||
if ($ctrl.message) {
|
||||
// Message has changed
|
||||
$ctrl.onUpdate();
|
||||
}
|
||||
},
|
||||
true // compare for object equality
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
this.onUpdate = function () {
|
||||
// Is the message unread?
|
||||
if (this.message.isread)
|
||||
$element.removeClass('unread');
|
||||
else
|
||||
$element.addClass('unread');
|
||||
// Is the message selected?
|
||||
if (Mailbox.selectedFolder.isSelectedMessage(this.message.uid, this.message.$mailbox.path))
|
||||
$element.addClass('md-default-theme md-accent md-bg md-hue-2');
|
||||
else
|
||||
$element.removeClass('md-default-theme md-accent md-bg md-hue-2');
|
||||
};
|
||||
|
||||
|
||||
this.setVisibility = function (element, visible) {
|
||||
if (visible)
|
||||
element.classList.remove('ng-hide');
|
||||
else
|
||||
element.classList.add('ng-hide');
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
angular
|
||||
.module('SOGo.MailerUI')
|
||||
.controller('sgMessageListItemController', sgMessageListItemController)
|
||||
.directive('sgMessageListItem', sgMessageListItem);
|
||||
})();
|
||||
Reference in New Issue
Block a user