Do not count first group title as item
parent
27552f167d
commit
4ea6f95ba8
42
mail.js
42
mail.js
|
@ -829,6 +829,8 @@ var ListWithSelection = {
|
|||
sel[ns] = true;
|
||||
this.setState({ selected: sel });
|
||||
this.curSel = ns;
|
||||
if (this.onSelectCurrent)
|
||||
this.onSelectCurrent(ns);
|
||||
},
|
||||
selectOne: function(ns)
|
||||
{
|
||||
|
@ -837,6 +839,8 @@ var ListWithSelection = {
|
|||
this.setState({ selected: sel });
|
||||
this.lastSel = ns;
|
||||
this.curSel = ns;
|
||||
if (this.onSelectCurrent)
|
||||
this.onSelectCurrent(ns);
|
||||
},
|
||||
onListItemClick: function(ev)
|
||||
{
|
||||
|
@ -852,6 +856,8 @@ var ListWithSelection = {
|
|||
{
|
||||
this.state.selected[ns] = true;
|
||||
this.curSel = ns;
|
||||
if (this.onSelectCurrent)
|
||||
this.onSelectCurrent(ns);
|
||||
this.lastSel = this.lastSel === undefined ? ns : this.lastSel;
|
||||
this.setState({ selected: this.state.selected });
|
||||
}
|
||||
|
@ -995,16 +1001,11 @@ var ComposeWindow = React.createClass({
|
|||
|
||||
var MessageInList = React.createClass({
|
||||
msgClasses: [ 'unread', 'unseen', 'replied', 'pinned', 'sent', 'unloaded' ],
|
||||
onClick: function(ev)
|
||||
{
|
||||
Store.set('msg', this.props.msg);
|
||||
this.props.onClick(ev);
|
||||
},
|
||||
render: function()
|
||||
{
|
||||
var msg = this.props.msg;
|
||||
return <div data-i={this.props.i} className={'message'+(this.msgClasses.map(c => (msg[c] ? ' '+c : '')).join(''))+
|
||||
(this.props.selected ? ' selected' : '')+(msg.thread && Store.threads ? ' thread0' : '')} onMouseDown={this.onClick}>
|
||||
(this.props.selected ? ' selected' : '')+(msg.thread && Store.threads ? ' thread0' : '')} onMouseDown={this.props.onClick}>
|
||||
<div className="icon" style={{ width: (20+10*(msg.level||0)), backgroundPosition: (10*(msg.level||0))+'px 7px' }}></div>
|
||||
<div className="subject" style={{ paddingLeft: (20+10*(msg.level||0)) }}>{msg.subject}</div>
|
||||
{msg.thread && Store.threads ? <div className={'expand'+(msg.collapsed ? '' : ' collapse')}></div> : null}
|
||||
|
@ -1017,7 +1018,7 @@ var MessageInList = React.createClass({
|
|||
}
|
||||
});
|
||||
|
||||
// TODO: full keyboard navigation in message list, expand/collapse days, virtual scroll...
|
||||
// TODO: expand/collapse days, virtual scroll
|
||||
var MessageList = React.createClass({
|
||||
mixins: [ ListWithSelection ],
|
||||
getInitialState: function()
|
||||
|
@ -1031,10 +1032,24 @@ var MessageList = React.createClass({
|
|||
deleteSelected: function()
|
||||
{
|
||||
|
||||
},
|
||||
onSelectCurrent: function(index)
|
||||
{
|
||||
var total = 0, p;
|
||||
for (var i = 0; i < this.state.groups.length; i++)
|
||||
{
|
||||
p = total;
|
||||
total += (i > 0 ? 1 : 0)+this.state.groups[i].messages.length;
|
||||
if (index < total)
|
||||
{
|
||||
Store.set('msg', this.state.groups[i].messages[index-p-(i > 0 ? 1 : 0)]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
getTotalItems: function()
|
||||
{
|
||||
var total = 0;
|
||||
var total = -1; // do not count first-day as item
|
||||
for (var i = 0; i < this.state.groups.length; i++)
|
||||
{
|
||||
total += 1+this.state.groups[i].messages.length;
|
||||
|
@ -1057,16 +1072,16 @@ var MessageList = React.createClass({
|
|||
for (var i = 0; i < this.state.groups.length; i++)
|
||||
{
|
||||
p = n;
|
||||
n += 1+this.state.groups[i].messages.length;
|
||||
n += (i > 0 ? 1 : 0)+this.state.groups[i].messages.length;
|
||||
if (index < n)
|
||||
{
|
||||
if (index > p)
|
||||
top += 30 + (Store.layout == 'message-on-right' ? 60 : 30)*(index-p-1);
|
||||
top += (i > 0 ? 30 : 0) + (Store.layout == 'message-on-right' ? 60 : 30)*(index-p-1);
|
||||
break;
|
||||
}
|
||||
top += 30 + (Store.layout == 'message-on-right' ? 60 : 30)*this.state.groups[i].messages.length;
|
||||
top += (i > 0 ? 30 : 0) + (Store.layout == 'message-on-right' ? 60 : 30)*this.state.groups[i].messages.length;
|
||||
}
|
||||
return [ top, (Store.layout == 'message-on-right' && index != p ? 60 : 30) ];
|
||||
return [ top, (Store.layout == 'message-on-right' && (index == 0 || index != p) ? 60 : 30) ];
|
||||
},
|
||||
getScrollPaddingTop: function()
|
||||
{
|
||||
|
@ -1094,7 +1109,8 @@ var MessageList = React.createClass({
|
|||
<div ref="scroll" className="listview" tabIndex="1" onScroll={this.changeFirstDay} onKeyDown={this.onListKeyDown}>
|
||||
<div ref="title" className="day first-day" style={{ top: this.state.firstDayTop }}>{this.props.groups[0].name}</div>
|
||||
{this.props.groups.map(function(grp, i) {
|
||||
total++;
|
||||
if (i > 0)
|
||||
total++;
|
||||
var r = [
|
||||
i > 0 ? <div className="day" data-i={total-1}>{grp.name}</div> : null,
|
||||
<div className="day-list">
|
||||
|
|
Loading…
Reference in New Issue