mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Cleanup and improve HTML/CSS and it's JavaScript handling
This commit is contained in:
parent
6273869b32
commit
2e34f98c80
26 changed files with 516 additions and 598 deletions
|
|
@ -683,7 +683,7 @@ class AppUser extends AbstractApp {
|
||||||
right = elementById('rl-right'),
|
right = elementById('rl-right'),
|
||||||
fToggle = () =>
|
fToggle = () =>
|
||||||
setLayoutResizer(left, right, ClientSideKeyName.FolderListSize,
|
setLayoutResizer(left, right, ClientSideKeyName.FolderListSize,
|
||||||
(ThemeStore.isMobile() || leftPanelDisabled()) ? null : 'width');
|
(ThemeStore.isMobile() || leftPanelDisabled()) ? 0 : 'Width');
|
||||||
if (left && right) {
|
if (left && right) {
|
||||||
fToggle();
|
fToggle();
|
||||||
leftPanelDisabled.subscribe(fToggle);
|
leftPanelDisabled.subscribe(fToggle);
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ dropdownVisibility.subscribe(value => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
leftPanelDisabled.toggle = () => leftPanelDisabled(!leftPanelDisabled());
|
||||||
leftPanelDisabled.subscribe(value => {
|
leftPanelDisabled.subscribe(value => {
|
||||||
value && moveAction() && moveAction(false);
|
value && moveAction() && moveAction(false);
|
||||||
$htmlCL.toggle('rl-left-panel-disabled', value);
|
$htmlCL.toggle('rl-left-panel-disabled', value);
|
||||||
|
|
|
||||||
|
|
@ -407,15 +407,25 @@ setLayoutResizer = (source, target, sClientSideKeyName, mode) =>
|
||||||
target.removeAttribute('style');
|
target.removeAttribute('style');
|
||||||
source.removeAttribute('style');
|
source.removeAttribute('style');
|
||||||
}
|
}
|
||||||
|
// source.classList.toggle('resizable', mode);
|
||||||
if (mode) {
|
if (mode) {
|
||||||
source.classList.add('resizable');
|
const length = Local.get(sClientSideKeyName+mode);
|
||||||
if (!source.layoutResizer) {
|
if (!source.layoutResizer) {
|
||||||
const resizer = createElement('div', {'class':'resizer'}),
|
const resizer = createElement('div', {'class':'resizer'}),
|
||||||
size = {},
|
size = {},
|
||||||
|
store = () => {
|
||||||
|
if ('Width' == resizer.mode) {
|
||||||
|
target.style.left = source.offsetWidth + 'px';
|
||||||
|
Local.set(resizer.key+resizer.mode, source.offsetWidth);
|
||||||
|
} else {
|
||||||
|
target.style.top = (4 + source.offsetTop + source.offsetHeight) + 'px';
|
||||||
|
Local.set(resizer.key+resizer.mode, source.offsetHeight);
|
||||||
|
}
|
||||||
|
},
|
||||||
cssint = s => {
|
cssint = s => {
|
||||||
let value = getComputedStyle(source, null)[s].replace('px', '');
|
let value = getComputedStyle(source, null)[s].replace('px', '');
|
||||||
if (value.includes('%')) {
|
if (value.includes('%')) {
|
||||||
value = source.parentElement['width'==resizer.mode ? 'offsetWidth' : 'offsetHeight']
|
value = source.parentElement['offset'+resizer.mode]
|
||||||
* value.replace('%', '') / 100;
|
* value.replace('%', '') / 100;
|
||||||
}
|
}
|
||||||
return parseFloat(value);
|
return parseFloat(value);
|
||||||
|
|
@ -425,17 +435,20 @@ setLayoutResizer = (source, target, sClientSideKeyName, mode) =>
|
||||||
resizer.addEventListener('mousedown', {
|
resizer.addEventListener('mousedown', {
|
||||||
handleEvent: function(e) {
|
handleEvent: function(e) {
|
||||||
if ('mousedown' == e.type) {
|
if ('mousedown' == e.type) {
|
||||||
|
const lmode = resizer.mode.toLowerCase();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
size.pos = ('width' == resizer.mode) ? e.pageX : e.pageY;
|
size.pos = ('width' == lmode) ? e.pageX : e.pageY;
|
||||||
size.min = cssint('min-'+resizer.mode);
|
size.min = cssint('min-'+lmode);
|
||||||
size.max = cssint('max-'+resizer.mode);
|
size.max = cssint('max-'+lmode);
|
||||||
size.org = cssint(resizer.mode);
|
size.org = cssint(lmode);
|
||||||
addEventListener('mousemove', this);
|
addEventListener('mousemove', this);
|
||||||
addEventListener('mouseup', this);
|
addEventListener('mouseup', this);
|
||||||
} else if ('mousemove' == e.type) {
|
} else if ('mousemove' == e.type) {
|
||||||
const length = size.org + (('width' == resizer.mode ? e.pageX : e.pageY) - size.pos);
|
const lmode = resizer.mode.toLowerCase(),
|
||||||
|
length = size.org + (('width' == lmode ? e.pageX : e.pageY) - size.pos);
|
||||||
if (length >= size.min && length <= size.max ) {
|
if (length >= size.min && length <= size.max ) {
|
||||||
source.style[resizer.mode] = length + 'px';
|
source.style[lmode] = length + 'px';
|
||||||
|
source.observer || store();
|
||||||
}
|
}
|
||||||
} else if ('mouseup' == e.type) {
|
} else if ('mouseup' == e.type) {
|
||||||
removeEventListener('mousemove', this);
|
removeEventListener('mousemove', this);
|
||||||
|
|
@ -443,25 +456,16 @@ setLayoutResizer = (source, target, sClientSideKeyName, mode) =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
source.observer = new ResizeObserver(() => {
|
source.observer = window.ResizeObserver ? new ResizeObserver(store) : null;
|
||||||
if ('width' == resizer.mode) {
|
|
||||||
target.style.left = source.offsetWidth + 'px';
|
|
||||||
Local.set(sClientSideKeyName, source.offsetWidth);
|
|
||||||
} else {
|
|
||||||
target.style.top = (4 + source.offsetTop + source.offsetHeight) + 'px';
|
|
||||||
Local.set(sClientSideKeyName, source.offsetHeight);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
source.layoutResizer.mode = mode;
|
source.layoutResizer.mode = mode;
|
||||||
source.observer.observe(source, { box: 'border-box' });
|
source.layoutResizer.key = sClientSideKeyName;
|
||||||
const length = Local.get(sClientSideKeyName);
|
source.observer && source.observer.observe(source, { box: 'border-box' });
|
||||||
if (length) {
|
if (length) {
|
||||||
source.style[mode] = length + 'px';
|
source.style[mode] = length + 'px';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
source.observer && source.observer.disconnect();
|
source.observer && source.observer.disconnect();
|
||||||
source.classList.remove('resizable');
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,8 +110,8 @@ export class MailBoxUserScreen extends AbstractScreen {
|
||||||
let layout = SettingsUserStore.layout();
|
let layout = SettingsUserStore.layout();
|
||||||
setLayoutResizer(top, bottom, ClientSideKeyName.MessageListSize,
|
setLayoutResizer(top, bottom, ClientSideKeyName.MessageListSize,
|
||||||
(ThemeStore.isMobile() || Layout.NoPreview === layout)
|
(ThemeStore.isMobile() || Layout.NoPreview === layout)
|
||||||
? null
|
? 0
|
||||||
: (Layout.SidePreview === layout ? 'width' : 'height')
|
: (Layout.SidePreview === layout ? 'Width' : 'Height')
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
if (top && bottom) {
|
if (top && bottom) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { Scope } from 'Common/Enums';
|
import { Scope } from 'Common/Enums';
|
||||||
import { keyScope, leftPanelDisabled, SettingsGet } from 'Common/Globals';
|
import { doc, keyScope, leftPanelDisabled, SettingsGet } from 'Common/Globals';
|
||||||
import { addObservablesTo } from 'Common/Utils';
|
import { addObservablesTo } from 'Common/Utils';
|
||||||
import { ThemeStore } from 'Stores/Theme';
|
import { ThemeStore } from 'Stores/Theme';
|
||||||
|
|
||||||
|
|
@ -24,4 +24,8 @@ AppUserStore.focusedState.subscribe(value => {
|
||||||
ThemeStore.isMobile() && leftPanelDisabled(Scope.FolderList !== value);
|
ThemeStore.isMobile() && leftPanelDisabled(Scope.FolderList !== value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
['FolderList','MessageList','MessageView'].forEach(name => {
|
||||||
|
let dom = doc.querySelector('.RL-Mail'+name);
|
||||||
|
dom && dom.classList.toggle('focused', name === value);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,9 @@ export const MessageUserStore = new class {
|
||||||
if (message && folder && folder !== message.folder) {
|
if (message && folder && folder !== message.folder) {
|
||||||
this.message(null);
|
this.message(null);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
|
isMessageSelected: value => elementById('rl-right').classList.toggle('message-selected', value)
|
||||||
});
|
});
|
||||||
|
|
||||||
this.purgeMessageBodyCache = this.purgeMessageBodyCache.throttle(30000);
|
this.purgeMessageBodyCache = this.purgeMessageBodyCache.throttle(30000);
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,15 @@
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#rl-left {
|
||||||
|
width: @rlLeftWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rl-right {
|
||||||
|
z-index: 1;
|
||||||
|
left: @rlLeftWidth;
|
||||||
|
}
|
||||||
|
|
||||||
html.rl-mobile {
|
html.rl-mobile {
|
||||||
|
|
||||||
&:not(.rl-left-panel-disabled) #rl-right {
|
&:not(.rl-left-panel-disabled) #rl-right {
|
||||||
|
|
@ -28,10 +37,6 @@ html.rl-mobile {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#rl-left {
|
|
||||||
width: @rlLeftWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
.resizable::after {
|
.resizable::after {
|
||||||
background-color: #aaa;
|
background-color: #aaa;
|
||||||
|
|
@ -50,7 +55,7 @@ html.rl-mobile {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.resizable > .resizer {
|
.resizer {
|
||||||
background: #aaa;
|
background: #aaa;
|
||||||
background: rgba(255,255,255,0.5);
|
background: rgba(255,255,255,0.5);
|
||||||
display: none;
|
display: none;
|
||||||
|
|
@ -58,11 +63,11 @@ html.rl-mobile {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 102;
|
z-index: 102;
|
||||||
}
|
}
|
||||||
.resizable > .resizer:hover {
|
.resizer:hover {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
html:not(.rl-left-panel-disabled) #rl-left.resizable {
|
html:not(.rl-left-panel-disabled) #rl-left {
|
||||||
resize: horizontal;
|
resize: horizontal;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
min-width: 155px;
|
min-width: 155px;
|
||||||
|
|
@ -78,6 +83,99 @@ html:not(.rl-left-panel-disabled) #rl-left.resizable {
|
||||||
width: 5px;
|
width: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.rl-side-preview-pane .RL-MailMessageList {
|
||||||
|
resize: horizontal;
|
||||||
|
min-width: 320px;
|
||||||
|
max-width: 60%;
|
||||||
|
}
|
||||||
|
.rl-bottom-preview-pane .RL-MailMessageList {
|
||||||
|
resize: vertical;
|
||||||
|
min-height: 200px;
|
||||||
|
max-height: 60%;
|
||||||
|
}
|
||||||
|
.rl-bottom-preview-pane .RL-MailMessageList > .resizer {
|
||||||
|
cursor: ns-resize;
|
||||||
|
height: 5px;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
html:not(.rl-left-panel-disabled) #rl-left > .resizer,
|
||||||
|
.RL-MailMessageList > .resizer {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.RL-MailMessageList {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: @rlBottomMargin;
|
||||||
|
left: 0;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.RL-MailMessageView {
|
||||||
|
position: absolute;
|
||||||
|
top: 50px + @rlLowMargin;
|
||||||
|
bottom: 13px;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
|
||||||
|
.b-message-view-backdrop {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background: rgba(0, 0, 0, .4);
|
||||||
|
z-index: 10;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.backdrop-message {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
color: white;
|
||||||
|
font-size: 20px;
|
||||||
|
line-height: 30px;
|
||||||
|
background: rgba(0, 0, 0, .6);
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-shadow: 0 1px 1px #000;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
html.rl-side-preview-pane {
|
||||||
|
.RL-MailMessageView {
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#rl-popups > dialog {
|
||||||
|
top: 0;
|
||||||
|
margin: 10px auto;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
#rl-popups > .rl-view-model {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 1100;
|
||||||
|
overflow: auto;
|
||||||
|
background-color: rgba(0,0,0,0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
#rl-settings-subscreen {
|
||||||
|
padding:20px;
|
||||||
|
}
|
||||||
|
|
||||||
.dropdown-menu {
|
.dropdown-menu {
|
||||||
max-height: 60vh;
|
max-height: 60vh;
|
||||||
max-width: 90vw;
|
max-width: 90vw;
|
||||||
|
|
@ -107,98 +205,6 @@ html:not(.rl-left-panel-disabled) #rl-left.resizable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.rl-side-preview-pane .RL-MailMessageList.resizable {
|
|
||||||
resize: horizontal;
|
|
||||||
min-width: 320px;
|
|
||||||
max-width: 60%;
|
|
||||||
}
|
|
||||||
.rl-bottom-preview-pane .RL-MailMessageList.resizable {
|
|
||||||
resize: vertical;
|
|
||||||
min-height: 200px;
|
|
||||||
max-height: 60%;
|
|
||||||
}
|
|
||||||
.rl-bottom-preview-pane .RL-MailMessageList > .resizer {
|
|
||||||
cursor: ns-resize;
|
|
||||||
height: 5px;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
html:not(.rl-left-panel-disabled) #rl-left.resizable > .resizer,
|
|
||||||
.RL-MailMessageList > .resizer {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
#rl-right {
|
|
||||||
z-index: 1;
|
|
||||||
left: @rlLeftWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RL-MailMessageList {
|
|
||||||
position: absolute;
|
|
||||||
top: 50px;
|
|
||||||
bottom: @rlBottomMargin;
|
|
||||||
left: 0;
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RL-MailMessageView {
|
|
||||||
position: absolute;
|
|
||||||
top: 50px + @rlLowMargin;
|
|
||||||
bottom: 13px;
|
|
||||||
right: 0;
|
|
||||||
left: 50%;
|
|
||||||
|
|
||||||
.b-message-view-backdrop {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
background: rgba(0, 0, 0, .4);
|
|
||||||
z-index: 10;
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
.backdrop-message {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
color: white;
|
|
||||||
font-size: 20px;
|
|
||||||
line-height: 30px;
|
|
||||||
background: rgba(0, 0, 0, .6);
|
|
||||||
padding: 15px;
|
|
||||||
border-radius: 5px;
|
|
||||||
text-shadow: 0 1px 1px #000;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
top: 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
#rl-popups > dialog {
|
|
||||||
top: 0;
|
|
||||||
margin: 10px auto;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#rl-popups > .rl-view-model {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
z-index: 1100;
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(0,0,0,0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
#rl-settings-subscreen {
|
|
||||||
padding:20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropdown-menu * + .dividerbar {
|
.dropdown-menu * + .dividerbar {
|
||||||
margin-top: 9px;
|
margin-top: 9px;
|
||||||
padding-top: 9px;
|
padding-top: 9px;
|
||||||
|
|
@ -254,8 +260,10 @@ html:not(.rl-left-panel-disabled) #rl-left.resizable > .resizer,
|
||||||
width: 40%;
|
width: 40%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.RL-MailMessageView {
|
html.rl-side-preview-pane {
|
||||||
left: 40%;
|
.RL-MailMessageView {
|
||||||
|
left: 40%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -307,7 +315,6 @@ html.rl-left-panel-disabled {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
html.rl-mobile,
|
|
||||||
html.rl-no-preview-pane {
|
html.rl-no-preview-pane {
|
||||||
|
|
||||||
.RL-MailMessageList {
|
.RL-MailMessageList {
|
||||||
|
|
@ -315,28 +322,24 @@ html.rl-no-preview-pane {
|
||||||
width: inherit;
|
width: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
.RL-MailMessageView {
|
|
||||||
left: 0 !important;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
html.rl-mobile #rl-left > .resizer,
|
html.rl-mobile #rl-left > .resizer,
|
||||||
html.rl-no-preview-pane #rl-right .resizer,
|
html.rl-no-preview-pane #rl-right .resizer {
|
||||||
html.rl-mobile #rl-right .resizer {
|
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
html.rl-bottom-preview-pane:not(.rl-mobile) {
|
html.rl-bottom-preview-pane {
|
||||||
|
|
||||||
.RL-MailMessageList {
|
.RL-MailMessageList {
|
||||||
right: @rlBottomMargin !important;
|
|
||||||
bottom: inherit;
|
bottom: inherit;
|
||||||
width: inherit;
|
width: inherit;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.RL-MailMessageView {
|
.RL-MailMessageView {
|
||||||
left: 0 !important;
|
left: 0;
|
||||||
top: 356px;
|
top: 356px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,40 +1,34 @@
|
||||||
|
|
||||||
html.rl-mobile,
|
html.rl-mobile,
|
||||||
html.rl-no-preview-pane {
|
html.rl-no-preview-pane {
|
||||||
.messageList.message-selected {
|
.message-selected .RL-MailMessageList {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.RL-MailMessageList.focused .messageList {
|
||||||
|
border-color: #9d9d9d;
|
||||||
|
}
|
||||||
|
|
||||||
#sort-list-dropdown-id {
|
#sort-list-dropdown-id {
|
||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
padding-right: 6px;
|
padding-right: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.RL-MailMessageList .btn-toolbar {
|
||||||
|
height: 30px;
|
||||||
|
padding: 10px 1px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
.messageList {
|
.messageList {
|
||||||
height: 100%;
|
height: calc(100% - 50px);
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border: 1px solid @rlMainDarkColor;
|
border: 1px solid @rlMainDarkColor;
|
||||||
border-radius: @rlMainBorderRadius;
|
border-radius: @rlMainBorderRadius;
|
||||||
box-shadow: @rlMainShadow;
|
box-shadow: @rlMainShadow;
|
||||||
z-index: 101;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
.toolbar {
|
|
||||||
position: absolute;
|
|
||||||
top: -50px;
|
|
||||||
right: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 30px;
|
|
||||||
padding: 10px 1px;
|
|
||||||
z-index: 102;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.b-message-list-wrapper {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.b-footer {
|
.b-footer {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|
@ -163,10 +157,6 @@ html.rl-no-preview-pane {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.focused {
|
|
||||||
border-color: #9d9d9d;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.hideMessageListCheckbox {
|
.hideMessageListCheckbox {
|
||||||
|
|
@ -414,7 +404,7 @@ html.rl-ctrl-key-pressed .messageListItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.b-message-list-wrapper:not(.hideMessageListCheckbox) .subjectParent {
|
.messageList:not(.hideMessageListCheckbox) .subjectParent {
|
||||||
margin-left: 30px;
|
margin-left: 30px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,13 @@
|
||||||
.g-ui-min-height-300 {
|
|
||||||
min-height: 300px;
|
html.rl-no-preview-pane {
|
||||||
|
#rl-right:not(.message-selected) .RL-MailMessageView {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.RL-MailMessageView.focused .messageView {
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
|
||||||
|
border-color: darken(@rlMainDarkColor, 5%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.messageView {
|
.messageView {
|
||||||
|
|
@ -204,7 +212,7 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
color: grey;
|
color: grey;
|
||||||
padding-top: 50px;
|
padding: 50px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.showImages, .readReceipt, .pgpSigned, .pgpEncrypted {
|
.showImages, .readReceipt, .pgpSigned, .pgpEncrypted {
|
||||||
|
|
@ -446,11 +454,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.focused {
|
|
||||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
|
|
||||||
border-color: darken(@rlMainDarkColor, 5%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.thread-controls {
|
.thread-controls {
|
||||||
.dropdown-toggle {
|
.dropdown-toggle {
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
|
|
@ -463,13 +466,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
html.rl-mobile .messageView,
|
|
||||||
html.rl-no-preview-pane .messageView {
|
html.rl-no-preview-pane .messageView {
|
||||||
|
|
||||||
&:not(.message-selected) {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toolbar {
|
.toolbar {
|
||||||
padding-left: 1px;
|
padding-left: 1px;
|
||||||
}
|
}
|
||||||
|
|
@ -490,7 +488,7 @@ html:not(.rl-mobile):not(.rl-no-preview-pane) .messageView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
html.rl-bottom-preview-pane:not(.rl-mobile) .messageView {
|
html.rl-bottom-preview-pane .messageView {
|
||||||
.b-content {
|
.b-content {
|
||||||
bottom: @rlBottomMargin;
|
bottom: @rlBottomMargin;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,14 @@
|
||||||
top: 40px;
|
top: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.b-system-drop-down {
|
.RL-SystemDropDown {
|
||||||
|
|
||||||
.b-toolbar {
|
position: absolute;
|
||||||
position: absolute;
|
top: 0;
|
||||||
top: 0;
|
right: 0;
|
||||||
right: 0;
|
height: 30px;
|
||||||
height: 30px;
|
padding: 10px @rlLowMargin;
|
||||||
padding: 10px @rlLowMargin;
|
z-index: 103;
|
||||||
z-index: 103;
|
|
||||||
}
|
|
||||||
|
|
||||||
.email-title {
|
.email-title {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,6 @@ class PaneSettingsAdminView extends AbstractViewRight {
|
||||||
.computed(() => PackageAdminStore.loading() ? 'visible' : 'hidden');
|
.computed(() => PackageAdminStore.loading() ? 'visible' : 'hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleLeft(item, event) {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
leftPanelDisabled(!leftPanelDisabled());
|
|
||||||
}
|
|
||||||
|
|
||||||
logoutClick() {
|
logoutClick() {
|
||||||
Remote.adminLogout(() => rl.logoutReload());
|
Remote.adminLogout(() => rl.logoutReload());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import { AppUserStore } from 'Stores/User/App';
|
||||||
import { SettingsUserStore } from 'Stores/User/Settings';
|
import { SettingsUserStore } from 'Stores/User/Settings';
|
||||||
import { FolderUserStore } from 'Stores/User/Folder';
|
import { FolderUserStore } from 'Stores/User/Folder';
|
||||||
import { MessageUserStore } from 'Stores/User/Message';
|
import { MessageUserStore } from 'Stores/User/Message';
|
||||||
import { ThemeStore } from 'Stores/Theme';
|
|
||||||
|
|
||||||
import { showScreenPopup } from 'Knoin/Knoin';
|
import { showScreenPopup } from 'Knoin/Knoin';
|
||||||
import { AbstractViewLeft } from 'Knoin/AbstractViews';
|
import { AbstractViewLeft } from 'Knoin/AbstractViews';
|
||||||
|
|
@ -40,8 +39,6 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
this.allowContacts = AppUserStore.allowContacts();
|
this.allowContacts = AppUserStore.allowContacts();
|
||||||
|
|
||||||
addComputablesTo(this, {
|
addComputablesTo(this, {
|
||||||
folderListFocused: () => Scope.FolderList === AppUserStore.focusedState(),
|
|
||||||
|
|
||||||
folderListVisible: () => {
|
folderListVisible: () => {
|
||||||
let multiple = false,
|
let multiple = false,
|
||||||
inbox, visible,
|
inbox, visible,
|
||||||
|
|
@ -85,7 +82,6 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
|
|
||||||
el = eqs(event, 'a');
|
el = eqs(event, 'a');
|
||||||
if (el && el.matches('.selectable')) {
|
if (el && el.matches('.selectable')) {
|
||||||
ThemeStore.isMobile() && leftPanelDisabled(true);
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const folder = ko.dataFor(el);
|
const folder = ko.dataFor(el);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
|
|
@ -120,7 +116,7 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
|
|
||||||
shortcuts.add('arrowup,arrowdown', '', Scope.FolderList, event => {
|
shortcuts.add('arrowup,arrowdown', '', Scope.FolderList, event => {
|
||||||
let items = [], index = 0;
|
let items = [], index = 0;
|
||||||
dom.querySelectorAll('.b-folders li a:not(.hidden)').forEach(node => {
|
dom.querySelectorAll('li a:not(.hidden)').forEach(node => {
|
||||||
if (node.offsetHeight || node.getClientRects().length) {
|
if (node.offsetHeight || node.getClientRects().length) {
|
||||||
items.push(node);
|
items.push(node);
|
||||||
if (node.matches('.focused')) {
|
if (node.matches('.focused')) {
|
||||||
|
|
@ -143,7 +139,7 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
});
|
});
|
||||||
|
|
||||||
shortcuts.add('enter,open', '', Scope.FolderList, () => {
|
shortcuts.add('enter,open', '', Scope.FolderList, () => {
|
||||||
const item = qs('.b-folders li a:not(.hidden).focused');
|
const item = qs('li a:not(.hidden).focused');
|
||||||
if (item) {
|
if (item) {
|
||||||
AppUserStore.focusedState(Scope.MessageList);
|
AppUserStore.focusedState(Scope.MessageList);
|
||||||
item.click();
|
item.click();
|
||||||
|
|
@ -153,7 +149,7 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
});
|
});
|
||||||
|
|
||||||
shortcuts.add('space', '', Scope.FolderList, () => {
|
shortcuts.add('space', '', Scope.FolderList, () => {
|
||||||
const item = qs('.b-folders li a:not(.hidden).focused'),
|
const item = qs('li a:not(.hidden).focused'),
|
||||||
folder = item && ko.dataFor(item);
|
folder = item && ko.dataFor(item);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
const collapsed = folder.collapsed();
|
const collapsed = folder.collapsed();
|
||||||
|
|
@ -172,10 +168,10 @@ export class MailFolderList extends AbstractViewLeft {
|
||||||
});
|
});
|
||||||
|
|
||||||
AppUserStore.focusedState.subscribe(value => {
|
AppUserStore.focusedState.subscribe(value => {
|
||||||
let el = qs('.b-folders li a.focused');
|
let el = qs('li a.focused');
|
||||||
el && el.classList.remove('focused');
|
el && el.classList.remove('focused');
|
||||||
if (Scope.FolderList === value) {
|
if (Scope.FolderList === value) {
|
||||||
el = qs('.b-folders li a.selected');
|
el = qs('li a.selected');
|
||||||
el && el.classList.add('focused');
|
el && el.classList.add('focused');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -69,9 +69,10 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
);
|
);
|
||||||
|
|
||||||
this.composeInEdit = AppUserStore.composeInEdit;
|
this.composeInEdit = AppUserStore.composeInEdit;
|
||||||
|
|
||||||
|
this.isMobile = ThemeStore.isMobile;
|
||||||
this.leftPanelDisabled = leftPanelDisabled;
|
this.leftPanelDisabled = leftPanelDisabled;
|
||||||
|
|
||||||
this.isMessageSelected = MessageUserStore.isMessageSelected;
|
|
||||||
this.messageListSearch = MessageUserStore.listSearch;
|
this.messageListSearch = MessageUserStore.listSearch;
|
||||||
this.messageListError = MessageUserStore.listError;
|
this.messageListError = MessageUserStore.listError;
|
||||||
|
|
||||||
|
|
@ -167,8 +168,6 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessageUserStore.listChecked().length : true,
|
mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessageUserStore.listChecked().length : true,
|
||||||
|
|
||||||
messageListFocused: () => Scope.MessageList === AppUserStore.focusedState(),
|
|
||||||
|
|
||||||
sortText: () => {
|
sortText: () => {
|
||||||
let mode = FolderUserStore.sortMode(),
|
let mode = FolderUserStore.sortMode(),
|
||||||
desc = '' === mode || mode.includes('REVERSE');
|
desc = '' === mode || mode.includes('REVERSE');
|
||||||
|
|
@ -338,20 +337,6 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hideLeft(item, event) {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
|
|
||||||
leftPanelDisabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
showLeft(item, event) {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
|
|
||||||
leftPanelDisabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
composeClick() {
|
composeClick() {
|
||||||
showMessageComposer();
|
showMessageComposer();
|
||||||
}
|
}
|
||||||
|
|
@ -683,14 +668,14 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
}
|
}
|
||||||
|
|
||||||
onBuild(dom) {
|
onBuild(dom) {
|
||||||
const eqs = (ev, s) => ev.target.closestWithin('.messageList '+s, dom);
|
const eqs = (ev, s) => ev.target.closestWithin(s, dom);
|
||||||
|
|
||||||
this.selector.init(dom.querySelector('.b-content'), Scope.MessageList);
|
this.selector.init(dom.querySelector('.b-content'), Scope.MessageList);
|
||||||
|
|
||||||
dom.addEventListener('click', event => {
|
dom.addEventListener('click', event => {
|
||||||
ThemeStore.isMobile() && leftPanelDisabled(true);
|
ThemeStore.isMobile() && !eqs(event, '.toggleLeft') && leftPanelDisabled(true);
|
||||||
|
|
||||||
if (eqs(event, '.b-message-list-wrapper') && Scope.MessageView === AppUserStore.focusedState()) {
|
if (eqs(event, '.messageList') && Scope.MessageView === AppUserStore.focusedState()) {
|
||||||
AppUserStore.focusedState(Scope.MessageList);
|
AppUserStore.focusedState(Scope.MessageList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,6 @@ export class MailMessageView extends AbstractViewRight {
|
||||||
this.hasCheckedMessages = MessageUserStore.hasCheckedMessages;
|
this.hasCheckedMessages = MessageUserStore.hasCheckedMessages;
|
||||||
this.messageLoadingThrottle = MessageUserStore.messageLoading;
|
this.messageLoadingThrottle = MessageUserStore.messageLoading;
|
||||||
this.messagesBodiesDom = MessageUserStore.messagesBodiesDom;
|
this.messagesBodiesDom = MessageUserStore.messagesBodiesDom;
|
||||||
this.isMessageSelected = MessageUserStore.isMessageSelected;
|
|
||||||
this.messageActiveDom = MessageUserStore.messageActiveDom;
|
this.messageActiveDom = MessageUserStore.messageActiveDom;
|
||||||
this.messageError = MessageUserStore.messageError;
|
this.messageError = MessageUserStore.messageError;
|
||||||
|
|
||||||
|
|
@ -177,8 +176,6 @@ export class MailMessageView extends AbstractViewRight {
|
||||||
return '';
|
return '';
|
||||||
},
|
},
|
||||||
|
|
||||||
messageFocused: () => Scope.MessageView === AppUserStore.focusedState(),
|
|
||||||
|
|
||||||
messageListAndMessageViewLoading:
|
messageListAndMessageViewLoading:
|
||||||
() => MessageUserStore.listCompleteLoading() || MessageUserStore.messageLoading()
|
() => MessageUserStore.listCompleteLoading() || MessageUserStore.messageLoading()
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,6 @@ import { getFolderInboxName } from 'Common/Cache';
|
||||||
|
|
||||||
import { AbstractViewLeft } from 'Knoin/AbstractViews';
|
import { AbstractViewLeft } from 'Knoin/AbstractViews';
|
||||||
|
|
||||||
import { ThemeStore } from 'Stores/Theme';
|
|
||||||
|
|
||||||
export class MenuSettingsUserView extends AbstractViewLeft {
|
export class MenuSettingsUserView extends AbstractViewLeft {
|
||||||
/**
|
/**
|
||||||
* @param {Object} screen
|
* @param {Object} screen
|
||||||
|
|
@ -18,14 +16,6 @@ export class MenuSettingsUserView extends AbstractViewLeft {
|
||||||
this.menu = screen.menu;
|
this.menu = screen.menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
onBuild(dom) {
|
|
||||||
dom.addEventListener('click', event =>
|
|
||||||
ThemeStore.isMobile()
|
|
||||||
&& event.target.closestWithin('.b-settins-left nav a', dom)
|
|
||||||
&& leftPanelDisabled(true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
link(route) {
|
link(route) {
|
||||||
return settings(route);
|
return settings(route);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ export class PaneSettingsUserView extends AbstractViewRight {
|
||||||
constructor() {
|
constructor() {
|
||||||
super('SettingsPane');
|
super('SettingsPane');
|
||||||
|
|
||||||
|
this.isMobile = ThemeStore.isMobile;
|
||||||
this.leftPanelDisabled = leftPanelDisabled;
|
this.leftPanelDisabled = leftPanelDisabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -18,22 +19,10 @@ export class PaneSettingsUserView extends AbstractViewRight {
|
||||||
MessageUserStore.message(null);
|
MessageUserStore.message(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
hideLeft(item, event) {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
|
|
||||||
leftPanelDisabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
showLeft(item, event) {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
|
|
||||||
leftPanelDisabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
onBuild(dom) {
|
onBuild(dom) {
|
||||||
dom.addEventListener('click', () => ThemeStore.isMobile() && leftPanelDisabled(true));
|
dom.addEventListener('click', () =>
|
||||||
|
ThemeStore.isMobile() && !event.target.closestWithin('.toggleLeft', dom) && leftPanelDisabled(true)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
backToMailBoxClick() {
|
backToMailBoxClick() {
|
||||||
|
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
(w=>{
|
|
||||||
|
|
||||||
// Edge Legacy (pre chromium/webkit), Firefox < 69, Safari < 13.4
|
|
||||||
w.ResizeObserver || (w.ResizeObserver = class {
|
|
||||||
constructor(callback) {
|
|
||||||
this.observer = new MutationObserver(callback.debounce(250));
|
|
||||||
}
|
|
||||||
|
|
||||||
disconnect() {
|
|
||||||
this.observer.disconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
observe(target) {
|
|
||||||
this.observer.observe(target, { attributes: true, subtree: true, attributeFilter: ['style'] });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
})(this);
|
|
||||||
|
|
@ -19,23 +19,21 @@
|
||||||
{{BaseAppFaviconTouchLinkTag}}
|
{{BaseAppFaviconTouchLinkTag}}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body id="rl-app" data-admin='{{BaseAppAdmin}}'>
|
||||||
<div id="rl-app" data-admin='{{BaseAppAdmin}}'>
|
<div id="rl-loading">
|
||||||
<div id="rl-loading">
|
<div id="rl-loading-desc">{{LoadingDescriptionEsc}}</div>
|
||||||
<div id="rl-loading-desc">{{LoadingDescriptionEsc}}</div>
|
<div class="e-spinner">
|
||||||
<div class="e-spinner">
|
<div></div>
|
||||||
<div></div>
|
<div></div>
|
||||||
<div></div>
|
<div></div>
|
||||||
<div></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="rl-loading-error" hidden="">An error occurred.<br>Please refresh the page and try again.</div>
|
|
||||||
<div id="rl-content" hidden="">
|
|
||||||
<div id="rl-popups"></div>
|
|
||||||
<div id="rl-left"></div>
|
|
||||||
<div id="rl-right"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="rl-loading-error" hidden="">An error occurred.<br>Please refresh the page and try again.</div>
|
||||||
|
<div id="rl-content" hidden="">
|
||||||
|
<div id="rl-left"></div>
|
||||||
|
<div id="rl-right"></div>
|
||||||
|
</div>
|
||||||
|
<div id="rl-popups"></div>
|
||||||
{{BaseTemplates}}
|
{{BaseTemplates}}
|
||||||
<script nonce="" type="text/javascript">{{BaseAppBootScript}}{{BaseLanguage}}</script>
|
<script nonce="" type="text/javascript">{{BaseAppBootScript}}{{BaseLanguage}}</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="b-settings b-admin-right">
|
<div class="b-settings b-admin-right">
|
||||||
<div class="b-toolbar g-ui-user-select-none">
|
<div class="b-toolbar g-ui-user-select-none">
|
||||||
<a class="btn btn-thin-2 fontastic toggleLeft" data-bind="click: toggleLeft, text: leftPanelDisabled() ? '❯' : '❮'">❮</a>
|
<a class="btn btn-thin-2 fontastic toggleLeft" data-bind="click: leftPanelDisabled.toggle, text: leftPanelDisabled() ? '❯' : '❮'">❮</a>
|
||||||
<i class="icon-spinner" style="margin: 10px" data-bind="style: {'visibility': adminManLoadingVisibility }"></i>
|
<i class="icon-spinner" style="margin: 10px" data-bind="style: {'visibility': adminManLoadingVisibility }"></i>
|
||||||
<h4>SnappyMail - <span data-i18n="TOP_PANEL/LABEL_ADMIN_PANEL"></span></h4>
|
<h4>SnappyMail - <span data-i18n="TOP_PANEL/LABEL_ADMIN_PANEL"></span></h4>
|
||||||
<a class="btn btn-logout fontastic" data-bind="click: logoutClick">⏻</a>
|
<a class="btn btn-logout fontastic" data-bind="click: logoutClick">⏻</a>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="b-folders g-ui-user-select-none" data-bind="css: {'focused': folderListFocused, 'single-root-inbox': foldersListWithSingleInboxRootFolder}">
|
<div class="b-folders g-ui-user-select-none" data-bind="css: {'single-root-inbox': foldersListWithSingleInboxRootFolder}">
|
||||||
<div class="b-toolbar btn-toolbar hide-mobile">
|
<div class="b-toolbar btn-toolbar hide-mobile">
|
||||||
<a class="btn buttonCompose" data-bind="click: composeClick, css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}" data-i18n="[title]FOLDER_LIST/BUTTON_NEW_MESSAGE">
|
<a class="btn buttonCompose" data-bind="click: composeClick, css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}" data-i18n="[title]FOLDER_LIST/BUTTON_NEW_MESSAGE">
|
||||||
<i class="icon-paper-plane"></i>
|
<i class="icon-paper-plane"></i>
|
||||||
|
|
@ -12,10 +12,10 @@
|
||||||
<ul class="b-folders-user" data-bind="template: { name: 'MailFolderListItem', foreach: folderListVisible }"></ul>
|
<ul class="b-folders-user" data-bind="template: { name: 'MailFolderListItem', foreach: folderListVisible }"></ul>
|
||||||
<div class="move-action-content-wrapper" data-bind="visible: moveAction"></div>
|
<div class="move-action-content-wrapper" data-bind="visible: moveAction"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="b-content show-on-panel-disabled" data-bind="click: function () { leftPanelDisabled(false); }"></div>
|
<div class="b-content show-on-panel-disabled" data-bind="click: leftPanelDisabled.toggle()"></div>
|
||||||
<div class="b-footer btn-toolbar hide-mobile">
|
<div class="b-footer btn-toolbar hide-mobile">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<a class="btn buttonResize" data-bind="click: function () { leftPanelDisabled(!leftPanelDisabled()); }">
|
<a class="btn buttonResize" data-bind="click: leftPanelDisabled.toggle()">
|
||||||
<i data-bind="css: {'icon-resize-out': leftPanelDisabled(), 'icon-resize-in': !leftPanelDisabled()}"></i>
|
<i data-bind="css: {'icon-resize-out': leftPanelDisabled(), 'icon-resize-in': !leftPanelDisabled()}"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,237 +1,234 @@
|
||||||
<div class="messageList g-ui-user-select-none"
|
<div class="btn-toolbar">
|
||||||
data-bind="css: {'message-selected': isMessageSelected, 'focused': messageListFocused() }">
|
<!-- ko if: isMobile() -->
|
||||||
<div class="toolbar">
|
<a class="btn btn-thin-2 fontastic toggleLeft" data-bind="click: leftPanelDisabled.toggle, text: leftPanelDisabled() ? '❯' : '❮'">❮</a>
|
||||||
<div class="btn-toolbar">
|
<a class="btn buttonCompose" data-bind="click: composeClick, css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}, visible: mobileCheckedStateHide()" data-i18n="[title]FOLDER_LIST/BUTTON_NEW_MESSAGE">
|
||||||
<a class="btn btn-thin-2 fontastic show-mobile" data-bind="click: hideLeft, visible: !leftPanelDisabled()">❮</a>
|
<i class="icon-paper-plane"></i>
|
||||||
<a class="btn btn-thin-2 fontastic show-mobile" data-bind="click: showLeft, visible: leftPanelDisabled()">❯</a>
|
</a>
|
||||||
<a class="btn buttonCompose show-mobile" data-bind="click: composeClick, css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}, visible: mobileCheckedStateHide()" data-i18n="[title]FOLDER_LIST/BUTTON_NEW_MESSAGE">
|
<!-- /ko -->
|
||||||
<i class="icon-paper-plane"></i>
|
<a class="btn" data-bind="command: reloadCommand, visible: mobileCheckedStateHide()" data-i18n="[title]MESSAGE_LIST/BUTTON_RELOAD">
|
||||||
</a>
|
<i class="icon-spinner not-animated"></i>
|
||||||
<a class="btn" data-bind="command: reloadCommand, visible: mobileCheckedStateHide()" data-i18n="[title]MESSAGE_LIST/BUTTON_RELOAD">
|
</a>
|
||||||
<i class="icon-spinner not-animated"></i>
|
<!-- ko if: !newMoveToFolder -->
|
||||||
</a>
|
<div class="btn-group dropdown colored-toggle hide-mobile" data-bind="registerBootstrapDropdown: true, openDropdownTrigger: moveDropdownTrigger">
|
||||||
<!-- ko if: !newMoveToFolder -->
|
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn dropdown-toggle buttonMove" data-bind="command: moveCommand" data-i18n="[title]GLOBAL/MOVE_TO">
|
||||||
<div class="btn-group dropdown colored-toggle hide-mobile" data-bind="registerBootstrapDropdown: true, openDropdownTrigger: moveDropdownTrigger">
|
<i class="icon-copy visible-on-ctrl-btn"></i>
|
||||||
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn dropdown-toggle buttonMove" data-bind="command: moveCommand" data-i18n="[title]GLOBAL/MOVE_TO">
|
<i class="fontastic hidden-on-ctrl-btn">📁</i>
|
||||||
<i class="icon-copy visible-on-ctrl-btn"></i>
|
<span class="caret"></span>
|
||||||
<i class="fontastic hidden-on-ctrl-btn">📁</i>
|
</a>
|
||||||
<span class="caret"></span>
|
<ul class="dropdown-menu" role="menu" aria-labelledby="move-dropdown-id" role="menu" data-bind="foreach: folderMenuForMove">
|
||||||
|
<li role="presentation" data-bind="css: { 'disabled': disabled }, click: function (mdata, oEvent) { if (!disabled) $root.moveSelectedMessagesToFolder(id, oEvent && !!oEvent.ctrlKey); }">
|
||||||
|
<a href="#" tabindex="-1" data-bind="text: name"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!-- /ko -->
|
||||||
|
<!-- ko if: newMoveToFolder -->
|
||||||
|
<div class="btn-group" data-bind="visible: mobileCheckedStateShow()">
|
||||||
|
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn buttonMove" data-bind="command: moveNewCommand" data-i18n="[title]GLOBAL/MOVE_TO">
|
||||||
|
<i class="icon-copy visible-on-ctrl-btn"></i>
|
||||||
|
<i class="fontastic hidden-on-ctrl-btn">📁</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<!-- /ko -->
|
||||||
|
<div class="btn-group" data-bind="visible: mobileCheckedStateShow()">
|
||||||
|
<a class="btn button-archive"
|
||||||
|
data-bind="visible: isArchiveVisible, command: archiveCommand" data-i18n="[title]GLOBAL/TO_ARCHIVE">
|
||||||
|
<i class="icon-archive"></i>
|
||||||
|
</a>
|
||||||
|
<a class="btn button-spam fontastic" data-bind="visible: isSpamVisible, command: spamCommand" data-i18n="[title]GLOBAL/SPAM">⚠</a>
|
||||||
|
<a class="btn button-not-spam"
|
||||||
|
data-bind="visible: isUnSpamVisible, command: notSpamCommand" data-i18n="[title]GLOBAL/NOT_SPAM">
|
||||||
|
<i class="icon-check-mark-circle-two"></i>
|
||||||
|
</a>
|
||||||
|
<a class="btn button-delete fontastic"
|
||||||
|
data-bind="command: deleteCommand" data-i18n="[title]GLOBAL/DELETE">🗑</a>
|
||||||
|
</div>
|
||||||
|
<div class="btn-group dropdown colored-toggle" data-bind="registerBootstrapDropdown: true, openDropdownTrigger: moreDropdownTrigger">
|
||||||
|
<a id="more-list-dropdown-id" class="btn dropdown-toggle fontastic" href="#" tabindex="-1" data-i18n="[title]GLOBAL/MORE">☰</a>
|
||||||
|
<ul class="dropdown-menu" role="menu" aria-labelledby="more-list-dropdown-id">
|
||||||
|
<li role="presentation" data-bind="click: listUnsetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
||||||
|
<a href="#" tabindex="-1">
|
||||||
|
<i class="icon-none"></i>
|
||||||
|
<span data-i18n="MESSAGE_LIST/MENU_UNSET_SEEN"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu" role="menu" aria-labelledby="move-dropdown-id" role="menu" data-bind="foreach: folderMenuForMove">
|
</li>
|
||||||
<li role="presentation" data-bind="css: { 'disabled': disabled }, click: function (mdata, oEvent) { if (!disabled) $root.moveSelectedMessagesToFolder(id, oEvent && !!oEvent.ctrlKey); }">
|
<li role="presentation" data-bind="click: listSetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
||||||
<a href="#" tabindex="-1" data-bind="text: name"></a>
|
<a href="#" tabindex="-1">
|
||||||
</li>
|
<i class="icon-none"></i>
|
||||||
</ul>
|
<span data-i18n="MESSAGE_LIST/MENU_SET_SEEN"></span>
|
||||||
</div>
|
|
||||||
<!-- /ko -->
|
|
||||||
<!-- ko if: newMoveToFolder -->
|
|
||||||
<div class="btn-group" data-bind="visible: mobileCheckedStateShow()">
|
|
||||||
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn buttonMove" data-bind="command: moveNewCommand" data-i18n="[title]GLOBAL/MOVE_TO">
|
|
||||||
<i class="icon-copy visible-on-ctrl-btn"></i>
|
|
||||||
<i class="fontastic hidden-on-ctrl-btn">📁</i>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</li>
|
||||||
<!-- /ko -->
|
<li role="presentation" data-bind="click: listSetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
||||||
<div class="btn-group" data-bind="visible: mobileCheckedStateShow()">
|
<a href="#" tabindex="-1">
|
||||||
<a class="btn button-archive"
|
<i class="fontastic flagged">★</i>
|
||||||
data-bind="visible: isArchiveVisible, command: archiveCommand" data-i18n="[title]GLOBAL/TO_ARCHIVE">
|
<span data-i18n="MESSAGE_LIST/MENU_SET_FLAG"></span>
|
||||||
<i class="icon-archive"></i>
|
|
||||||
</a>
|
</a>
|
||||||
<a class="btn button-spam fontastic" data-bind="visible: isSpamVisible, command: spamCommand" data-i18n="[title]GLOBAL/SPAM">⚠</a>
|
</li>
|
||||||
<a class="btn button-not-spam"
|
<li role="presentation" data-bind="click: listUnsetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
||||||
data-bind="visible: isUnSpamVisible, command: notSpamCommand" data-i18n="[title]GLOBAL/NOT_SPAM">
|
<a href="#" tabindex="-1">
|
||||||
<i class="icon-check-mark-circle-two"></i>
|
<i class="fontastic unflagged">☆</i>
|
||||||
|
<span data-i18n="MESSAGE_LIST/MENU_UNSET_FLAG"></span>
|
||||||
</a>
|
</a>
|
||||||
<a class="btn button-delete fontastic"
|
</li>
|
||||||
data-bind="command: deleteCommand" data-i18n="[title]GLOBAL/DELETE">🗑</a>
|
<li role="presentation" data-bind="click: listSetAllSeen, css: {'disabled': !hasMessages()}">
|
||||||
</div>
|
<a href="#" tabindex="-1">
|
||||||
<div class="btn-group dropdown colored-toggle" data-bind="registerBootstrapDropdown: true, openDropdownTrigger: moreDropdownTrigger">
|
<i class="icon-none"></i>
|
||||||
<a id="more-list-dropdown-id" class="btn dropdown-toggle fontastic" href="#" tabindex="-1" data-i18n="[title]GLOBAL/MORE">☰</a>
|
<span data-i18n="MESSAGE_LIST/MENU_SET_ALL_SEEN"></span>
|
||||||
<ul class="dropdown-menu" role="menu" aria-labelledby="more-list-dropdown-id">
|
</a>
|
||||||
<li role="presentation" data-bind="click: listUnsetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
<li class="dividerbar" role="presentation" data-bind="command: multyForwardCommand">
|
||||||
<i class="icon-none"></i>
|
<a href="#" tabindex="-1">
|
||||||
<span data-i18n="MESSAGE_LIST/MENU_UNSET_SEEN"></span>
|
<i class="fontastic">↞</i>
|
||||||
</a>
|
<span data-i18n="MESSAGE_LIST/BUTTON_MULTY_FORWARD"></span>
|
||||||
</li>
|
</a>
|
||||||
<li role="presentation" data-bind="click: listSetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
<li class="dividerbar" role="presentation" data-bind="visible: allowDangerousActions, command: deleteWithoutMoveCommand">
|
||||||
<i class="icon-none"></i>
|
<a href="#" tabindex="-1">
|
||||||
<span data-i18n="MESSAGE_LIST/MENU_SET_SEEN"></span>
|
<i class="fontastic">🗑</i>
|
||||||
</a>
|
<span data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></span>
|
||||||
</li>
|
</a>
|
||||||
<li role="presentation" data-bind="click: listSetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
<li role="presentation" data-bind="visible: allowDangerousActions, command: clearCommand">
|
||||||
<i class="fontastic flagged">★</i>
|
<a href="#" tabindex="-1">
|
||||||
<span data-i18n="MESSAGE_LIST/MENU_SET_FLAG"></span>
|
<i class="fontastic">🔥</i>
|
||||||
</a>
|
<span data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER"></span>
|
||||||
</li>
|
</a>
|
||||||
<li role="presentation" data-bind="click: listUnsetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
</ul>
|
||||||
<i class="fontastic unflagged">☆</i>
|
</div>
|
||||||
<span data-i18n="MESSAGE_LIST/MENU_UNSET_FLAG"></span>
|
<div class="btn-group dropdown sortFolder" data-bind="visible: sortSupported() && mobileCheckedStateHide(), registerBootstrapDropdown: true, openDropdownTrigger: sortDropdownTrigger">
|
||||||
</a>
|
<a id="sort-list-dropdown-id" class="btn dropdown-toggle fontastic" href="#" tabindex="-1" data-i18n="[title]MESSAGE_LIST/SORT" data-bind="text: sortText">⬇</a>
|
||||||
</li>
|
<ul class="dropdown-menu" role="menu" aria-labelledby="sort-list-dropdown-id">
|
||||||
<li role="presentation" data-bind="click: listSetAllSeen, css: {'disabled': !hasMessages()}">
|
<li role="presentation" data-sort="DATE" data-bind="click: changeSort">
|
||||||
<a href="#" tabindex="-1">
|
<a href="#" tabindex="-1">
|
||||||
<i class="icon-none"></i>
|
<i class="fontastic">📅⬆</i>
|
||||||
<span data-i18n="MESSAGE_LIST/MENU_SET_ALL_SEEN"></span>
|
<span data-i18n="MESSAGE_LIST/SORT_DATE_ASC"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="dividerbar" role="presentation" data-bind="command: multyForwardCommand">
|
<li role="presentation" data-sort="" data-bind="click: changeSort">
|
||||||
<a href="#" tabindex="-1">
|
<a href="#" tabindex="-1">
|
||||||
<i class="fontastic">↞</i>
|
<i class="fontastic">📅⬇</i>
|
||||||
<span data-i18n="MESSAGE_LIST/BUTTON_MULTY_FORWARD"></span>
|
<span data-i18n="MESSAGE_LIST/SORT_DATE_DESC"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="dividerbar" role="presentation" data-bind="visible: allowDangerousActions, command: deleteWithoutMoveCommand">
|
<li class="dividerbar" role="presentation" data-sort="SIZE" data-bind="click: changeSort">
|
||||||
<a href="#" tabindex="-1">
|
<a href="#" tabindex="-1">
|
||||||
<i class="fontastic">🗑</i>
|
<i class="fontastic">✉⬆</i>
|
||||||
<span data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></span>
|
<span data-i18n="MESSAGE_LIST/SORT_SIZE_ASC"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li role="presentation" data-bind="visible: allowDangerousActions, command: clearCommand">
|
<li role="presentation" data-sort="REVERSE SIZE" data-bind="click: changeSort">
|
||||||
<a href="#" tabindex="-1">
|
<a href="#" tabindex="-1">
|
||||||
<i class="fontastic">🔥</i>
|
<i class="fontastic">✉⬇</i>
|
||||||
<span data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER"></span>
|
<span data-i18n="MESSAGE_LIST/SORT_SIZE_DESC"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li class="dividerbar" role="presentation" data-sort="SUBJECT" data-bind="click: changeSort">
|
||||||
</div>
|
<a href="#" tabindex="-1">
|
||||||
<div class="btn-group dropdown sortFolder" data-bind="visible: sortSupported() && mobileCheckedStateHide(), registerBootstrapDropdown: true, openDropdownTrigger: sortDropdownTrigger">
|
<i class="fontastic">𝐒⬇</i>
|
||||||
<a id="sort-list-dropdown-id" class="btn dropdown-toggle fontastic" href="#" tabindex="-1" data-i18n="[title]MESSAGE_LIST/SORT" data-bind="text: sortText">⬇</a>
|
<span data-i18n="MESSAGE_LIST/SORT_SUBJECT_ASC"></span>
|
||||||
<ul class="dropdown-menu" role="menu" aria-labelledby="sort-list-dropdown-id">
|
</a>
|
||||||
<li role="presentation" data-sort="DATE" data-bind="click: changeSort">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
<li role="presentation" data-sort="REVERSE SUBJECT" data-bind="click: changeSort">
|
||||||
<i class="fontastic">📅⬆</i>
|
<a href="#" tabindex="-1">
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_DATE_ASC"></span>
|
<i class="fontastic">𝐒⬆</i>
|
||||||
</a>
|
<span data-i18n="MESSAGE_LIST/SORT_SUBJECT_DESC"></span>
|
||||||
</li>
|
</a>
|
||||||
<li role="presentation" data-sort="" data-bind="click: changeSort">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
<li class="dividerbar" role="presentation" data-sort="FROM" data-bind="click: changeSort">
|
||||||
<i class="fontastic">📅⬇</i>
|
<a href="#" tabindex="-1">
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_DATE_DESC"></span>
|
<i class="fontastic">@⬇</i>
|
||||||
</a>
|
<span data-i18n="MESSAGE_LIST/SORT_FROM_ASC"></span>
|
||||||
</li>
|
</a>
|
||||||
<li class="dividerbar" role="presentation" data-sort="SIZE" data-bind="click: changeSort">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
<li role="presentation" data-sort="REVERSE FROM" data-bind="click: changeSort">
|
||||||
<i class="fontastic">✉⬆</i>
|
<a href="#" tabindex="-1">
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_SIZE_ASC"></span>
|
<i class="fontastic">@⬆</i>
|
||||||
</a>
|
<span data-i18n="MESSAGE_LIST/SORT_FROM_DESC"></span>
|
||||||
</li>
|
</a>
|
||||||
<li role="presentation" data-sort="REVERSE SIZE" data-bind="click: changeSort">
|
</li>
|
||||||
<a href="#" tabindex="-1">
|
</ul>
|
||||||
<i class="fontastic">✉⬇</i>
|
</div>
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_SIZE_DESC"></span>
|
</div>
|
||||||
</a>
|
|
||||||
</li>
|
<div class="messageList g-ui-user-select-none" data-bind="css: {'hideMessageListCheckbox': !useCheckboxesInList() }">
|
||||||
<li class="dividerbar" role="presentation" data-sort="SUBJECT" data-bind="click: changeSort">
|
<div class="second-toolbar thm-message-list-top-toolbar">
|
||||||
<a href="#" tabindex="-1">
|
<div class="form-inline">
|
||||||
<i class="fontastic">𝐒⬇</i>
|
<i class="checkboxCheckAll fontastic" data-bind="text: checkAll() ? (isIncompleteChecked() ? '▣' : '☑') : '☐'"></i>
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_SUBJECT_ASC"></span>
|
<div class="input-append" data-bind="visible: allowSearch">
|
||||||
</a>
|
<div class="close-input-wrp">
|
||||||
</li>
|
<a class="close" data-bind="click: cancelSearch, visible: '' !== messageListSearchDesc()">×</a>
|
||||||
<li role="presentation" data-sort="REVERSE SUBJECT" data-bind="click: changeSort">
|
<input type="search" class="span4 inputSearch" tabindex="-1" placeholder="Search" autocorrect="off" autocapitalize="off" data-i18n="[placeholder]GLOBAL/SEARCH" data-bind="value: inputProxyMessageListSearch, onEnter: searchEnterAction, hasfocus: inputMessageListSearchFocus" />
|
||||||
<a href="#" tabindex="-1">
|
</div>
|
||||||
<i class="fontastic">𝐒⬆</i>
|
<a class="btn buttonMoreSearch" data-bind="visible: allowSearchAdv, click: advancedSearchClick">▼</a>
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_SUBJECT_DESC"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="dividerbar" role="presentation" data-sort="FROM" data-bind="click: changeSort">
|
|
||||||
<a href="#" tabindex="-1">
|
|
||||||
<i class="fontastic">@⬇</i>
|
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_FROM_ASC"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li role="presentation" data-sort="REVERSE FROM" data-bind="click: changeSort">
|
|
||||||
<a href="#" tabindex="-1">
|
|
||||||
<i class="fontastic">@⬆</i>
|
|
||||||
<span data-i18n="MESSAGE_LIST/SORT_FROM_DESC"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="b-message-list-wrapper" data-bind="css: {'hideMessageListCheckbox': !useCheckboxesInList() }">
|
<div class="b-content" data-bind="initDom: dragOverBodyArea">
|
||||||
<div class="second-toolbar thm-message-list-top-toolbar">
|
<div class="listThreadUidDesc" data-bind="visible: 0 < messageListEndThreadUid(), click: cancelThreadUid">
|
||||||
<div class="form-inline">
|
<i class="fontastic">⬅</i>
|
||||||
<i class="checkboxCheckAll fontastic" data-bind="text: checkAll() ? (isIncompleteChecked() ? '▣' : '☑') : '☐'"></i>
|
<span data-i18n="MESSAGE_LIST/BACK_TO_MESSAGE_LIST"></span>
|
||||||
<div class="input-append" data-bind="visible: allowSearch">
|
|
||||||
<div class="close-input-wrp">
|
|
||||||
<a class="close" data-bind="click: cancelSearch, visible: '' !== messageListSearchDesc()">×</a>
|
|
||||||
<input type="search" class="span4 inputSearch" tabindex="-1" placeholder="Search" autocorrect="off" autocapitalize="off" data-i18n="[placeholder]GLOBAL/SEARCH" data-bind="value: inputProxyMessageListSearch, onEnter: searchEnterAction, hasfocus: inputMessageListSearchFocus" />
|
|
||||||
</div>
|
|
||||||
<a class="btn buttonMoreSearch" data-bind="visible: allowSearchAdv, click: advancedSearchClick">▼</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="b-content" data-bind="initDom: dragOverBodyArea">
|
<div class="listSearchDesc" data-bind="visible: '' !== messageListSearchDesc(), text: messageListSearchDesc"></div>
|
||||||
<div class="listThreadUidDesc" data-bind="visible: 0 < messageListEndThreadUid(), click: cancelThreadUid">
|
<div class="listDragOver" data-bind="css: {'viewAppendArea': dragOver() && '' === messageListError() && !popupVisibility(), 'dragOverEnter': dragOverEnter }, initDom: dragOverArea">
|
||||||
<i class="fontastic">⬅</i>
|
<i class="fontastic">⬇</i>
|
||||||
<span data-i18n="MESSAGE_LIST/BACK_TO_MESSAGE_LIST"></span>
|
<span data-i18n="MESSAGE_LIST/PUT_MESSAGE_HERE"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="listSearchDesc" data-bind="visible: '' !== messageListSearchDesc(), text: messageListSearchDesc"></div>
|
<div class="listClear" data-bind="visible: clearListIsVisible()">
|
||||||
<div class="listDragOver" data-bind="css: {'viewAppendArea': dragOver() && '' === messageListError() && !popupVisibility(), 'dragOverEnter': dragOverEnter }, initDom: dragOverArea">
|
<a href="#" class="g-ui-link" data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER" data-bind="command: clearCommand"></a>
|
||||||
<i class="fontastic">⬇</i>
|
</div>
|
||||||
<span data-i18n="MESSAGE_LIST/PUT_MESSAGE_HERE"></span>
|
<div class="listError error" data-bind="visible: !dragOver() && '' !== messageListError(), text: messageListError"></div>
|
||||||
</div>
|
<div class="listEmptyMessage" data-bind="visible: listEmptyMessage(), text: listEmptyMessage()"></div>
|
||||||
<div class="listClear" data-bind="visible: clearListIsVisible()">
|
<div class="listLoading" data-bind="visible: !dragOver() && 0 === messageList().length &&
|
||||||
<a href="#" class="g-ui-link" data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER" data-bind="command: clearCommand"></a>
|
messageListCompleteLoadingThrottle() && '' === messageListError()">
|
||||||
</div>
|
<i class="icon-spinner"></i>
|
||||||
<div class="listError error" data-bind="visible: !dragOver() && '' !== messageListError(), text: messageListError"></div>
|
<span data-i18n="GLOBAL/LOADING"></span>
|
||||||
<div class="listEmptyMessage" data-bind="visible: listEmptyMessage(), text: listEmptyMessage()"></div>
|
</div>
|
||||||
<div class="listLoading" data-bind="visible: !dragOver() && 0 === messageList().length &&
|
<div data-bind="dragmessages: getDragData">
|
||||||
messageListCompleteLoadingThrottle() && '' === messageListError()">
|
<div class="messageListPlace" data-bind="foreach: messageList">
|
||||||
<i class="icon-spinner"></i>
|
|
||||||
<span data-i18n="GLOBAL/LOADING"></span>
|
|
||||||
</div>
|
|
||||||
<div data-bind="dragmessages: getDragData">
|
|
||||||
<div class="messageListPlace" data-bind="foreach: messageList">
|
|
||||||
|
|
||||||
<div class="messageListItem" data-bind="css: lineAsCss()">
|
<div class="messageListItem" data-bind="css: lineAsCss()">
|
||||||
<div class="checkboxMessage fontastic" data-bind="text: checked() ? '☑' : '☐'"></div>
|
<div class="checkboxMessage fontastic" data-bind="text: checked() ? '☑' : '☐'"></div>
|
||||||
|
|
||||||
<div class="flagParent fontastic"></div>
|
<div class="flagParent fontastic"></div>
|
||||||
|
|
||||||
<div class="senderParent actionHandle" data-bind="attr: {'title': senderClearEmailsString}">
|
<div class="senderParent actionHandle" data-bind="attr: {'title': senderClearEmailsString}">
|
||||||
<!-- ko if: isAnswered --><i class="replyFlag fontastic">←</i><!-- /ko -->
|
<!-- ko if: isAnswered --><i class="replyFlag fontastic">←</i><!-- /ko -->
|
||||||
<!-- ko if: isForwarded --><i class="forwardFlag fontastic">→</i><!-- /ko -->
|
<!-- ko if: isForwarded --><i class="forwardFlag fontastic">→</i><!-- /ko -->
|
||||||
<!-- ko text: senderEmailsString --><!-- /ko -->
|
<!-- ko text: senderEmailsString --><!-- /ko -->
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="attachmentParent actionHandle">
|
|
||||||
<i data-bind="css: attachmentIconClass"></i>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="subjectParent actionHandle">
|
|
||||||
<!-- ko if: isImportant --><b class="importantMark">!</b><!-- /ko -->
|
|
||||||
<!-- ko text: subject || $root.emptySubjectValue --><!-- /ko -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="sizeParent actionHandle" data-bind="text: friendlySize()"></div>
|
|
||||||
|
|
||||||
<div class="threads-len" data-bind="visible: 1 < threadsLen()">
|
|
||||||
<span>
|
|
||||||
<!-- ko text: threadsLen --><!-- /ko -->
|
|
||||||
›
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<time class="actionHandle" data-moment-format="SHORT" data-moment-format-title="FULL" data-bind="moment: dateTimeStampInUTC"></time>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="attachmentParent actionHandle">
|
||||||
|
<i data-bind="css: attachmentIconClass"></i>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="subjectParent actionHandle">
|
||||||
|
<!-- ko if: isImportant --><b class="importantMark">!</b><!-- /ko -->
|
||||||
|
<!-- ko text: subject || $root.emptySubjectValue --><!-- /ko -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sizeParent actionHandle" data-bind="text: friendlySize()"></div>
|
||||||
|
|
||||||
|
<div class="threads-len" data-bind="visible: 1 < threadsLen()">
|
||||||
|
<span>
|
||||||
|
<!-- ko text: threadsLen --><!-- /ko -->
|
||||||
|
›
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<time class="actionHandle" data-moment-format="SHORT" data-moment-format-title="FULL" data-bind="moment: dateTimeStampInUTC"></time>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="messagesDragImage"><span class="text"></span> <i class="icon-mail"></i></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="b-footer thm-message-list-bottom-toolbar">
|
<div id="messagesDragImage"><span class="text"></span> <i class="icon-mail"></i></div>
|
||||||
<span data-bind="visible: 0 < userUsageProc(), attr: { title: quotaTooltip() }" class="e-quota">
|
</div>
|
||||||
<!-- ko text: userUsageProc --><!-- /ko -->%
|
<div class="b-footer thm-message-list-bottom-toolbar">
|
||||||
</span>
|
<span data-bind="visible: 0 < userUsageProc(), attr: { title: quotaTooltip() }" class="e-quota">
|
||||||
<div class="pull-right">
|
<!-- ko text: userUsageProc --><!-- /ko -->%
|
||||||
<!-- ko template: { name: 'Paginator', data: messageListPaginator } --><!-- /ko -->
|
</span>
|
||||||
</div>
|
<div class="pull-right">
|
||||||
|
<!-- ko template: { name: 'Paginator', data: messageListPaginator } --><!-- /ko -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="messageView" data-bind="css: {'message-selected': isMessageSelected, 'focused': messageFocused}">
|
<div class="messageView">
|
||||||
<div class="toolbar top-toolbar g-ui-user-select-none">
|
<div class="toolbar top-toolbar g-ui-user-select-none">
|
||||||
<div class="messageButtons btn-toolbar">
|
<div class="messageButtons btn-toolbar">
|
||||||
<div class="btn-group" data-i18n="[title]GLOBAL/CLOSE">
|
<div class="btn-group" data-i18n="[title]GLOBAL/CLOSE">
|
||||||
|
|
@ -243,17 +243,15 @@
|
||||||
<div class="messageItem" data-bind="css: viewLineAsCss()">
|
<div class="messageItem" data-bind="css: viewLineAsCss()">
|
||||||
<div tabindex="0" data-bind="hasfocus: messageDomFocused">
|
<div tabindex="0" data-bind="hasfocus: messageDomFocused">
|
||||||
|
|
||||||
<div>
|
<span class="buttonFull" data-bind="click: toggleFullScreen">
|
||||||
<span class="buttonFull" data-bind="click: toggleFullScreen">
|
<i data-bind="css: { 'icon-arrows-out': !fullScreenMode(), 'icon-arrows-in': fullScreenMode }"></i>
|
||||||
<i data-bind="css: { 'icon-arrows-out': !fullScreenMode(), 'icon-arrows-in': fullScreenMode }"></i>
|
</span>
|
||||||
</span>
|
<div class="loading" data-bind="visible: messageLoadingThrottle()">
|
||||||
<div class="loading g-ui-min-height-300" data-bind="visible: messageLoadingThrottle()">
|
<i class="icon-spinner"></i>
|
||||||
<i class="icon-spinner"></i>
|
<span data-i18n="GLOBAL/LOADING"></span>
|
||||||
<span data-i18n="GLOBAL/LOADING"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="g-ui-min-height-300" data-bind="visible: !messageLoadingThrottle()">
|
<div data-bind="visible: !messageLoadingThrottle()">
|
||||||
<div class="bodySubHeader">
|
<div class="bodySubHeader">
|
||||||
<div class="showImages" data-bind="visible: message() && message().hasImages(), click: showImages">
|
<div class="showImages" data-bind="visible: message() && message().hasImages(), click: showImages">
|
||||||
<i class="fontastic">🖼</i>
|
<i class="fontastic">🖼</i>
|
||||||
|
|
@ -310,7 +308,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bodyText g-ui-min-height-300"
|
<div class="bodyText"
|
||||||
data-bind="initDom: messagesBodiesDom"></div>
|
data-bind="initDom: messagesBodiesDom"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@
|
||||||
<a data-bind="css: {'selected': selected }, attr: { 'href': $root.link(route), 'data-i18n': label }"></a>
|
<a data-bind="css: {'selected': selected }, attr: { 'href': $root.link(route), 'data-i18n': label }"></a>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<div class="b-content show-on-panel-disabled" data-bind="click: function () { leftPanelDisabled(false); }"></div>
|
<div class="b-content show-on-panel-disabled" data-bind="click: leftPanelDisabled.toggle()"></div>
|
||||||
<div class="b-footer">
|
<div class="b-footer">
|
||||||
<a class="btn buttonResize" data-bind="click: function () { leftPanelDisabled(!leftPanelDisabled()); }">
|
<a class="btn buttonResize" data-bind="click: leftPanelDisabled.toggle()">
|
||||||
<i data-bind="css: {'icon-resize-out': leftPanelDisabled(), 'icon-resize-in': !leftPanelDisabled()}"></i>
|
<i data-bind="css: {'icon-resize-out': leftPanelDisabled(), 'icon-resize-in': !leftPanelDisabled()}"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
<div class="b-settings b-settins-right">
|
<div class="b-settings b-settins-right">
|
||||||
<div class="b-toolbar btn-toolbar" style="margin-top: 2px;">
|
<div class="b-toolbar btn-toolbar" style="margin-top: 2px;">
|
||||||
<div class="btn-group show-mobile" data-bind="visible: !leftPanelDisabled()" style="margin-left: -1px">
|
<!-- ko if: isMobile() -->
|
||||||
<a class="btn btn-thin-2 fontastic" data-bind="click: hideLeft">❮</a>
|
<div class="btn-group" style="margin-left: -1px">
|
||||||
</div>
|
<a class="btn btn-thin-2 fontastic toggleLeft" data-bind="click: leftPanelDisabled.toggle, text: leftPanelDisabled() ? '❯' : '❮'">❮</a>
|
||||||
<div class="btn-group show-mobile" data-bind="visible: leftPanelDisabled()">
|
|
||||||
<a class="btn btn-thin-2 fontastic" data-bind="click: showLeft">❯</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
<!-- /ko -->
|
||||||
<a class="btn button-back" data-bind="click: backToMailBoxClick">
|
<a class="btn button-back" data-bind="click: backToMailBoxClick">
|
||||||
<i class="fontastic">⬅</i>
|
<i class="fontastic">⬅</i>
|
||||||
<span data-i18n="GLOBAL/BACK"></span>
|
<span data-i18n="GLOBAL/BACK"></span>
|
||||||
|
|
|
||||||
|
|
@ -1,81 +1,77 @@
|
||||||
<div class="b-system-drop-down g-ui-user-select-none">
|
<div class="btn-toolbar g-ui-user-select-none">
|
||||||
<div class="b-toolbar">
|
<div class="audioPlace"
|
||||||
<div class="btn-toolbar">
|
data-bind="visible: '' !== currentAudio(), attr: { title: currentAudio }, click: stopPlay">
|
||||||
<div class="audioPlace"
|
<div class="playIcon"><div></div></div>
|
||||||
data-bind="visible: '' !== currentAudio(), attr: { title: currentAudio }, click: stopPlay">
|
<i class="stopIcon fontastic">⏸</i>
|
||||||
<div class="playIcon"><div></div></div>
|
</div>
|
||||||
<i class="stopIcon fontastic">⏸</i>
|
<div class="accountPlace hide-mobile" data-bind="text: emailTitle()"></div>
|
||||||
</div>
|
<div class="btn-group dropdown colored-toggle" data-bind="registerBootstrapDropdown: true, openDropdownTrigger: accountMenuDropdownTrigger">
|
||||||
<div class="accountPlace hide-mobile" data-bind="text: emailTitle()"></div>
|
<a id="top-system-dropdown-id" href="#" tabindex="-1" class="btn single btn-block dropdown-toggle">
|
||||||
<div class="btn-group dropdown colored-toggle" data-bind="registerBootstrapDropdown: true, openDropdownTrigger: accountMenuDropdownTrigger">
|
<i class="fontastic" data-bind="css: {'icon-spinner': accountsLoading()}">👤</i>
|
||||||
<a id="top-system-dropdown-id" href="#" tabindex="-1" class="btn single btn-block dropdown-toggle">
|
|
||||||
<i class="fontastic" data-bind="css: {'icon-spinner': accountsLoading()}">👤</i>
|
|
||||||
<!--
|
<!--
|
||||||
<b data-bind="text: accountsUnreadCount, visible: 100 > accountsUnreadCount() && 0 < accountsUnreadCount()"></b>
|
<b data-bind="text: accountsUnreadCount, visible: 100 > accountsUnreadCount() && 0 < accountsUnreadCount()"></b>
|
||||||
<b data-bind="visible: 99 < accountsUnreadCount()">99+</b>
|
<b data-bind="visible: 99 < accountsUnreadCount()">99+</b>
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu right-edge" tabindex="-1" role="menu" aria-labelledby="top-system-dropdown-id">
|
||||||
|
|
||||||
|
<!-- ko if: accounts().length -->
|
||||||
|
<!-- ko foreach: accounts -->
|
||||||
|
<li role="presentation">
|
||||||
|
<a class="account-item" href="#" data-bind="click: $root.accountClick,
|
||||||
|
attr: {'href': changeAccountLink()}, css: {'current': $root.accountEmail() === email}">
|
||||||
|
<!-- <b class="pull-right counter" data-bind="visible: 0 < count()">
|
||||||
|
<span data-bind="text: count, visible: 100 > count()"></span>
|
||||||
|
<span data-bind="visible: 99 < count()">99+</span>
|
||||||
|
</b>-->
|
||||||
|
<i class="fontastic">✔</i>
|
||||||
|
<i class="fontastic">👤</i>
|
||||||
|
<span class="email-title" data-bind="text: email, attr: {title: email}"></span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<!-- /ko -->
|
||||||
|
<!-- /ko -->
|
||||||
|
|
||||||
|
<li class="dividerbar" role="presentation" data-bind="visible: allowAccounts">
|
||||||
|
<a href="#" tabindex="-1" data-bind="click: addAccountClick">
|
||||||
|
<i class="fontastic">✚</i>
|
||||||
|
<span data-i18n="TOP_TOOLBAR/BUTTON_ADD_ACCOUNT"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu right-edge" tabindex="-1" role="menu" aria-labelledby="top-system-dropdown-id">
|
</li>
|
||||||
|
<li role="presentation" data-bind="visible: allowContacts">
|
||||||
<!-- ko if: accounts().length -->
|
<a href="#" tabindex="-1" data-bind="click: contactsClick">
|
||||||
<!-- ko foreach: accounts -->
|
<i class="fontastic">📇</i>
|
||||||
<li role="presentation">
|
<span data-i18n="GLOBAL/CONTACTS"></span>
|
||||||
<a class="account-item" href="#" data-bind="click: $root.accountClick,
|
</a>
|
||||||
attr: {'href': changeAccountLink()}, css: {'current': $root.accountEmail() === email}">
|
</li>
|
||||||
<!-- <b class="pull-right counter" data-bind="visible: 0 < count()">
|
<li role="presentation">
|
||||||
<span data-bind="text: count, visible: 100 > count()"></span>
|
<a href="#" tabindex="-1" data-bind="click: settingsClick">
|
||||||
<span data-bind="visible: 99 < count()">99+</span>
|
<i class="fontastic">⚙</i>
|
||||||
</b>-->
|
<span data-i18n="TOP_TOOLBAR/BUTTON_SETTINGS"></span>
|
||||||
<i class="fontastic">✔</i>
|
</a>
|
||||||
<i class="fontastic">👤</i>
|
</li>
|
||||||
<span class="email-title" data-bind="text: email, attr: {title: email}"></span>
|
<li role="presentation">
|
||||||
</a>
|
<a href="#" tabindex="-1" data-bind="click: settingsHelp">
|
||||||
</li>
|
<i class="icon-help"></i>
|
||||||
<!-- /ko -->
|
<span data-i18n="TOP_TOOLBAR/BUTTON_HELP"></span>
|
||||||
<!-- /ko -->
|
</a>
|
||||||
|
</li>
|
||||||
<li class="dividerbar" role="presentation" data-bind="visible: allowAccounts">
|
<li class="dividerbar" role="presentation">
|
||||||
<a href="#" tabindex="-1" data-bind="click: addAccountClick">
|
<a href="#" tabindex="-1" data-bind="click: toggleLayout">
|
||||||
<i class="fontastic">✚</i>
|
<i class="fontastic show-mobile">💻</i>
|
||||||
<span data-i18n="TOP_TOOLBAR/BUTTON_ADD_ACCOUNT"></span>
|
<span class="show-mobile" data-i18n="MOBILE/BUTTON_DESKTOP_VERSION"></span>
|
||||||
</a>
|
<i class="fontastic hide-mobile">📱</i>
|
||||||
</li>
|
<span class="hide-mobile" data-i18n="MOBILE/BUTTON_MOBILE_VERSION"></span>
|
||||||
<li role="presentation" data-bind="visible: allowContacts">
|
</a>
|
||||||
<a href="#" tabindex="-1" data-bind="click: contactsClick">
|
</li>
|
||||||
<i class="fontastic">📇</i>
|
<li role="presentation">
|
||||||
<span data-i18n="GLOBAL/CONTACTS"></span>
|
<a href="#" tabindex="-1" data-bind="click: logoutClick">
|
||||||
</a>
|
<i class="fontastic">⏻</i>
|
||||||
</li>
|
<span data-i18n="GLOBAL/LOGOUT"></span>
|
||||||
<li role="presentation">
|
</a>
|
||||||
<a href="#" tabindex="-1" data-bind="click: settingsClick">
|
</li>
|
||||||
<i class="fontastic">⚙</i>
|
</ul>
|
||||||
<span data-i18n="TOP_TOOLBAR/BUTTON_SETTINGS"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li role="presentation">
|
|
||||||
<a href="#" tabindex="-1" data-bind="click: settingsHelp">
|
|
||||||
<i class="icon-help"></i>
|
|
||||||
<span data-i18n="TOP_TOOLBAR/BUTTON_HELP"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="dividerbar" role="presentation">
|
|
||||||
<a href="#" tabindex="-1" data-bind="click: toggleLayout">
|
|
||||||
<i class="fontastic show-mobile">💻</i>
|
|
||||||
<span class="show-mobile" data-i18n="MOBILE/BUTTON_DESKTOP_VERSION"></span>
|
|
||||||
<i class="fontastic hide-mobile">📱</i>
|
|
||||||
<span class="hide-mobile" data-i18n="MOBILE/BUTTON_MOBILE_VERSION"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li role="presentation">
|
|
||||||
<a href="#" tabindex="-1" data-bind="click: logoutClick">
|
|
||||||
<i class="fontastic">⏻</i>
|
|
||||||
<span data-i18n="GLOBAL/LOGOUT"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,6 @@ config.paths.js = {
|
||||||
libs: {
|
libs: {
|
||||||
name: 'libs.js',
|
name: 'libs.js',
|
||||||
src: [
|
src: [
|
||||||
'dev/polyfill.js',
|
|
||||||
'dev/prototype.js',
|
'dev/prototype.js',
|
||||||
'dev/External/ifvisible.js',
|
'dev/External/ifvisible.js',
|
||||||
'dev/dragdropgecko.js',
|
'dev/dragdropgecko.js',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue