Gmail style selection (UNSTABLE)

This commit is contained in:
RainLoop Team 2014-04-09 20:01:41 +04:00
parent deffb81888
commit da88e0d2b5
19 changed files with 561 additions and 572 deletions

View file

@ -14,23 +14,17 @@ function AdminPackages()
this.packagesReal = oData.packagesReal;
this.packagesMainUpdatable = oData.packagesMainUpdatable;
this.packagesCurrent = ko.computed(function () {
return _.filter(this.packages(), function (oItem) {
return oItem && '' !== oItem['installed'] && !oItem['compare'];
});
}, this);
this.packagesAvailableForUpdate = ko.computed(function () {
return _.filter(this.packages(), function (oItem) {
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
});
}, this);
this.packagesAvailableForInstallation = ko.computed(function () {
return _.filter(this.packages(), function (oItem) {
return oItem && '' === oItem['installed'];
});
}, this);
this.packagesCurrent = this.packages.filter(function (oItem) {
return oItem && '' !== oItem['installed'] && !oItem['compare'];
});
this.packagesAvailableForUpdate = this.packages.filter(function (oItem) {
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
});
this.packagesAvailableForInstallation = this.packages.filter(function (oItem) {
return oItem && '' === oItem['installed'];
});
this.visibility = ko.computed(function () {
return oData.packagesLoading() ? 'visible' : 'hidden';

View file

@ -3,34 +3,60 @@
/**
* @constructor
* @param {koProperty} oKoList
* @param {koProperty} oKoFocusedItem
* @param {koProperty} oKoSelectedItem
* @param {string} sItemSelector
* @param {string} sItemSelectedSelector
* @param {string} sItemCheckedSelector
* @param {string} sItemFocusedSelector
*/
function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
function Selector(oKoList, oKoSelectedItem,
sItemSelector, sItemSelectedSelector, sItemCheckedSelector, sItemFocusedSelector)
{
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.focusedItem.extend({'toggleSubscribe': [null,
function (oPrev) {
if (oPrev)
this.listChecked.subscribe(function (aItems) {
if (0 < aItems.length)
{
this.selectedItem(null);
}
else if (this.bAutoSelect && this.lastSelectedItem())
{
this.selectedItem(this.lastSelectedItem());
}
}, this);
this.selectedItem.subscribe(function (oItem) {
if (oItem)
{
if (this.bAutoSelect)
{
oPrev.focused(false);
this.lastSelectedItem(oItem);
}
}, function (oNext) {
if (oNext)
if (this.isListChecked())
{
oNext.focused(true);
_.each(this.listChecked(), function (oSubItem) {
oSubItem.checked(false);
});
}
}
]});
}, this);
this.selectedItem.extend({'toggleSubscribe': [null,
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.oContentScrollable = null;
@ -77,8 +117,7 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
{
if (oItem)
{
this.selectItemCallbacks(oItem, !!oItem.__clicked);
oItem.__clicked = false;
this.selectItemCallbacks(oItem);
}
else
{
@ -96,25 +135,33 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
}, this);
var
self = this,
aCheckedCache = [],
mFocused = null,
mSelected = null
;
this.list.subscribe(function () {
var self = this, aItems = this.list();
if (Utils.isArray(aItems))
{
_.each(aItems, function (oItem) {
if (oItem.checked())
{
aCheckedCache.push(self.getItemUid(oItem));
}
if (null === mFocused && oItem.focused())
{
mFocused = self.getItemUid(oItem);
}
if (null === mSelected && oItem.selected())
{
mSelected = self.getItemUid(oItem);
}
});
}
}, this, 'beforeChange');
@ -125,12 +172,12 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
var
self = this,
iLen = 0,
sFocusedUid = this.focusedItem() ? this.getItemUid(this.focusedItem()) : ''
bChecked = false,
iLen = 0
;
this.selectedItem(null);
this.focusedItem(null);
this.selectedItem(null);
if (Utils.isArray(aItems))
{
@ -139,25 +186,23 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
_.each(aItems, function (oItem) {
var sUid = self.getItemUid(oItem);
if (0 < iLen && -1 < Utils.inArray(sUid, aCheckedCache))
{
bChecked = true;
oItem.checked(true);
iLen--;
}
if ('' !== sFocusedUid && sUid === sFocusedUid)
if (null !== mFocused && mFocused === sUid)
{
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;
}
});
@ -166,20 +211,17 @@ function Selector(oKoList, oKoFocusedItem, oKoSelectedItem,
this.useItemSelectCallback = true;
aCheckedCache = [];
mFocused = null;
mSelected = null;
}, this);
this.list.setSelectedByUid = function (sUid) {
self.selectByUid(sUid, false);
};
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)
@ -214,7 +256,6 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
})
.on('click', this.sItemSelector, function (oEvent) {
self.actionClick(ko.dataFor(this), oEvent, true);
return false;
})
.on('click', this.sItemCheckedSelector, function (oEvent) {
var oItem = ko.dataFor(this);
@ -227,15 +268,7 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeySco
else
{
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)
{
this.bUseKeyboard = !!bValue;
@ -402,7 +416,7 @@ Selector.prototype.newSelectPosition = function (iEventKeyCode, bShiftKey, bForc
break;
case Enums.EventKeyCode.Down:
case Enums.EventKeyCode.Insert:
case Enums.EventKeyCode.Space:
// case Enums.EventKeyCode.Space:
if (bNext)
{
oResult = oItem;
@ -476,7 +490,7 @@ Selector.prototype.newSelectPosition = function (iEventKeyCode, bShiftKey, bForc
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);
this.iSelectTimer = window.setTimeout(function () {
@ -586,9 +600,8 @@ Selector.prototype.eventClickFunction = function (oItem, oEvent)
/**
* @param {Object} oItem
* @param {Object=} oEvent
* @param {boolean=} bRealClick
*/
Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
Selector.prototype.actionClick = function (oItem, oEvent)
{
if (oItem)
{
@ -608,7 +621,6 @@ Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
}
oItem.checked(!oItem.checked());
this.eventClickFunction(oItem, oEvent);
}
else if (oEvent.ctrlKey)
@ -622,11 +634,6 @@ Selector.prototype.actionClick = function (oItem, oEvent, bRealClick)
if (bClick)
{
if (bRealClick)
{
oItem.__clicked = true;
}
this.selectedItem(oItem);
}
}

View file

@ -1184,3 +1184,12 @@ MessageModel.prototype.replacePlaneTextBody = function (sPlain)
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('');
};

View file

@ -298,18 +298,10 @@ function WebMailDataStorage()
}, this);
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 () {
return _.filter(this.messageList(), function (oMessage) {
return oMessage.checked();
return _.filter(this.messageList(), function (oItem) {
return oItem.checked();
});
}, this);
@ -324,21 +316,6 @@ function WebMailDataStorage()
}, 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 () {
var aList = [];
_.each(this.messageListCheckedOrSelected(), function (oMessage) {
@ -375,17 +352,13 @@ function WebMailDataStorage()
this.openpgpkeys = ko.observableArray([]);
this.openpgpKeyring = null;
this.openpgpkeysPublic = ko.computed(function () {
return _.filter(this.openpgpkeys(), function (oItem) {
return !!(oItem && !oItem.isPrivate);
});
}, this);
this.openpgpkeysPublic = this.openpgpkeys.filter(function (oItem) {
return !!(oItem && !oItem.isPrivate);
});
this.openpgpkeysPrivate = ko.computed(function () {
return _.filter(this.openpgpkeys(), function (oItem) {
return !!(oItem && oItem.isPrivate);
});
}, this);
this.openpgpkeysPrivate = this.openpgpkeys.filter(function (oItem) {
return !!(oItem && oItem.isPrivate);
});
// google
this.googleActions = ko.observable(false);
@ -837,28 +810,28 @@ WebMailDataStorage.prototype.removeMessagesFromList = function (
}
else
{
// select next message
if (bMoveSelected)
{
_.each(aMessageList, function (oMessage) {
if (!oNextMessage && oMessage)
{
if (bGetNext && !oMessage.checked() && !oMessage.deleted() && !oMessage.selected())
{
oNextMessage = oMessage;
}
else if (!bGetNext && oMessage.selected())
{
bGetNext = true;
}
}
});
if (oNextMessage)
{
this.currentMessage(oNextMessage);
}
}
// select next message // TODO
// if (bMoveSelected)
// {
// _.each(aMessageList, function (oMessage) {
// if (!oNextMessage && oMessage)
// {
// if (bGetNext && !oMessage.checked() && !oMessage.deleted() && !oMessage.selected())
// {
// oNextMessage = oMessage;
// }
// else if (!bGetNext && oMessage.selected())
// {
// bGetNext = true;
// }
// }
// });
//
// if (oNextMessage)
// {
// this.currentMessage(oNextMessage);
// }
// }
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)
{
if (oData && oData.Result && 'Collection/MessageCollection' === oData.Result['@Object'] &&
@ -1062,6 +1046,7 @@ WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
iLen = 0,
iCount = 0,
iOffset = 0,
aPrevList = [],
aList = [],
iUtc = moment().unix(),
aStaticList = oRainLoopData.staticMessageList,
@ -1155,14 +1140,25 @@ WebMailDataStorage.prototype.setMessageList = function (oData, bCached)
oRainLoopData.messageListEndFolder(Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : '');
oRainLoopData.messageListPage(Math.ceil((iOffset / oRainLoopData.messagesPerPage()) + 1));
oRainLoopData.messageList(aList);
aPrevList = oRainLoopData.messageList();
if (aPrevList.length !== aList.length)
{
oRainLoopData.messageList(aList);
}
else if (this.calculateMessageListHash(aPrevList) !== this.calculateMessageListHash(aList))
{
oRainLoopData.messageList(aList);
}
aPrevList = [];
oRainLoopData.messageListIsNotCompleted(false);
oMessage = oRainLoopData.message();
if (oMessage && oRainLoopData.messageList.setSelectedByUid)
{
oRainLoopData.messageList.setSelectedByUid(oMessage.generateUid());
}
// TODO
// if (oMessage && oRainLoopData.messageList.setSelectedByUid)
// {
// oRainLoopData.messageList.setSelectedByUid(oMessage.generateUid());
// }
if (aStaticList.length < aList.length)
{

View file

@ -162,7 +162,7 @@
}
&.focused .sidebarParent {
background-color: #aaa;
background-color: #bbb;
}
&.deleted {

View file

@ -230,7 +230,7 @@ html.rl-no-preview-pane {
}
&.focused .sidebarParent {
background-color: #aaa !important;
background-color: #bbb !important;
}
&.e-single-line {
@ -516,7 +516,7 @@ html.rl-no-preview-pane {
}
&.hideMessageListCheckbox {
.checkedParent, .checkboxCkeckAll {
.checkedParent {
display: none !important;
}
.sidebarParent {

View file

@ -19,7 +19,6 @@ function MailBoxMessageListViewModel()
this.message = oData.message;
this.messageList = oData.messageList;
this.currentMessage = oData.currentMessage;
this.currentFocusedMessage = oData.currentFocusedMessage;
this.isMessageSelected = oData.isMessageSelected;
this.messageListSearch = oData.messageListSearch;
this.messageListError = oData.messageListError;
@ -63,7 +62,7 @@ function MailBoxMessageListViewModel()
this.checkAll = ko.computed({
'read': function () {
return 0 < RL.data().messageListCheckedOrSelected().length;
return 0 < RL.data().messageListChecked().length;
},
'write': function (bValue) {
@ -71,11 +70,6 @@ function MailBoxMessageListViewModel()
_.each(RL.data().messageList(), function (oMessage) {
oMessage.checked(bValue);
});
if (!bValue)
{
RL.data().message(null);
}
}
});
@ -93,7 +87,7 @@ function MailBoxMessageListViewModel()
this.isIncompleteChecked = ko.computed(function () {
var
iM = RL.data().messageList().length,
iC = RL.data().messageListCheckedOrSelected().length
iC = RL.data().messageListChecked().length
;
return 0 < iM && 0 < iC && iM > iC;
}, this);
@ -102,10 +96,6 @@ function MailBoxMessageListViewModel()
return 0 < this.messageList().length;
}, this);
this.hasCheckedLines = ko.computed(function () {
return 0 < this.messageListChecked().length;
}, this);
this.hasCheckedOrSelectedLines = ko.computed(function () {
return 0 < this.messageListCheckedOrSelected().length;
}, this);
@ -179,10 +169,6 @@ function MailBoxMessageListViewModel()
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 () {
if (!RL.data().messageListCompleteLoadingThrottle())
{
@ -192,11 +178,11 @@ function MailBoxMessageListViewModel()
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.focused');
this.selector.on('onItemSelect', _.bind(function (oMessage, bClick) {
this.selector.on('onItemSelect', _.bind(function (oMessage) {
if (oMessage)
{
oData.message(oData.staticMessageList.populateByMessageListItem(oMessage));
@ -207,10 +193,6 @@ function MailBoxMessageListViewModel()
kn.setHash(RL.link().messagePreview(), true);
oData.message.focused(true);
}
else if (bClick)
{
oData.message.focused(false);
}
}
else
{

View file

@ -23,6 +23,7 @@ function MailBoxMessageViewViewModel()
this.keyScope = oData.keyScope;
this.message = oData.message;
this.currentMessage = oData.currentMessage;
this.messageLoading = oData.messageLoading;
this.messageLoadingThrottle = oData.messageLoadingThrottle;
this.messagesBodiesDom = oData.messagesBodiesDom;
@ -42,6 +43,13 @@ function MailBoxMessageViewViewModel()
this.messageVisibility = ko.computed(function () {
return !this.messageLoadingThrottle() && !!this.message();
}, this);
this.message.subscribe(function (oMessage) {
if (!oMessage && this.currentMessage())
{
this.currentMessage(null);
}
}, this);
this.canBeRepliedOrForwarded = this.messageVisibility;

View file

@ -35,7 +35,6 @@ function PopupsContactsViewModel()
this.contacts.importing = ko.observable(false).extend({'throttle': 200});
this.currentContact = ko.observable(null);
this.currentFocusedContact = ko.observable(null);
this.importUploaderButton = ko.observable(null);
@ -162,7 +161,7 @@ function PopupsContactsViewModel()
});
}, 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.focused');
@ -565,10 +564,10 @@ PopupsContactsViewModel.prototype.reloadContactList = function (bDropPagePositio
self.viewClearSearch('' !== self.search());
self.contacts.loading(false);
if ('' !== self.viewID() && !self.currentContact() && self.contacts.setSelectedByUid)
{
self.contacts.setSelectedByUid('' + self.viewID());
}
// if ('' !== self.viewID() && !self.currentContact() && self.contacts.setSelectedByUid)
// {
// self.contacts.setSelectedByUid('' + self.viewID());
// }
}, iOffset, Consts.Defaults.ContactsPerPage, this.search());
};

View file

@ -19,7 +19,7 @@
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
</div>
<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 class="senderParent actionHandle dragHandle">
<span class="threadsCountParent fullThreadHandle" data-bind="visible: '' !== threadsLenResult(), css: { 'lastSelected': !lastInCollapsedThread() }">

View file

@ -8,7 +8,7 @@
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
</div>
<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 class="flagParent">
<span class="flagOn">

View file

@ -68,7 +68,7 @@
<div class="delimiter"></div>
<div class="wrapper">
<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 class="shareParent actionHandle">
<i class="icon-share"></i>

View file

@ -637,7 +637,7 @@
border-radius: 8px;
}
/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */
/* =============================================================================
@ -1142,7 +1142,7 @@ table {
border-collapse: collapse;
border-spacing: 0;
}
@charset "UTF-8";
@font-face {
@ -1483,7 +1483,7 @@ table {
.icon-filter:before {
content: "\e063";
}
/** initial setup **/
.nano {
/*
@ -1600,7 +1600,7 @@ table {
.nano > .pane2:hover > .slider2, .nano > .pane2.active > .slider2 {
background-color: rgba(0, 0, 0, 0.4);
}
/* Magnific Popup CSS */
.mfp-bg {
top: 0;
@ -1965,7 +1965,7 @@ img.mfp-img {
right: 0;
padding-top: 0; }
/* overlay at start */
.mfp-fade.mfp-bg {
@ -2011,7 +2011,7 @@ img.mfp-img {
-moz-transform: translateX(50px);
transform: translateX(50px);
}
.simple-pace {
-webkit-pointer-events: none;
pointer-events: none;
@ -2082,7 +2082,7 @@ img.mfp-img {
@keyframes simple-pace-stripe-animation {
0% { transform: none; transform: none; }
100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }
}
}
.inputosaurus-container {
background-color:#fff;
border:1px solid #bcbec0;
@ -2150,7 +2150,7 @@ img.mfp-img {
box-shadow:none;
}
.inputosaurus-input-hidden { display:none; }
.flag-wrapper {
width: 24px;
height: 16px;
@ -2194,7 +2194,7 @@ img.mfp-img {
.flag.flag-pt-br {background-position: -192px -11px}
.flag.flag-cn, .flag.flag-zh-tw, .flag.flag-zh-cn, .flag.flag-zh-hk {background-position: -208px -22px}
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
.clearfix {
*zoom: 1;
@ -6844,7 +6844,7 @@ html.rl-no-preview-pane .messageList.message-selected {
height: 100%;
}
.messageList .b-content .messageListItem.focused .sidebarParent {
background-color: #aaa !important;
background-color: #bbb !important;
}
.messageList .b-content .messageListItem.e-single-line {
height: 35px;
@ -7079,8 +7079,7 @@ html.rl-no-preview-pane .messageList.message-selected {
opacity: 0.97;
filter: alpha(opacity=97);
}
.messageList.hideMessageListCheckbox .checkedParent,
.messageList.hideMessageListCheckbox .checkboxCkeckAll {
.messageList.hideMessageListCheckbox .checkedParent {
display: none !important;
}
.messageList.hideMessageListCheckbox .sidebarParent {
@ -7617,7 +7616,7 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull {
height: 100%;
}
.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 {
max-height: 0px;

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/*! RainLoop Webmail Admin Module (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
(function (window, $, ko, crossroads, hasher, _) {
/*! RainLoop Webmail Admin Module (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
(function (window, $, ko, crossroads, hasher, _) {
'use strict';
@ -70,14 +70,14 @@ var
$document = $(window.document),
NotificationClass = window.Notification && window.Notification.requestPermission ? window.Notification : null
;
;
/*jshint onevar: false*/
/**
* @type {?AdminApp}
*/
var RL = null;
/*jshint onevar: true*/
/**
* @type {?}
*/
@ -221,7 +221,7 @@ if (Globals.bAllowPdfPreview && navigator && navigator.mimeTypes)
return oType && 'application/pdf' === oType.type;
});
}
Consts.Defaults = {};
Consts.Values = {};
Consts.DataImages = {};
@ -339,7 +339,7 @@ Consts.DataImages.UserDotPic = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA
* @type {string}
*/
Consts.DataImages.TranspPic = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=';
/**
* @enum {string}
*/
@ -714,7 +714,7 @@ Enums.Notification = {
'UnknownNotification': 999,
'UnknownError': 999
};
Utils.trim = $.trim;
Utils.inArray = $.inArray;
Utils.isArray = _.isArray;
@ -2473,7 +2473,7 @@ Utils.restoreKeyFilter = function ()
};
}
};
// Base64 encode / decode
// http://www.webtoolkit.info/
@ -2636,7 +2636,7 @@ Base64 = {
}
};
/*jslint bitwise: false*/
/*jslint bitwise: false*/
ko.bindingHandlers.tooltip = {
'init': function (oElement, fValueAccessor) {
if (!Globals.bMobileDevice)
@ -3285,7 +3285,7 @@ ko.observable.fn.validateFunc = function (fFunc)
return this;
};
/**
* @constructor
*/
@ -3583,7 +3583,7 @@ LinkBuilder.prototype.socialFacebook = function ()
{
return this.sServer + 'SocialFacebook' + ('' !== this.sSpecSuffix ? '/' + this.sSpecSuffix + '/' : '');
};
/**
* @type {Object}
*/
@ -3677,7 +3677,7 @@ Plugins.settingsGet = function (sPluginSection, sName)
};
/**
* @constructor
*/
@ -3751,7 +3751,7 @@ CookieDriver.prototype.get = function (sKey)
return mResult;
};
/**
* @constructor
*/
@ -3822,7 +3822,7 @@ LocalStorageDriver.prototype.get = function (sKey)
return mResult;
};
/**
* @constructor
*/
@ -3865,7 +3865,7 @@ LocalStorage.prototype.get = function (iKey)
{
return this.oDriver ? this.oDriver.get('p' + iKey) : null;
};
/**
* @constructor
*/
@ -3878,7 +3878,7 @@ KnoinAbstractBoot.prototype.bootstart = function ()
{
};
/**
* @param {string=} sPosition = ''
* @param {string=} sTemplate = ''
@ -3967,7 +3967,7 @@ KnoinAbstractViewModel.prototype.registerPopupEscapeKey = function ()
return true;
});
};
/**
* @param {string} sScreenName
* @param {?=} aViewModels = []
@ -4043,7 +4043,7 @@ KnoinAbstractScreen.prototype.__start = function ()
this.oCross = oRoute;
}
};
/**
* @constructor
*/
@ -4432,7 +4432,7 @@ Knoin.prototype.bootstart = function ()
};
kn = new Knoin();
/**
* @param {string=} sEmail
* @param {string=} sName
@ -4796,7 +4796,7 @@ EmailModel.prototype.inputoTagLine = function ()
{
return 0 < this.name.length ? this.name + ' (' + this.email + ')' : this.email;
};
/**
* @constructor
* @extends KnoinAbstractViewModel
@ -5014,7 +5014,7 @@ PopupsDomainViewModel.prototype.clearForm = function ()
this.smtpAuth(true);
this.whiteList('');
};
/**
* @constructor
* @extends KnoinAbstractViewModel
@ -5151,7 +5151,7 @@ PopupsPluginViewModel.prototype.onBuild = function ()
}
}, this));
};
/**
* @constructor
* @extends KnoinAbstractViewModel
@ -5267,7 +5267,7 @@ PopupsActivateViewModel.prototype.validateSubscriptionKey = function ()
{
var sValue = this.key();
return '' === sValue || !!/^RL[\d]+-[A-Z0-9\-]+Z$/.test(Utils.trim(sValue));
};
};
/**
* @constructor
* @extends KnoinAbstractViewModel
@ -5327,7 +5327,7 @@ PopupsLanguagesViewModel.prototype.changeLanguage = function (sLang)
RL.data().mainLanguage(sLang);
this.cancelCommand();
};
/**
* @constructor
* @extends KnoinAbstractViewModel
@ -5435,7 +5435,7 @@ PopupsAskViewModel.prototype.onBuild = function ()
}, this));
};
/**
* @constructor
* @extends KnoinAbstractViewModel
@ -5522,7 +5522,7 @@ AdminLoginViewModel.prototype.onHide = function ()
{
this.loginFocus(false);
};
/**
* @param {?} oScreen
*
@ -5544,7 +5544,7 @@ AdminMenuViewModel.prototype.link = function (sRoute)
{
return '#/' + sRoute;
};
/**
* @constructor
* @extends KnoinAbstractViewModel
@ -5566,7 +5566,7 @@ AdminPaneViewModel.prototype.logoutClick = function ()
RL.remote().adminLogout(function () {
RL.loginAndLogoutReload();
});
};
};
/**
* @constructor
*/
@ -5666,7 +5666,7 @@ AdminGeneral.prototype.selectLanguage = function ()
{
kn.showScreenPopup(PopupsLanguagesViewModel);
};
/**
* @constructor
*/
@ -5718,7 +5718,7 @@ AdminLogin.prototype.onBuild = function ()
}, 50);
};
/**
* @constructor
*/
@ -5787,7 +5787,7 @@ AdminBranding.prototype.onBuild = function ()
}, 50);
};
/**
* @constructor
*/
@ -6007,7 +6007,7 @@ AdminContacts.prototype.onBuild = function ()
}, 50);
};
/**
* @constructor
*/
@ -6096,7 +6096,7 @@ AdminDomains.prototype.onDomainListChangeRequest = function ()
{
RL.reloadDomainList();
};
/**
* @constructor
*/
@ -6191,7 +6191,7 @@ AdminSecurity.prototype.phpInfoLink = function ()
{
return RL.link().phpInfo();
};
/**
* @constructor
*/
@ -6307,7 +6307,7 @@ AdminSocial.prototype.onBuild = function ()
}, 50);
};
/**
* @constructor
*/
@ -6404,7 +6404,7 @@ AdminPlugins.prototype.onPluginDisableRequest = function (sResult, oData)
RL.reloadPluginList();
};
/**
* @constructor
*/
@ -6419,23 +6419,17 @@ function AdminPackages()
this.packagesReal = oData.packagesReal;
this.packagesMainUpdatable = oData.packagesMainUpdatable;
this.packagesCurrent = ko.computed(function () {
return _.filter(this.packages(), function (oItem) {
return oItem && '' !== oItem['installed'] && !oItem['compare'];
});
}, this);
this.packagesAvailableForUpdate = ko.computed(function () {
return _.filter(this.packages(), function (oItem) {
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
});
}, this);
this.packagesAvailableForInstallation = ko.computed(function () {
return _.filter(this.packages(), function (oItem) {
return oItem && '' === oItem['installed'];
});
}, this);
this.packagesCurrent = this.packages.filter(function (oItem) {
return oItem && '' !== oItem['installed'] && !oItem['compare'];
});
this.packagesAvailableForUpdate = this.packages.filter(function (oItem) {
return oItem && '' !== oItem['installed'] && !!oItem['compare'];
});
this.packagesAvailableForInstallation = this.packages.filter(function (oItem) {
return oItem && '' === oItem['installed'];
});
this.visibility = ko.computed(function () {
return oData.packagesLoading() ? 'visible' : 'hidden';
@ -6508,7 +6502,7 @@ AdminPackages.prototype.installPackage = function (oPackage)
RL.remote().packageInstall(this.requestHelper(oPackage, true), oPackage);
}
};
/**
* @constructor
*/
@ -6559,7 +6553,7 @@ AdminLicensing.prototype.licenseExpiredMomentValue = function ()
{
var oDate = moment.unix(this.licenseExpired());
return oDate.format('LL') + ' (' + oDate.from(moment()) + ')';
};
};
/**
* @constructor
*/
@ -6650,7 +6644,7 @@ AbstractData.prototype.populateDataOnStart = function()
this.contactsIsAllowed(!!RL.settingsGet('ContactsIsAllowed'));
};
/**
* @constructor
* @extends AbstractData
@ -6684,7 +6678,7 @@ _.extend(AdminDataStorage.prototype, AbstractData.prototype);
AdminDataStorage.prototype.populateDataOnStart = function()
{
AbstractData.prototype.populateDataOnStart.call(this);
};
};
/**
* @constructor
*/
@ -6958,7 +6952,7 @@ AbstractAjaxRemoteStorage.prototype.jsVersion = function (fCallback, sVersion)
'Version': sVersion
});
};
/**
* @constructor
* @extends AbstractAjaxRemoteStorage
@ -7202,7 +7196,7 @@ AdminAjaxRemoteStorage.prototype.adminPing = function (fCallback)
{
this.defaultRequest(fCallback, 'AdminPing');
};
/**
* @constructor
*/
@ -7268,7 +7262,7 @@ AbstractCacheStorage.prototype.setEmailsPicsHashesData = function (oData)
{
this.oEmailsPicsHashes = oData;
};
/**
* @constructor
* @extends AbstractCacheStorage
@ -7279,7 +7273,7 @@ function AdminCacheStorage()
}
_.extend(AdminCacheStorage.prototype, AbstractCacheStorage.prototype);
/**
* @param {Array} aViewModels
* @constructor
@ -7457,7 +7451,7 @@ AbstractSettings.prototype.routes = function ()
['', oRules]
];
};
/**
* @constructor
* @extends KnoinAbstractScreen
@ -7472,7 +7466,7 @@ _.extend(AdminLoginScreen.prototype, KnoinAbstractScreen.prototype);
AdminLoginScreen.prototype.onShow = function ()
{
RL.setTitle('');
};
};
/**
* @constructor
* @extends AbstractSettings
@ -7492,7 +7486,7 @@ AdminSettingsScreen.prototype.onShow = function ()
// AbstractSettings.prototype.onShow.call(this);
RL.setTitle('');
};
};
/**
* @constructor
* @extends KnoinAbstractBoot
@ -7812,7 +7806,7 @@ AbstractApp.prototype.bootstart = function ()
ssm.ready();
};
/**
* @constructor
* @extends AbstractApp
@ -8051,7 +8045,7 @@ AdminApp.prototype.bootstart = function ()
* @type {AdminApp}
*/
RL = new AdminApp();
$html.addClass(Globals.bMobileDevice ? 'mobile' : 'no-mobile');
$window.keydown(Utils.killCtrlAandS).keyup(Utils.killCtrlAandS);
@ -8098,9 +8092,9 @@ window['__RLBOOT'] = function (fCall) {
window['__RLBOOT'] = null;
});
};
if (window.SimplePace) {
window.SimplePace.add(10);
}
}
}(window, jQuery, ko, crossroads, hasher, _));

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long