mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Gmail style selection (UNSTABLE)
This commit is contained in:
parent
deffb81888
commit
da88e0d2b5
19 changed files with 561 additions and 572 deletions
|
|
@ -14,23 +14,17 @@ function AdminPackages()
|
||||||
this.packagesReal = oData.packagesReal;
|
this.packagesReal = oData.packagesReal;
|
||||||
this.packagesMainUpdatable = oData.packagesMainUpdatable;
|
this.packagesMainUpdatable = oData.packagesMainUpdatable;
|
||||||
|
|
||||||
this.packagesCurrent = ko.computed(function () {
|
this.packagesCurrent = this.packages.filter(function (oItem) {
|
||||||
return _.filter(this.packages(), function (oItem) {
|
|
||||||
return oItem && '' !== oItem['installed'] && !oItem['compare'];
|
return oItem && '' !== oItem['installed'] && !oItem['compare'];
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.packagesAvailableForUpdate = ko.computed(function () {
|
this.packagesAvailableForUpdate = this.packages.filter(function (oItem) {
|
||||||
return _.filter(this.packages(), function (oItem) {
|
|
||||||
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
|
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.packagesAvailableForInstallation = ko.computed(function () {
|
this.packagesAvailableForInstallation = this.packages.filter(function (oItem) {
|
||||||
return _.filter(this.packages(), function (oItem) {
|
|
||||||
return oItem && '' === oItem['installed'];
|
return oItem && '' === oItem['installed'];
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.visibility = ko.computed(function () {
|
this.visibility = ko.computed(function () {
|
||||||
return oData.packagesLoading() ? 'visible' : 'hidden';
|
return oData.packagesLoading() ? 'visible' : 'hidden';
|
||||||
|
|
|
||||||
|
|
@ -3,34 +3,60 @@
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {koProperty} oKoList
|
* @param {koProperty} oKoList
|
||||||
* @param {koProperty} oKoFocusedItem
|
|
||||||
* @param {koProperty} oKoSelectedItem
|
* @param {koProperty} oKoSelectedItem
|
||||||
* @param {string} sItemSelector
|
* @param {string} sItemSelector
|
||||||
* @param {string} sItemSelectedSelector
|
* @param {string} sItemSelectedSelector
|
||||||
* @param {string} sItemCheckedSelector
|
* @param {string} sItemCheckedSelector
|
||||||
* @param {string} sItemFocusedSelector
|
* @param {string} sItemFocusedSelector
|
||||||
*/
|
*/
|
||||||
function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
function Selector(oKoList, oKoSelectedItem,
|
||||||
sItemSelector, sItemSelectedSelector, sItemCheckedSelector, sItemFocusedSelector)
|
sItemSelector, sItemSelectedSelector, sItemCheckedSelector, sItemFocusedSelector)
|
||||||
{
|
{
|
||||||
this.list = oKoList;
|
this.list = oKoList;
|
||||||
|
|
||||||
this.focusedItem = oKoFocusedItem;
|
this.listChecked = ko.computed(function () {
|
||||||
|
return _.filter(this.list(), function (oItem) {
|
||||||
|
return oItem.checked();
|
||||||
|
});
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this.isListChecked = ko.computed(function () {
|
||||||
|
return 0 < this.listChecked().length;
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this.lastSelectedItem = ko.observable(null);
|
||||||
|
this.focusedItem = ko.observable(null);
|
||||||
this.selectedItem = oKoSelectedItem;
|
this.selectedItem = oKoSelectedItem;
|
||||||
|
|
||||||
this.focusedItem.extend({'toggleSubscribe': [null,
|
this.listChecked.subscribe(function (aItems) {
|
||||||
function (oPrev) {
|
if (0 < aItems.length)
|
||||||
if (oPrev)
|
|
||||||
{
|
{
|
||||||
oPrev.focused(false);
|
this.selectedItem(null);
|
||||||
}
|
}
|
||||||
}, function (oNext) {
|
else if (this.bAutoSelect && this.lastSelectedItem())
|
||||||
if (oNext)
|
|
||||||
{
|
{
|
||||||
oNext.focused(true);
|
this.selectedItem(this.lastSelectedItem());
|
||||||
|
}
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this.selectedItem.subscribe(function (oItem) {
|
||||||
|
|
||||||
|
if (oItem)
|
||||||
|
{
|
||||||
|
if (this.bAutoSelect)
|
||||||
|
{
|
||||||
|
this.lastSelectedItem(oItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isListChecked())
|
||||||
|
{
|
||||||
|
_.each(this.listChecked(), function (oSubItem) {
|
||||||
|
oSubItem.checked(false);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]});
|
|
||||||
|
}, this);
|
||||||
|
|
||||||
this.selectedItem.extend({'toggleSubscribe': [null,
|
this.selectedItem.extend({'toggleSubscribe': [null,
|
||||||
function (oPrev) {
|
function (oPrev) {
|
||||||
|
|
@ -46,6 +72,20 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
}
|
}
|
||||||
]});
|
]});
|
||||||
|
|
||||||
|
this.focusedItem.extend({'toggleSubscribe': [null,
|
||||||
|
function (oPrev) {
|
||||||
|
if (oPrev)
|
||||||
|
{
|
||||||
|
oPrev.focused(false);
|
||||||
|
}
|
||||||
|
}, function (oNext) {
|
||||||
|
if (oNext)
|
||||||
|
{
|
||||||
|
oNext.focused(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]});
|
||||||
|
|
||||||
this.oContentVisible = null;
|
this.oContentVisible = null;
|
||||||
this.oContentScrollable = null;
|
this.oContentScrollable = null;
|
||||||
|
|
||||||
|
|
@ -77,8 +117,7 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
{
|
{
|
||||||
if (oItem)
|
if (oItem)
|
||||||
{
|
{
|
||||||
this.selectItemCallbacks(oItem, !!oItem.__clicked);
|
this.selectItemCallbacks(oItem);
|
||||||
oItem.__clicked = false;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -96,25 +135,33 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
var
|
var
|
||||||
self = this,
|
|
||||||
aCheckedCache = [],
|
aCheckedCache = [],
|
||||||
|
mFocused = null,
|
||||||
mSelected = null
|
mSelected = null
|
||||||
;
|
;
|
||||||
|
|
||||||
this.list.subscribe(function () {
|
this.list.subscribe(function () {
|
||||||
|
|
||||||
var self = this, aItems = this.list();
|
var self = this, aItems = this.list();
|
||||||
if (Utils.isArray(aItems))
|
if (Utils.isArray(aItems))
|
||||||
{
|
{
|
||||||
_.each(aItems, function (oItem) {
|
_.each(aItems, function (oItem) {
|
||||||
|
|
||||||
if (oItem.checked())
|
if (oItem.checked())
|
||||||
{
|
{
|
||||||
aCheckedCache.push(self.getItemUid(oItem));
|
aCheckedCache.push(self.getItemUid(oItem));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (null === mFocused && oItem.focused())
|
||||||
|
{
|
||||||
|
mFocused = self.getItemUid(oItem);
|
||||||
|
}
|
||||||
|
|
||||||
if (null === mSelected && oItem.selected())
|
if (null === mSelected && oItem.selected())
|
||||||
{
|
{
|
||||||
mSelected = self.getItemUid(oItem);
|
mSelected = self.getItemUid(oItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, this, 'beforeChange');
|
}, this, 'beforeChange');
|
||||||
|
|
@ -125,12 +172,12 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
|
|
||||||
var
|
var
|
||||||
self = this,
|
self = this,
|
||||||
iLen = 0,
|
bChecked = false,
|
||||||
sFocusedUid = this.focusedItem() ? this.getItemUid(this.focusedItem()) : ''
|
iLen = 0
|
||||||
;
|
;
|
||||||
|
|
||||||
this.selectedItem(null);
|
|
||||||
this.focusedItem(null);
|
this.focusedItem(null);
|
||||||
|
this.selectedItem(null);
|
||||||
|
|
||||||
if (Utils.isArray(aItems))
|
if (Utils.isArray(aItems))
|
||||||
{
|
{
|
||||||
|
|
@ -142,22 +189,20 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
|
|
||||||
if (0 < iLen && -1 < Utils.inArray(sUid, aCheckedCache))
|
if (0 < iLen && -1 < Utils.inArray(sUid, aCheckedCache))
|
||||||
{
|
{
|
||||||
|
bChecked = true;
|
||||||
oItem.checked(true);
|
oItem.checked(true);
|
||||||
iLen--;
|
iLen--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('' !== sFocusedUid && sUid === sFocusedUid)
|
if (null !== mFocused && mFocused === sUid)
|
||||||
{
|
{
|
||||||
self.focusedItem(oItem);
|
self.focusedItem(oItem);
|
||||||
|
mFocused = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null !== mSelected && mSelected === self.getItemUid(oItem))
|
if (!bChecked && null !== mSelected && mSelected === sUid)
|
||||||
{
|
|
||||||
if (!oItem.selected())
|
|
||||||
{
|
{
|
||||||
self.selectedItem(oItem);
|
self.selectedItem(oItem);
|
||||||
}
|
|
||||||
|
|
||||||
mSelected = null;
|
mSelected = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -166,20 +211,17 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
this.useItemSelectCallback = true;
|
this.useItemSelectCallback = true;
|
||||||
|
|
||||||
aCheckedCache = [];
|
aCheckedCache = [];
|
||||||
|
mFocused = null;
|
||||||
mSelected = null;
|
mSelected = null;
|
||||||
|
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.list.setSelectedByUid = function (sUid) {
|
|
||||||
self.selectByUid(sUid, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.selectItemCallbacksThrottle = _.debounce(this.selectItemCallbacks, 300);
|
this.selectItemCallbacksThrottle = _.debounce(this.selectItemCallbacks, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
Selector.prototype.selectItemCallbacks = function (oItem, bClick)
|
Selector.prototype.selectItemCallbacks = function (oItem)
|
||||||
{
|
{
|
||||||
(this.oCallbacks['onItemSelect'] || this.emptyFunction)(oItem, bClick);
|
(this.oCallbacks['onItemSelect'] || this.emptyFunction)(oItem);
|
||||||
};
|
};
|
||||||
|
|
||||||
Selector.prototype.goDown = function (bForceSelect)
|
Selector.prototype.goDown = function (bForceSelect)
|
||||||
|
|
@ -214,7 +256,6 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
|
||||||
})
|
})
|
||||||
.on('click', this.sItemSelector, function (oEvent) {
|
.on('click', this.sItemSelector, function (oEvent) {
|
||||||
self.actionClick(ko.dataFor(this), oEvent, true);
|
self.actionClick(ko.dataFor(this), oEvent, true);
|
||||||
return false;
|
|
||||||
})
|
})
|
||||||
.on('click', this.sItemCheckedSelector, function (oEvent) {
|
.on('click', this.sItemCheckedSelector, function (oEvent) {
|
||||||
var oItem = ko.dataFor(this);
|
var oItem = ko.dataFor(this);
|
||||||
|
|
@ -227,17 +268,9 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.sLastUid = self.getItemUid(oItem);
|
self.sLastUid = self.getItemUid(oItem);
|
||||||
if (oItem.selected())
|
|
||||||
{
|
|
||||||
oItem.checked(false);
|
|
||||||
self.selectedItem(null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
oItem.checked(!oItem.checked());
|
oItem.checked(!oItem.checked());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -302,25 +335,6 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Selector.prototype.selectByUid = function (mUid, bUseCallback)
|
|
||||||
{
|
|
||||||
bUseCallback = Utils.isUnd(bUseCallback) ? true : !!bUseCallback;
|
|
||||||
this.useItemSelectCallback = bUseCallback;
|
|
||||||
|
|
||||||
var
|
|
||||||
oItem = _.find(this.list(), function (oItem) {
|
|
||||||
return mUid === this.getItemUid(oItem);
|
|
||||||
}, this)
|
|
||||||
;
|
|
||||||
|
|
||||||
if (oItem)
|
|
||||||
{
|
|
||||||
this.selectedItem(oItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.useItemSelectCallback = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
Selector.prototype.useKeyboard = function (bValue)
|
Selector.prototype.useKeyboard = function (bValue)
|
||||||
{
|
{
|
||||||
this.bUseKeyboard = !!bValue;
|
this.bUseKeyboard = !!bValue;
|
||||||
|
|
@ -402,7 +416,7 @@ Selector.prototype.newSelectPosition = function (iEventKeyCode, bShiftKey, bForc
|
||||||
break;
|
break;
|
||||||
case Enums.EventKeyCode.Down:
|
case Enums.EventKeyCode.Down:
|
||||||
case Enums.EventKeyCode.Insert:
|
case Enums.EventKeyCode.Insert:
|
||||||
case Enums.EventKeyCode.Space:
|
// case Enums.EventKeyCode.Space:
|
||||||
if (bNext)
|
if (bNext)
|
||||||
{
|
{
|
||||||
oResult = oItem;
|
oResult = oItem;
|
||||||
|
|
@ -476,7 +490,7 @@ Selector.prototype.newSelectPosition = function (iEventKeyCode, bShiftKey, bForc
|
||||||
|
|
||||||
this.focusedItem(oResult);
|
this.focusedItem(oResult);
|
||||||
|
|
||||||
if ((this.bAutoSelect || !!bForceSelect) && Enums.EventKeyCode.Space !== iEventKeyCode)
|
if ((this.bAutoSelect || !!bForceSelect) && !this.isListChecked() && Enums.EventKeyCode.Space !== iEventKeyCode)
|
||||||
{
|
{
|
||||||
window.clearTimeout(this.iSelectTimer);
|
window.clearTimeout(this.iSelectTimer);
|
||||||
this.iSelectTimer = window.setTimeout(function () {
|
this.iSelectTimer = window.setTimeout(function () {
|
||||||
|
|
@ -586,9 +600,8 @@ Selector.prototype.eventClickFunction = function (oItem, oEvent)
|
||||||
/**
|
/**
|
||||||
* @param {Object} oItem
|
* @param {Object} oItem
|
||||||
* @param {Object=} oEvent
|
* @param {Object=} oEvent
|
||||||
* @param {boolean=} bRealClick
|
|
||||||
*/
|
*/
|
||||||
Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
|
Selector.prototype.actionClick = function (oItem, oEvent)
|
||||||
{
|
{
|
||||||
if (oItem)
|
if (oItem)
|
||||||
{
|
{
|
||||||
|
|
@ -608,7 +621,6 @@ Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
oItem.checked(!oItem.checked());
|
oItem.checked(!oItem.checked());
|
||||||
|
|
||||||
this.eventClickFunction(oItem, oEvent);
|
this.eventClickFunction(oItem, oEvent);
|
||||||
}
|
}
|
||||||
else if (oEvent.ctrlKey)
|
else if (oEvent.ctrlKey)
|
||||||
|
|
@ -622,11 +634,6 @@ Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
|
||||||
|
|
||||||
if (bClick)
|
if (bClick)
|
||||||
{
|
{
|
||||||
if (bRealClick)
|
|
||||||
{
|
|
||||||
oItem.__clicked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selectedItem(oItem);
|
this.selectedItem(oItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1184,3 +1184,12 @@ MessageModel.prototype.replacePlaneTextBody = function (sPlain)
|
||||||
this.body.html(sPlain).addClass('b-text-part plain');
|
this.body.html(sPlain).addClass('b-text-part plain');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
MessageModel.prototype.flagHash = function ()
|
||||||
|
{
|
||||||
|
return [this.deleted(), this.unseen(), this.flagged(), this.answered(), this.forwarded(),
|
||||||
|
this.isReadReceipt()].join('');
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -298,18 +298,10 @@ function WebMailDataStorage()
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.currentMessage = ko.observable(null);
|
this.currentMessage = ko.observable(null);
|
||||||
this.currentFocusedMessage = ko.observable(null);
|
|
||||||
|
|
||||||
this.message.subscribe(function (oMessage) {
|
|
||||||
if (null === oMessage)
|
|
||||||
{
|
|
||||||
this.currentMessage(null);
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.messageListChecked = ko.computed(function () {
|
this.messageListChecked = ko.computed(function () {
|
||||||
return _.filter(this.messageList(), function (oMessage) {
|
return _.filter(this.messageList(), function (oItem) {
|
||||||
return oMessage.checked();
|
return oItem.checked();
|
||||||
});
|
});
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
|
@ -324,21 +316,6 @@ function WebMailDataStorage()
|
||||||
|
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.messageListCheckedUids = ko.computed(function () {
|
|
||||||
var aList = [];
|
|
||||||
_.each(this.messageListChecked(), function (oMessage) {
|
|
||||||
if (oMessage)
|
|
||||||
{
|
|
||||||
aList.push(oMessage.uid);
|
|
||||||
if (0 < oMessage.threadsLen() && 0 === oMessage.parentUid() && oMessage.lastInCollapsedThread())
|
|
||||||
{
|
|
||||||
aList = _.union(aList, oMessage.threads());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return aList;
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(function () {
|
this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(function () {
|
||||||
var aList = [];
|
var aList = [];
|
||||||
_.each(this.messageListCheckedOrSelected(), function (oMessage) {
|
_.each(this.messageListCheckedOrSelected(), function (oMessage) {
|
||||||
|
|
@ -375,17 +352,13 @@ function WebMailDataStorage()
|
||||||
this.openpgpkeys = ko.observableArray([]);
|
this.openpgpkeys = ko.observableArray([]);
|
||||||
this.openpgpKeyring = null;
|
this.openpgpKeyring = null;
|
||||||
|
|
||||||
this.openpgpkeysPublic = ko.computed(function () {
|
this.openpgpkeysPublic = this.openpgpkeys.filter(function (oItem) {
|
||||||
return _.filter(this.openpgpkeys(), function (oItem) {
|
|
||||||
return !!(oItem && !oItem.isPrivate);
|
return !!(oItem && !oItem.isPrivate);
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.openpgpkeysPrivate = ko.computed(function () {
|
this.openpgpkeysPrivate = this.openpgpkeys.filter(function (oItem) {
|
||||||
return _.filter(this.openpgpkeys(), function (oItem) {
|
|
||||||
return !!(oItem && oItem.isPrivate);
|
return !!(oItem && oItem.isPrivate);
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
// google
|
// google
|
||||||
this.googleActions = ko.observable(false);
|
this.googleActions = ko.observable(false);
|
||||||
|
|
@ -837,28 +810,28 @@ WebMailDataStorage.prototype.removeMessagesFromList = function (
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// select next message
|
// select next message // TODO
|
||||||
if (bMoveSelected)
|
// if (bMoveSelected)
|
||||||
{
|
// {
|
||||||
_.each(aMessageList, function (oMessage) {
|
// _.each(aMessageList, function (oMessage) {
|
||||||
if (!oNextMessage && oMessage)
|
// if (!oNextMessage && oMessage)
|
||||||
{
|
// {
|
||||||
if (bGetNext && !oMessage.checked() && !oMessage.deleted() && !oMessage.selected())
|
// if (bGetNext && !oMessage.checked() && !oMessage.deleted() && !oMessage.selected())
|
||||||
{
|
// {
|
||||||
oNextMessage = oMessage;
|
// oNextMessage = oMessage;
|
||||||
}
|
// }
|
||||||
else if (!bGetNext && oMessage.selected())
|
// else if (!bGetNext && oMessage.selected())
|
||||||
{
|
// {
|
||||||
bGetNext = true;
|
// bGetNext = true;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
//
|
||||||
if (oNextMessage)
|
// if (oNextMessage)
|
||||||
{
|
// {
|
||||||
this.currentMessage(oNextMessage);
|
// this.currentMessage(oNextMessage);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
oData.messageListIsNotCompleted(true);
|
oData.messageListIsNotCompleted(true);
|
||||||
|
|
||||||
|
|
@ -1049,6 +1022,17 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Array} aList
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
WebMailDataStorage.prototype.calculateMessageListHash = function (aList)
|
||||||
|
{
|
||||||
|
return _.map(aList, function (oMessage) {
|
||||||
|
return '' + oMessage.hash + '_' + oMessage.threadsLen() + '_' + oMessage.flagHash();
|
||||||
|
}).join('|');
|
||||||
|
};
|
||||||
|
|
||||||
WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
||||||
{
|
{
|
||||||
if (oData && oData.Result && 'Collection/MessageCollection' === oData.Result['@Object'] &&
|
if (oData && oData.Result && 'Collection/MessageCollection' === oData.Result['@Object'] &&
|
||||||
|
|
@ -1062,6 +1046,7 @@ WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
||||||
iLen = 0,
|
iLen = 0,
|
||||||
iCount = 0,
|
iCount = 0,
|
||||||
iOffset = 0,
|
iOffset = 0,
|
||||||
|
aPrevList = [],
|
||||||
aList = [],
|
aList = [],
|
||||||
iUtc = moment().unix(),
|
iUtc = moment().unix(),
|
||||||
aStaticList = oRainLoopData.staticMessageList,
|
aStaticList = oRainLoopData.staticMessageList,
|
||||||
|
|
@ -1155,14 +1140,25 @@ WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
||||||
oRainLoopData.messageListEndFolder(Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : '');
|
oRainLoopData.messageListEndFolder(Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : '');
|
||||||
oRainLoopData.messageListPage(Math.ceil((iOffset / oRainLoopData.messagesPerPage()) + 1));
|
oRainLoopData.messageListPage(Math.ceil((iOffset / oRainLoopData.messagesPerPage()) + 1));
|
||||||
|
|
||||||
|
aPrevList = oRainLoopData.messageList();
|
||||||
|
if (aPrevList.length !== aList.length)
|
||||||
|
{
|
||||||
oRainLoopData.messageList(aList);
|
oRainLoopData.messageList(aList);
|
||||||
|
}
|
||||||
|
else if (this.calculateMessageListHash(aPrevList) !== this.calculateMessageListHash(aList))
|
||||||
|
{
|
||||||
|
oRainLoopData.messageList(aList);
|
||||||
|
}
|
||||||
|
|
||||||
|
aPrevList = [];
|
||||||
oRainLoopData.messageListIsNotCompleted(false);
|
oRainLoopData.messageListIsNotCompleted(false);
|
||||||
|
|
||||||
oMessage = oRainLoopData.message();
|
oMessage = oRainLoopData.message();
|
||||||
if (oMessage && oRainLoopData.messageList.setSelectedByUid)
|
// TODO
|
||||||
{
|
// if (oMessage && oRainLoopData.messageList.setSelectedByUid)
|
||||||
oRainLoopData.messageList.setSelectedByUid(oMessage.generateUid());
|
// {
|
||||||
}
|
// oRainLoopData.messageList.setSelectedByUid(oMessage.generateUid());
|
||||||
|
// }
|
||||||
|
|
||||||
if (aStaticList.length < aList.length)
|
if (aStaticList.length < aList.length)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&.focused .sidebarParent {
|
&.focused .sidebarParent {
|
||||||
background-color: #aaa;
|
background-color: #bbb;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.deleted {
|
&.deleted {
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,7 @@ html.rl-no-preview-pane {
|
||||||
}
|
}
|
||||||
|
|
||||||
&.focused .sidebarParent {
|
&.focused .sidebarParent {
|
||||||
background-color: #aaa !important;
|
background-color: #bbb !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.e-single-line {
|
&.e-single-line {
|
||||||
|
|
@ -516,7 +516,7 @@ html.rl-no-preview-pane {
|
||||||
}
|
}
|
||||||
|
|
||||||
&.hideMessageListCheckbox {
|
&.hideMessageListCheckbox {
|
||||||
.checkedParent, .checkboxCkeckAll {
|
.checkedParent {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
.sidebarParent {
|
.sidebarParent {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ function MailBoxMessageListViewModel()
|
||||||
this.message = oData.message;
|
this.message = oData.message;
|
||||||
this.messageList = oData.messageList;
|
this.messageList = oData.messageList;
|
||||||
this.currentMessage = oData.currentMessage;
|
this.currentMessage = oData.currentMessage;
|
||||||
this.currentFocusedMessage = oData.currentFocusedMessage;
|
|
||||||
this.isMessageSelected = oData.isMessageSelected;
|
this.isMessageSelected = oData.isMessageSelected;
|
||||||
this.messageListSearch = oData.messageListSearch;
|
this.messageListSearch = oData.messageListSearch;
|
||||||
this.messageListError = oData.messageListError;
|
this.messageListError = oData.messageListError;
|
||||||
|
|
@ -63,7 +62,7 @@ function MailBoxMessageListViewModel()
|
||||||
|
|
||||||
this.checkAll = ko.computed({
|
this.checkAll = ko.computed({
|
||||||
'read': function () {
|
'read': function () {
|
||||||
return 0 < RL.data().messageListCheckedOrSelected().length;
|
return 0 < RL.data().messageListChecked().length;
|
||||||
},
|
},
|
||||||
|
|
||||||
'write': function (bValue) {
|
'write': function (bValue) {
|
||||||
|
|
@ -71,11 +70,6 @@ function MailBoxMessageListViewModel()
|
||||||
_.each(RL.data().messageList(), function (oMessage) {
|
_.each(RL.data().messageList(), function (oMessage) {
|
||||||
oMessage.checked(bValue);
|
oMessage.checked(bValue);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!bValue)
|
|
||||||
{
|
|
||||||
RL.data().message(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -93,7 +87,7 @@ function MailBoxMessageListViewModel()
|
||||||
this.isIncompleteChecked = ko.computed(function () {
|
this.isIncompleteChecked = ko.computed(function () {
|
||||||
var
|
var
|
||||||
iM = RL.data().messageList().length,
|
iM = RL.data().messageList().length,
|
||||||
iC = RL.data().messageListCheckedOrSelected().length
|
iC = RL.data().messageListChecked().length
|
||||||
;
|
;
|
||||||
return 0 < iM && 0 < iC && iM > iC;
|
return 0 < iM && 0 < iC && iM > iC;
|
||||||
}, this);
|
}, this);
|
||||||
|
|
@ -102,10 +96,6 @@ function MailBoxMessageListViewModel()
|
||||||
return 0 < this.messageList().length;
|
return 0 < this.messageList().length;
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.hasCheckedLines = ko.computed(function () {
|
|
||||||
return 0 < this.messageListChecked().length;
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.hasCheckedOrSelectedLines = ko.computed(function () {
|
this.hasCheckedOrSelectedLines = ko.computed(function () {
|
||||||
return 0 < this.messageListCheckedOrSelected().length;
|
return 0 < this.messageListCheckedOrSelected().length;
|
||||||
}, this);
|
}, this);
|
||||||
|
|
@ -179,10 +169,6 @@ function MailBoxMessageListViewModel()
|
||||||
|
|
||||||
this.moveCommand = Utils.createCommand(this, Utils.emptyFunction, this.canBeMoved);
|
this.moveCommand = Utils.createCommand(this, Utils.emptyFunction, this.canBeMoved);
|
||||||
|
|
||||||
this.setCommand = Utils.createCommand(this, Utils.emptyFunction, this.hasCheckedLines);
|
|
||||||
|
|
||||||
this.checkCommand = Utils.createCommand(this, Utils.emptyFunction, this.hasCheckedLines);
|
|
||||||
|
|
||||||
this.reloadCommand = Utils.createCommand(this, function () {
|
this.reloadCommand = Utils.createCommand(this, function () {
|
||||||
if (!RL.data().messageListCompleteLoadingThrottle())
|
if (!RL.data().messageListCompleteLoadingThrottle())
|
||||||
{
|
{
|
||||||
|
|
@ -192,11 +178,11 @@ function MailBoxMessageListViewModel()
|
||||||
|
|
||||||
this.quotaTooltip = _.bind(this.quotaTooltip, this);
|
this.quotaTooltip = _.bind(this.quotaTooltip, this);
|
||||||
|
|
||||||
this.selector = new Selector(this.messageList, this.currentFocusedMessage, this.currentMessage,
|
this.selector = new Selector(this.messageList, this.currentMessage,
|
||||||
'.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage',
|
'.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage',
|
||||||
'.messageListItem.focused');
|
'.messageListItem.focused');
|
||||||
|
|
||||||
this.selector.on('onItemSelect', _.bind(function (oMessage, bClick) {
|
this.selector.on('onItemSelect', _.bind(function (oMessage) {
|
||||||
if (oMessage)
|
if (oMessage)
|
||||||
{
|
{
|
||||||
oData.message(oData.staticMessageList.populateByMessageListItem(oMessage));
|
oData.message(oData.staticMessageList.populateByMessageListItem(oMessage));
|
||||||
|
|
@ -207,10 +193,6 @@ function MailBoxMessageListViewModel()
|
||||||
kn.setHash(RL.link().messagePreview(), true);
|
kn.setHash(RL.link().messagePreview(), true);
|
||||||
oData.message.focused(true);
|
oData.message.focused(true);
|
||||||
}
|
}
|
||||||
else if (bClick)
|
|
||||||
{
|
|
||||||
oData.message.focused(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ function MailBoxMessageViewViewModel()
|
||||||
|
|
||||||
this.keyScope = oData.keyScope;
|
this.keyScope = oData.keyScope;
|
||||||
this.message = oData.message;
|
this.message = oData.message;
|
||||||
|
this.currentMessage = oData.currentMessage;
|
||||||
this.messageLoading = oData.messageLoading;
|
this.messageLoading = oData.messageLoading;
|
||||||
this.messageLoadingThrottle = oData.messageLoadingThrottle;
|
this.messageLoadingThrottle = oData.messageLoadingThrottle;
|
||||||
this.messagesBodiesDom = oData.messagesBodiesDom;
|
this.messagesBodiesDom = oData.messagesBodiesDom;
|
||||||
|
|
@ -43,6 +44,13 @@ function MailBoxMessageViewViewModel()
|
||||||
return !this.messageLoadingThrottle() && !!this.message();
|
return !this.messageLoadingThrottle() && !!this.message();
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
this.message.subscribe(function (oMessage) {
|
||||||
|
if (!oMessage && this.currentMessage())
|
||||||
|
{
|
||||||
|
this.currentMessage(null);
|
||||||
|
}
|
||||||
|
}, this);
|
||||||
|
|
||||||
this.canBeRepliedOrForwarded = this.messageVisibility;
|
this.canBeRepliedOrForwarded = this.messageVisibility;
|
||||||
|
|
||||||
// commands
|
// commands
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ function PopupsContactsViewModel()
|
||||||
this.contacts.importing = ko.observable(false).extend({'throttle': 200});
|
this.contacts.importing = ko.observable(false).extend({'throttle': 200});
|
||||||
|
|
||||||
this.currentContact = ko.observable(null);
|
this.currentContact = ko.observable(null);
|
||||||
this.currentFocusedContact = ko.observable(null);
|
|
||||||
|
|
||||||
this.importUploaderButton = ko.observable(null);
|
this.importUploaderButton = ko.observable(null);
|
||||||
|
|
||||||
|
|
@ -162,7 +161,7 @@ function PopupsContactsViewModel()
|
||||||
});
|
});
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.selector = new Selector(this.contacts, this.currentFocusedContact, this.currentContact,
|
this.selector = new Selector(this.contacts, this.currentContact,
|
||||||
'.e-contact-item .actionHandle', '.e-contact-item.selected', '.e-contact-item .checkboxItem',
|
'.e-contact-item .actionHandle', '.e-contact-item.selected', '.e-contact-item .checkboxItem',
|
||||||
'.e-contact-item.focused');
|
'.e-contact-item.focused');
|
||||||
|
|
||||||
|
|
@ -565,10 +564,10 @@ PopupsContactsViewModel.prototype.reloadContactList = function (bDropPagePositio
|
||||||
self.viewClearSearch('' !== self.search());
|
self.viewClearSearch('' !== self.search());
|
||||||
self.contacts.loading(false);
|
self.contacts.loading(false);
|
||||||
|
|
||||||
if ('' !== self.viewID() && !self.currentContact() && self.contacts.setSelectedByUid)
|
// if ('' !== self.viewID() && !self.currentContact() && self.contacts.setSelectedByUid)
|
||||||
{
|
// {
|
||||||
self.contacts.setSelectedByUid('' + self.viewID());
|
// self.contacts.setSelectedByUid('' + self.viewID());
|
||||||
}
|
// }
|
||||||
|
|
||||||
}, iOffset, Consts.Defaults.ContactsPerPage, this.search());
|
}, iOffset, Consts.Defaults.ContactsPerPage, this.search());
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
|
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="checkedParent">
|
<div class="checkedParent">
|
||||||
<i class="checkboxMessage" data-bind="css: checked() || selected() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
|
<i class="checkboxMessage" data-bind="css: checked() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="senderParent actionHandle dragHandle">
|
<div class="senderParent actionHandle dragHandle">
|
||||||
<span class="threadsCountParent fullThreadHandle" data-bind="visible: '' !== threadsLenResult(), css: { 'lastSelected': !lastInCollapsedThread() }">
|
<span class="threadsCountParent fullThreadHandle" data-bind="visible: '' !== threadsLenResult(), css: { 'lastSelected': !lastInCollapsedThread() }">
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
|
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="checkedParent">
|
<div class="checkedParent">
|
||||||
<i class="checkboxMessage" data-bind="css: checked() || selected() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
|
<i class="checkboxMessage" data-bind="css: checked() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="flagParent">
|
<div class="flagParent">
|
||||||
<span class="flagOn">
|
<span class="flagOn">
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
<div class="delimiter"></div>
|
<div class="delimiter"></div>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div class="checkedParent">
|
<div class="checkedParent">
|
||||||
<i class="checkboxItem" data-bind="css: checked() || selected() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
|
<i class="checkboxItem" data-bind="css: checked() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="shareParent actionHandle">
|
<div class="shareParent actionHandle">
|
||||||
<i class="icon-share"></i>
|
<i class="icon-share"></i>
|
||||||
|
|
|
||||||
|
|
@ -6844,7 +6844,7 @@ html.rl-no-preview-pane .messageList.message-selected {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
.messageList .b-content .messageListItem.focused .sidebarParent {
|
.messageList .b-content .messageListItem.focused .sidebarParent {
|
||||||
background-color: #aaa !important;
|
background-color: #bbb !important;
|
||||||
}
|
}
|
||||||
.messageList .b-content .messageListItem.e-single-line {
|
.messageList .b-content .messageListItem.e-single-line {
|
||||||
height: 35px;
|
height: 35px;
|
||||||
|
|
@ -7079,8 +7079,7 @@ html.rl-no-preview-pane .messageList.message-selected {
|
||||||
opacity: 0.97;
|
opacity: 0.97;
|
||||||
filter: alpha(opacity=97);
|
filter: alpha(opacity=97);
|
||||||
}
|
}
|
||||||
.messageList.hideMessageListCheckbox .checkedParent,
|
.messageList.hideMessageListCheckbox .checkedParent {
|
||||||
.messageList.hideMessageListCheckbox .checkboxCkeckAll {
|
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
.messageList.hideMessageListCheckbox .sidebarParent {
|
.messageList.hideMessageListCheckbox .sidebarParent {
|
||||||
|
|
@ -7617,7 +7616,7 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
.b-contacts-content.modal .b-list-content .e-contact-item.focused .sidebarParent {
|
.b-contacts-content.modal .b-list-content .e-contact-item.focused .sidebarParent {
|
||||||
background-color: #aaa;
|
background-color: #bbb;
|
||||||
}
|
}
|
||||||
.b-contacts-content.modal .b-list-content .e-contact-item.deleted {
|
.b-contacts-content.modal .b-list-content .e-contact-item.deleted {
|
||||||
max-height: 0px;
|
max-height: 0px;
|
||||||
|
|
|
||||||
2
rainloop/v/0.0.0/static/css/app.min.css
vendored
2
rainloop/v/0.0.0/static/css/app.min.css
vendored
File diff suppressed because one or more lines are too long
|
|
@ -6419,23 +6419,17 @@ function AdminPackages()
|
||||||
this.packagesReal = oData.packagesReal;
|
this.packagesReal = oData.packagesReal;
|
||||||
this.packagesMainUpdatable = oData.packagesMainUpdatable;
|
this.packagesMainUpdatable = oData.packagesMainUpdatable;
|
||||||
|
|
||||||
this.packagesCurrent = ko.computed(function () {
|
this.packagesCurrent = this.packages.filter(function (oItem) {
|
||||||
return _.filter(this.packages(), function (oItem) {
|
|
||||||
return oItem && '' !== oItem['installed'] && !oItem['compare'];
|
return oItem && '' !== oItem['installed'] && !oItem['compare'];
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.packagesAvailableForUpdate = ko.computed(function () {
|
this.packagesAvailableForUpdate = this.packages.filter(function (oItem) {
|
||||||
return _.filter(this.packages(), function (oItem) {
|
|
||||||
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
|
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.packagesAvailableForInstallation = ko.computed(function () {
|
this.packagesAvailableForInstallation = this.packages.filter(function (oItem) {
|
||||||
return _.filter(this.packages(), function (oItem) {
|
|
||||||
return oItem && '' === oItem['installed'];
|
return oItem && '' === oItem['installed'];
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.visibility = ko.computed(function () {
|
this.visibility = ko.computed(function () {
|
||||||
return oData.packagesLoading() ? 'visible' : 'hidden';
|
return oData.packagesLoading() ? 'visible' : 'hidden';
|
||||||
|
|
|
||||||
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -3905,34 +3905,60 @@ NewHtmlEditorWrapper.prototype.clear = function (bFocus)
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {koProperty} oKoList
|
* @param {koProperty} oKoList
|
||||||
* @param {koProperty} oKoFocusedItem
|
|
||||||
* @param {koProperty} oKoSelectedItem
|
* @param {koProperty} oKoSelectedItem
|
||||||
* @param {string} sItemSelector
|
* @param {string} sItemSelector
|
||||||
* @param {string} sItemSelectedSelector
|
* @param {string} sItemSelectedSelector
|
||||||
* @param {string} sItemCheckedSelector
|
* @param {string} sItemCheckedSelector
|
||||||
* @param {string} sItemFocusedSelector
|
* @param {string} sItemFocusedSelector
|
||||||
*/
|
*/
|
||||||
function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
function Selector(oKoList, oKoSelectedItem,
|
||||||
sItemSelector, sItemSelectedSelector, sItemCheckedSelector, sItemFocusedSelector)
|
sItemSelector, sItemSelectedSelector, sItemCheckedSelector, sItemFocusedSelector)
|
||||||
{
|
{
|
||||||
this.list = oKoList;
|
this.list = oKoList;
|
||||||
|
|
||||||
this.focusedItem = oKoFocusedItem;
|
this.listChecked = ko.computed(function () {
|
||||||
|
return _.filter(this.list(), function (oItem) {
|
||||||
|
return oItem.checked();
|
||||||
|
});
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this.isListChecked = ko.computed(function () {
|
||||||
|
return 0 < this.listChecked().length;
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this.lastSelectedItem = ko.observable(null);
|
||||||
|
this.focusedItem = ko.observable(null);
|
||||||
this.selectedItem = oKoSelectedItem;
|
this.selectedItem = oKoSelectedItem;
|
||||||
|
|
||||||
this.focusedItem.extend({'toggleSubscribe': [null,
|
this.listChecked.subscribe(function (aItems) {
|
||||||
function (oPrev) {
|
if (0 < aItems.length)
|
||||||
if (oPrev)
|
|
||||||
{
|
{
|
||||||
oPrev.focused(false);
|
this.selectedItem(null);
|
||||||
}
|
}
|
||||||
}, function (oNext) {
|
else if (this.bAutoSelect && this.lastSelectedItem())
|
||||||
if (oNext)
|
|
||||||
{
|
{
|
||||||
oNext.focused(true);
|
this.selectedItem(this.lastSelectedItem());
|
||||||
|
}
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this.selectedItem.subscribe(function (oItem) {
|
||||||
|
|
||||||
|
if (oItem)
|
||||||
|
{
|
||||||
|
if (this.bAutoSelect)
|
||||||
|
{
|
||||||
|
this.lastSelectedItem(oItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isListChecked())
|
||||||
|
{
|
||||||
|
_.each(this.listChecked(), function (oSubItem) {
|
||||||
|
oSubItem.checked(false);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]});
|
|
||||||
|
}, this);
|
||||||
|
|
||||||
this.selectedItem.extend({'toggleSubscribe': [null,
|
this.selectedItem.extend({'toggleSubscribe': [null,
|
||||||
function (oPrev) {
|
function (oPrev) {
|
||||||
|
|
@ -3948,6 +3974,20 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
}
|
}
|
||||||
]});
|
]});
|
||||||
|
|
||||||
|
this.focusedItem.extend({'toggleSubscribe': [null,
|
||||||
|
function (oPrev) {
|
||||||
|
if (oPrev)
|
||||||
|
{
|
||||||
|
oPrev.focused(false);
|
||||||
|
}
|
||||||
|
}, function (oNext) {
|
||||||
|
if (oNext)
|
||||||
|
{
|
||||||
|
oNext.focused(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]});
|
||||||
|
|
||||||
this.oContentVisible = null;
|
this.oContentVisible = null;
|
||||||
this.oContentScrollable = null;
|
this.oContentScrollable = null;
|
||||||
|
|
||||||
|
|
@ -3979,8 +4019,7 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
{
|
{
|
||||||
if (oItem)
|
if (oItem)
|
||||||
{
|
{
|
||||||
this.selectItemCallbacks(oItem, !!oItem.__clicked);
|
this.selectItemCallbacks(oItem);
|
||||||
oItem.__clicked = false;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -3998,25 +4037,33 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
var
|
var
|
||||||
self = this,
|
|
||||||
aCheckedCache = [],
|
aCheckedCache = [],
|
||||||
|
mFocused = null,
|
||||||
mSelected = null
|
mSelected = null
|
||||||
;
|
;
|
||||||
|
|
||||||
this.list.subscribe(function () {
|
this.list.subscribe(function () {
|
||||||
|
|
||||||
var self = this, aItems = this.list();
|
var self = this, aItems = this.list();
|
||||||
if (Utils.isArray(aItems))
|
if (Utils.isArray(aItems))
|
||||||
{
|
{
|
||||||
_.each(aItems, function (oItem) {
|
_.each(aItems, function (oItem) {
|
||||||
|
|
||||||
if (oItem.checked())
|
if (oItem.checked())
|
||||||
{
|
{
|
||||||
aCheckedCache.push(self.getItemUid(oItem));
|
aCheckedCache.push(self.getItemUid(oItem));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (null === mFocused && oItem.focused())
|
||||||
|
{
|
||||||
|
mFocused = self.getItemUid(oItem);
|
||||||
|
}
|
||||||
|
|
||||||
if (null === mSelected && oItem.selected())
|
if (null === mSelected && oItem.selected())
|
||||||
{
|
{
|
||||||
mSelected = self.getItemUid(oItem);
|
mSelected = self.getItemUid(oItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, this, 'beforeChange');
|
}, this, 'beforeChange');
|
||||||
|
|
@ -4027,12 +4074,12 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
|
|
||||||
var
|
var
|
||||||
self = this,
|
self = this,
|
||||||
iLen = 0,
|
bChecked = false,
|
||||||
sFocusedUid = this.focusedItem() ? this.getItemUid(this.focusedItem()) : ''
|
iLen = 0
|
||||||
;
|
;
|
||||||
|
|
||||||
this.selectedItem(null);
|
|
||||||
this.focusedItem(null);
|
this.focusedItem(null);
|
||||||
|
this.selectedItem(null);
|
||||||
|
|
||||||
if (Utils.isArray(aItems))
|
if (Utils.isArray(aItems))
|
||||||
{
|
{
|
||||||
|
|
@ -4044,22 +4091,20 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
|
|
||||||
if (0 < iLen && -1 < Utils.inArray(sUid, aCheckedCache))
|
if (0 < iLen && -1 < Utils.inArray(sUid, aCheckedCache))
|
||||||
{
|
{
|
||||||
|
bChecked = true;
|
||||||
oItem.checked(true);
|
oItem.checked(true);
|
||||||
iLen--;
|
iLen--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('' !== sFocusedUid && sUid === sFocusedUid)
|
if (null !== mFocused && mFocused === sUid)
|
||||||
{
|
{
|
||||||
self.focusedItem(oItem);
|
self.focusedItem(oItem);
|
||||||
|
mFocused = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null !== mSelected && mSelected === self.getItemUid(oItem))
|
if (!bChecked && null !== mSelected && mSelected === sUid)
|
||||||
{
|
|
||||||
if (!oItem.selected())
|
|
||||||
{
|
{
|
||||||
self.selectedItem(oItem);
|
self.selectedItem(oItem);
|
||||||
}
|
|
||||||
|
|
||||||
mSelected = null;
|
mSelected = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -4068,20 +4113,17 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
|
||||||
this.useItemSelectCallback = true;
|
this.useItemSelectCallback = true;
|
||||||
|
|
||||||
aCheckedCache = [];
|
aCheckedCache = [];
|
||||||
|
mFocused = null;
|
||||||
mSelected = null;
|
mSelected = null;
|
||||||
|
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.list.setSelectedByUid = function (sUid) {
|
|
||||||
self.selectByUid(sUid, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.selectItemCallbacksThrottle = _.debounce(this.selectItemCallbacks, 300);
|
this.selectItemCallbacksThrottle = _.debounce(this.selectItemCallbacks, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
Selector.prototype.selectItemCallbacks = function (oItem, bClick)
|
Selector.prototype.selectItemCallbacks = function (oItem)
|
||||||
{
|
{
|
||||||
(this.oCallbacks['onItemSelect'] || this.emptyFunction)(oItem, bClick);
|
(this.oCallbacks['onItemSelect'] || this.emptyFunction)(oItem);
|
||||||
};
|
};
|
||||||
|
|
||||||
Selector.prototype.goDown = function (bForceSelect)
|
Selector.prototype.goDown = function (bForceSelect)
|
||||||
|
|
@ -4116,7 +4158,6 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
|
||||||
})
|
})
|
||||||
.on('click', this.sItemSelector, function (oEvent) {
|
.on('click', this.sItemSelector, function (oEvent) {
|
||||||
self.actionClick(ko.dataFor(this), oEvent, true);
|
self.actionClick(ko.dataFor(this), oEvent, true);
|
||||||
return false;
|
|
||||||
})
|
})
|
||||||
.on('click', this.sItemCheckedSelector, function (oEvent) {
|
.on('click', this.sItemCheckedSelector, function (oEvent) {
|
||||||
var oItem = ko.dataFor(this);
|
var oItem = ko.dataFor(this);
|
||||||
|
|
@ -4129,17 +4170,9 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.sLastUid = self.getItemUid(oItem);
|
self.sLastUid = self.getItemUid(oItem);
|
||||||
if (oItem.selected())
|
|
||||||
{
|
|
||||||
oItem.checked(false);
|
|
||||||
self.selectedItem(null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
oItem.checked(!oItem.checked());
|
oItem.checked(!oItem.checked());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -4204,25 +4237,6 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Selector.prototype.selectByUid = function (mUid, bUseCallback)
|
|
||||||
{
|
|
||||||
bUseCallback = Utils.isUnd(bUseCallback) ? true : !!bUseCallback;
|
|
||||||
this.useItemSelectCallback = bUseCallback;
|
|
||||||
|
|
||||||
var
|
|
||||||
oItem = _.find(this.list(), function (oItem) {
|
|
||||||
return mUid === this.getItemUid(oItem);
|
|
||||||
}, this)
|
|
||||||
;
|
|
||||||
|
|
||||||
if (oItem)
|
|
||||||
{
|
|
||||||
this.selectedItem(oItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.useItemSelectCallback = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
Selector.prototype.useKeyboard = function (bValue)
|
Selector.prototype.useKeyboard = function (bValue)
|
||||||
{
|
{
|
||||||
this.bUseKeyboard = !!bValue;
|
this.bUseKeyboard = !!bValue;
|
||||||
|
|
@ -4304,7 +4318,7 @@ Selector.prototype.newSelectPosition = function (iEventKeyCode, bShiftKey, bForc
|
||||||
break;
|
break;
|
||||||
case Enums.EventKeyCode.Down:
|
case Enums.EventKeyCode.Down:
|
||||||
case Enums.EventKeyCode.Insert:
|
case Enums.EventKeyCode.Insert:
|
||||||
case Enums.EventKeyCode.Space:
|
// case Enums.EventKeyCode.Space:
|
||||||
if (bNext)
|
if (bNext)
|
||||||
{
|
{
|
||||||
oResult = oItem;
|
oResult = oItem;
|
||||||
|
|
@ -4378,7 +4392,7 @@ Selector.prototype.newSelectPosition = function (iEventKeyCode, bShiftKey, bForc
|
||||||
|
|
||||||
this.focusedItem(oResult);
|
this.focusedItem(oResult);
|
||||||
|
|
||||||
if ((this.bAutoSelect || !!bForceSelect) && Enums.EventKeyCode.Space !== iEventKeyCode)
|
if ((this.bAutoSelect || !!bForceSelect) && !this.isListChecked() && Enums.EventKeyCode.Space !== iEventKeyCode)
|
||||||
{
|
{
|
||||||
window.clearTimeout(this.iSelectTimer);
|
window.clearTimeout(this.iSelectTimer);
|
||||||
this.iSelectTimer = window.setTimeout(function () {
|
this.iSelectTimer = window.setTimeout(function () {
|
||||||
|
|
@ -4488,9 +4502,8 @@ Selector.prototype.eventClickFunction = function (oItem, oEvent)
|
||||||
/**
|
/**
|
||||||
* @param {Object} oItem
|
* @param {Object} oItem
|
||||||
* @param {Object=} oEvent
|
* @param {Object=} oEvent
|
||||||
* @param {boolean=} bRealClick
|
|
||||||
*/
|
*/
|
||||||
Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
|
Selector.prototype.actionClick = function (oItem, oEvent)
|
||||||
{
|
{
|
||||||
if (oItem)
|
if (oItem)
|
||||||
{
|
{
|
||||||
|
|
@ -4510,7 +4523,6 @@ Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
oItem.checked(!oItem.checked());
|
oItem.checked(!oItem.checked());
|
||||||
|
|
||||||
this.eventClickFunction(oItem, oEvent);
|
this.eventClickFunction(oItem, oEvent);
|
||||||
}
|
}
|
||||||
else if (oEvent.ctrlKey)
|
else if (oEvent.ctrlKey)
|
||||||
|
|
@ -4524,11 +4536,6 @@ Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
|
||||||
|
|
||||||
if (bClick)
|
if (bClick)
|
||||||
{
|
{
|
||||||
if (bRealClick)
|
|
||||||
{
|
|
||||||
oItem.__clicked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selectedItem(oItem);
|
this.selectedItem(oItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -7348,6 +7355,15 @@ MessageModel.prototype.replacePlaneTextBody = function (sPlain)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
MessageModel.prototype.flagHash = function ()
|
||||||
|
{
|
||||||
|
return [this.deleted(), this.unseen(), this.flagged(), this.answered(), this.forwarded(),
|
||||||
|
this.isReadReceipt()].join('');
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
|
|
@ -9623,7 +9639,6 @@ function PopupsContactsViewModel()
|
||||||
this.contacts.importing = ko.observable(false).extend({'throttle': 200});
|
this.contacts.importing = ko.observable(false).extend({'throttle': 200});
|
||||||
|
|
||||||
this.currentContact = ko.observable(null);
|
this.currentContact = ko.observable(null);
|
||||||
this.currentFocusedContact = ko.observable(null);
|
|
||||||
|
|
||||||
this.importUploaderButton = ko.observable(null);
|
this.importUploaderButton = ko.observable(null);
|
||||||
|
|
||||||
|
|
@ -9750,7 +9765,7 @@ function PopupsContactsViewModel()
|
||||||
});
|
});
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.selector = new Selector(this.contacts, this.currentFocusedContact, this.currentContact,
|
this.selector = new Selector(this.contacts, this.currentContact,
|
||||||
'.e-contact-item .actionHandle', '.e-contact-item.selected', '.e-contact-item .checkboxItem',
|
'.e-contact-item .actionHandle', '.e-contact-item.selected', '.e-contact-item .checkboxItem',
|
||||||
'.e-contact-item.focused');
|
'.e-contact-item.focused');
|
||||||
|
|
||||||
|
|
@ -10153,10 +10168,10 @@ PopupsContactsViewModel.prototype.reloadContactList = function (bDropPagePositio
|
||||||
self.viewClearSearch('' !== self.search());
|
self.viewClearSearch('' !== self.search());
|
||||||
self.contacts.loading(false);
|
self.contacts.loading(false);
|
||||||
|
|
||||||
if ('' !== self.viewID() && !self.currentContact() && self.contacts.setSelectedByUid)
|
// if ('' !== self.viewID() && !self.currentContact() && self.contacts.setSelectedByUid)
|
||||||
{
|
// {
|
||||||
self.contacts.setSelectedByUid('' + self.viewID());
|
// self.contacts.setSelectedByUid('' + self.viewID());
|
||||||
}
|
// }
|
||||||
|
|
||||||
}, iOffset, Consts.Defaults.ContactsPerPage, this.search());
|
}, iOffset, Consts.Defaults.ContactsPerPage, this.search());
|
||||||
};
|
};
|
||||||
|
|
@ -11785,7 +11800,6 @@ function MailBoxMessageListViewModel()
|
||||||
this.message = oData.message;
|
this.message = oData.message;
|
||||||
this.messageList = oData.messageList;
|
this.messageList = oData.messageList;
|
||||||
this.currentMessage = oData.currentMessage;
|
this.currentMessage = oData.currentMessage;
|
||||||
this.currentFocusedMessage = oData.currentFocusedMessage;
|
|
||||||
this.isMessageSelected = oData.isMessageSelected;
|
this.isMessageSelected = oData.isMessageSelected;
|
||||||
this.messageListSearch = oData.messageListSearch;
|
this.messageListSearch = oData.messageListSearch;
|
||||||
this.messageListError = oData.messageListError;
|
this.messageListError = oData.messageListError;
|
||||||
|
|
@ -11829,7 +11843,7 @@ function MailBoxMessageListViewModel()
|
||||||
|
|
||||||
this.checkAll = ko.computed({
|
this.checkAll = ko.computed({
|
||||||
'read': function () {
|
'read': function () {
|
||||||
return 0 < RL.data().messageListCheckedOrSelected().length;
|
return 0 < RL.data().messageListChecked().length;
|
||||||
},
|
},
|
||||||
|
|
||||||
'write': function (bValue) {
|
'write': function (bValue) {
|
||||||
|
|
@ -11837,11 +11851,6 @@ function MailBoxMessageListViewModel()
|
||||||
_.each(RL.data().messageList(), function (oMessage) {
|
_.each(RL.data().messageList(), function (oMessage) {
|
||||||
oMessage.checked(bValue);
|
oMessage.checked(bValue);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!bValue)
|
|
||||||
{
|
|
||||||
RL.data().message(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -11859,7 +11868,7 @@ function MailBoxMessageListViewModel()
|
||||||
this.isIncompleteChecked = ko.computed(function () {
|
this.isIncompleteChecked = ko.computed(function () {
|
||||||
var
|
var
|
||||||
iM = RL.data().messageList().length,
|
iM = RL.data().messageList().length,
|
||||||
iC = RL.data().messageListCheckedOrSelected().length
|
iC = RL.data().messageListChecked().length
|
||||||
;
|
;
|
||||||
return 0 < iM && 0 < iC && iM > iC;
|
return 0 < iM && 0 < iC && iM > iC;
|
||||||
}, this);
|
}, this);
|
||||||
|
|
@ -11868,10 +11877,6 @@ function MailBoxMessageListViewModel()
|
||||||
return 0 < this.messageList().length;
|
return 0 < this.messageList().length;
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.hasCheckedLines = ko.computed(function () {
|
|
||||||
return 0 < this.messageListChecked().length;
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.hasCheckedOrSelectedLines = ko.computed(function () {
|
this.hasCheckedOrSelectedLines = ko.computed(function () {
|
||||||
return 0 < this.messageListCheckedOrSelected().length;
|
return 0 < this.messageListCheckedOrSelected().length;
|
||||||
}, this);
|
}, this);
|
||||||
|
|
@ -11945,10 +11950,6 @@ function MailBoxMessageListViewModel()
|
||||||
|
|
||||||
this.moveCommand = Utils.createCommand(this, Utils.emptyFunction, this.canBeMoved);
|
this.moveCommand = Utils.createCommand(this, Utils.emptyFunction, this.canBeMoved);
|
||||||
|
|
||||||
this.setCommand = Utils.createCommand(this, Utils.emptyFunction, this.hasCheckedLines);
|
|
||||||
|
|
||||||
this.checkCommand = Utils.createCommand(this, Utils.emptyFunction, this.hasCheckedLines);
|
|
||||||
|
|
||||||
this.reloadCommand = Utils.createCommand(this, function () {
|
this.reloadCommand = Utils.createCommand(this, function () {
|
||||||
if (!RL.data().messageListCompleteLoadingThrottle())
|
if (!RL.data().messageListCompleteLoadingThrottle())
|
||||||
{
|
{
|
||||||
|
|
@ -11958,11 +11959,11 @@ function MailBoxMessageListViewModel()
|
||||||
|
|
||||||
this.quotaTooltip = _.bind(this.quotaTooltip, this);
|
this.quotaTooltip = _.bind(this.quotaTooltip, this);
|
||||||
|
|
||||||
this.selector = new Selector(this.messageList, this.currentFocusedMessage, this.currentMessage,
|
this.selector = new Selector(this.messageList, this.currentMessage,
|
||||||
'.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage',
|
'.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage',
|
||||||
'.messageListItem.focused');
|
'.messageListItem.focused');
|
||||||
|
|
||||||
this.selector.on('onItemSelect', _.bind(function (oMessage, bClick) {
|
this.selector.on('onItemSelect', _.bind(function (oMessage) {
|
||||||
if (oMessage)
|
if (oMessage)
|
||||||
{
|
{
|
||||||
oData.message(oData.staticMessageList.populateByMessageListItem(oMessage));
|
oData.message(oData.staticMessageList.populateByMessageListItem(oMessage));
|
||||||
|
|
@ -11973,10 +11974,6 @@ function MailBoxMessageListViewModel()
|
||||||
kn.setHash(RL.link().messagePreview(), true);
|
kn.setHash(RL.link().messagePreview(), true);
|
||||||
oData.message.focused(true);
|
oData.message.focused(true);
|
||||||
}
|
}
|
||||||
else if (bClick)
|
|
||||||
{
|
|
||||||
oData.message.focused(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -12687,6 +12684,7 @@ function MailBoxMessageViewViewModel()
|
||||||
|
|
||||||
this.keyScope = oData.keyScope;
|
this.keyScope = oData.keyScope;
|
||||||
this.message = oData.message;
|
this.message = oData.message;
|
||||||
|
this.currentMessage = oData.currentMessage;
|
||||||
this.messageLoading = oData.messageLoading;
|
this.messageLoading = oData.messageLoading;
|
||||||
this.messageLoadingThrottle = oData.messageLoadingThrottle;
|
this.messageLoadingThrottle = oData.messageLoadingThrottle;
|
||||||
this.messagesBodiesDom = oData.messagesBodiesDom;
|
this.messagesBodiesDom = oData.messagesBodiesDom;
|
||||||
|
|
@ -12707,6 +12705,13 @@ function MailBoxMessageViewViewModel()
|
||||||
return !this.messageLoadingThrottle() && !!this.message();
|
return !this.messageLoadingThrottle() && !!this.message();
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
this.message.subscribe(function (oMessage) {
|
||||||
|
if (!oMessage && this.currentMessage())
|
||||||
|
{
|
||||||
|
this.currentMessage(null);
|
||||||
|
}
|
||||||
|
}, this);
|
||||||
|
|
||||||
this.canBeRepliedOrForwarded = this.messageVisibility;
|
this.canBeRepliedOrForwarded = this.messageVisibility;
|
||||||
|
|
||||||
// commands
|
// commands
|
||||||
|
|
@ -15030,18 +15035,10 @@ function WebMailDataStorage()
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.currentMessage = ko.observable(null);
|
this.currentMessage = ko.observable(null);
|
||||||
this.currentFocusedMessage = ko.observable(null);
|
|
||||||
|
|
||||||
this.message.subscribe(function (oMessage) {
|
|
||||||
if (null === oMessage)
|
|
||||||
{
|
|
||||||
this.currentMessage(null);
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.messageListChecked = ko.computed(function () {
|
this.messageListChecked = ko.computed(function () {
|
||||||
return _.filter(this.messageList(), function (oMessage) {
|
return _.filter(this.messageList(), function (oItem) {
|
||||||
return oMessage.checked();
|
return oItem.checked();
|
||||||
});
|
});
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
|
@ -15056,21 +15053,6 @@ function WebMailDataStorage()
|
||||||
|
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.messageListCheckedUids = ko.computed(function () {
|
|
||||||
var aList = [];
|
|
||||||
_.each(this.messageListChecked(), function (oMessage) {
|
|
||||||
if (oMessage)
|
|
||||||
{
|
|
||||||
aList.push(oMessage.uid);
|
|
||||||
if (0 < oMessage.threadsLen() && 0 === oMessage.parentUid() && oMessage.lastInCollapsedThread())
|
|
||||||
{
|
|
||||||
aList = _.union(aList, oMessage.threads());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return aList;
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(function () {
|
this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(function () {
|
||||||
var aList = [];
|
var aList = [];
|
||||||
_.each(this.messageListCheckedOrSelected(), function (oMessage) {
|
_.each(this.messageListCheckedOrSelected(), function (oMessage) {
|
||||||
|
|
@ -15107,17 +15089,13 @@ function WebMailDataStorage()
|
||||||
this.openpgpkeys = ko.observableArray([]);
|
this.openpgpkeys = ko.observableArray([]);
|
||||||
this.openpgpKeyring = null;
|
this.openpgpKeyring = null;
|
||||||
|
|
||||||
this.openpgpkeysPublic = ko.computed(function () {
|
this.openpgpkeysPublic = this.openpgpkeys.filter(function (oItem) {
|
||||||
return _.filter(this.openpgpkeys(), function (oItem) {
|
|
||||||
return !!(oItem && !oItem.isPrivate);
|
return !!(oItem && !oItem.isPrivate);
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.openpgpkeysPrivate = ko.computed(function () {
|
this.openpgpkeysPrivate = this.openpgpkeys.filter(function (oItem) {
|
||||||
return _.filter(this.openpgpkeys(), function (oItem) {
|
|
||||||
return !!(oItem && oItem.isPrivate);
|
return !!(oItem && oItem.isPrivate);
|
||||||
});
|
});
|
||||||
}, this);
|
|
||||||
|
|
||||||
// google
|
// google
|
||||||
this.googleActions = ko.observable(false);
|
this.googleActions = ko.observable(false);
|
||||||
|
|
@ -15569,28 +15547,28 @@ WebMailDataStorage.prototype.removeMessagesFromList = function (
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// select next message
|
// select next message // TODO
|
||||||
if (bMoveSelected)
|
// if (bMoveSelected)
|
||||||
{
|
// {
|
||||||
_.each(aMessageList, function (oMessage) {
|
// _.each(aMessageList, function (oMessage) {
|
||||||
if (!oNextMessage && oMessage)
|
// if (!oNextMessage && oMessage)
|
||||||
{
|
// {
|
||||||
if (bGetNext && !oMessage.checked() && !oMessage.deleted() && !oMessage.selected())
|
// if (bGetNext && !oMessage.checked() && !oMessage.deleted() && !oMessage.selected())
|
||||||
{
|
// {
|
||||||
oNextMessage = oMessage;
|
// oNextMessage = oMessage;
|
||||||
}
|
// }
|
||||||
else if (!bGetNext && oMessage.selected())
|
// else if (!bGetNext && oMessage.selected())
|
||||||
{
|
// {
|
||||||
bGetNext = true;
|
// bGetNext = true;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
//
|
||||||
if (oNextMessage)
|
// if (oNextMessage)
|
||||||
{
|
// {
|
||||||
this.currentMessage(oNextMessage);
|
// this.currentMessage(oNextMessage);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
oData.messageListIsNotCompleted(true);
|
oData.messageListIsNotCompleted(true);
|
||||||
|
|
||||||
|
|
@ -15781,6 +15759,17 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Array} aList
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
WebMailDataStorage.prototype.calculateMessageListHash = function (aList)
|
||||||
|
{
|
||||||
|
return _.map(aList, function (oMessage) {
|
||||||
|
return '' + oMessage.hash + '_' + oMessage.threadsLen() + '_' + oMessage.flagHash();
|
||||||
|
}).join('|');
|
||||||
|
};
|
||||||
|
|
||||||
WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
||||||
{
|
{
|
||||||
if (oData && oData.Result && 'Collection/MessageCollection' === oData.Result['@Object'] &&
|
if (oData && oData.Result && 'Collection/MessageCollection' === oData.Result['@Object'] &&
|
||||||
|
|
@ -15794,6 +15783,7 @@ WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
||||||
iLen = 0,
|
iLen = 0,
|
||||||
iCount = 0,
|
iCount = 0,
|
||||||
iOffset = 0,
|
iOffset = 0,
|
||||||
|
aPrevList = [],
|
||||||
aList = [],
|
aList = [],
|
||||||
iUtc = moment().unix(),
|
iUtc = moment().unix(),
|
||||||
aStaticList = oRainLoopData.staticMessageList,
|
aStaticList = oRainLoopData.staticMessageList,
|
||||||
|
|
@ -15887,14 +15877,25 @@ WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
|
||||||
oRainLoopData.messageListEndFolder(Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : '');
|
oRainLoopData.messageListEndFolder(Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : '');
|
||||||
oRainLoopData.messageListPage(Math.ceil((iOffset / oRainLoopData.messagesPerPage()) + 1));
|
oRainLoopData.messageListPage(Math.ceil((iOffset / oRainLoopData.messagesPerPage()) + 1));
|
||||||
|
|
||||||
|
aPrevList = oRainLoopData.messageList();
|
||||||
|
if (aPrevList.length !== aList.length)
|
||||||
|
{
|
||||||
oRainLoopData.messageList(aList);
|
oRainLoopData.messageList(aList);
|
||||||
|
}
|
||||||
|
else if (this.calculateMessageListHash(aPrevList) !== this.calculateMessageListHash(aList))
|
||||||
|
{
|
||||||
|
oRainLoopData.messageList(aList);
|
||||||
|
}
|
||||||
|
|
||||||
|
aPrevList = [];
|
||||||
oRainLoopData.messageListIsNotCompleted(false);
|
oRainLoopData.messageListIsNotCompleted(false);
|
||||||
|
|
||||||
oMessage = oRainLoopData.message();
|
oMessage = oRainLoopData.message();
|
||||||
if (oMessage && oRainLoopData.messageList.setSelectedByUid)
|
// TODO
|
||||||
{
|
// if (oMessage && oRainLoopData.messageList.setSelectedByUid)
|
||||||
oRainLoopData.messageList.setSelectedByUid(oMessage.generateUid());
|
// {
|
||||||
}
|
// oRainLoopData.messageList.setSelectedByUid(oMessage.generateUid());
|
||||||
|
// }
|
||||||
|
|
||||||
if (aStaticList.length < aList.length)
|
if (aStaticList.length < aList.length)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
16
rainloop/v/0.0.0/static/js/app.min.js
vendored
16
rainloop/v/0.0.0/static/js/app.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue