You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
5.1 KiB
HTML
175 lines
5.1 KiB
HTML
<html window-icon="themepicsingle:outbox">
|
|
<head>
|
|
<include src="common.htm" />
|
|
<style src="outbox.css" />
|
|
<script>
|
|
var content = $("#content"),
|
|
empty = $("#empty"),
|
|
info = $("#info"),
|
|
chars = $("#chars"),
|
|
delmsg = $("#delete"),
|
|
savemsg = $("#save"),
|
|
messages = $("#messages"),
|
|
msgtext = $("#msgtext"),
|
|
msgmenu = $("#msgmenu"),
|
|
msgs = [];
|
|
|
|
view.minSize = [400, 300];
|
|
translateWindow("span, checkbox");
|
|
|
|
function win2unix(text) {
|
|
return text.replace(/\r?\n/g, "\n");
|
|
}
|
|
|
|
function unix2win(text) {
|
|
return text.replace(/\r?\n/g, "\r\n");
|
|
}
|
|
|
|
function updateList(selectLast = false) {
|
|
delmsg.state.disabled = true;
|
|
savemsg.state.disabled = true;
|
|
msgs = CommonNative.GetOutboxMessages();
|
|
if (!msgs) msgs = [];
|
|
messages.clear();
|
|
messages.value = null;
|
|
for (let msg of msgs) {
|
|
var children = [];
|
|
if (msg.pic) children.push(<div auto pic={msg.pic}></div>);
|
|
children.push(<div>{msg.name}</div>);
|
|
messages.append(<option value={msg.index}>{children}</option>);
|
|
}
|
|
empty.$("span").text = _(msgs.length == 0 ? "No outgoing messages" : "Select outgoing message")
|
|
if (selectLast && msgs.length > 0) messages.value = msgs.length - 1;
|
|
}
|
|
|
|
function showEmpty() {
|
|
content.state.expanded = false;
|
|
empty.state.expanded = false;
|
|
}
|
|
|
|
function getCurrentEvent() {
|
|
if (typeof messages.value !== "number") return null;
|
|
return msgs.find((msg) => msg.index == messages.value);
|
|
}
|
|
|
|
function updateText() {
|
|
var msg = getCurrentEvent();
|
|
if (!msg) return showEmpty();
|
|
msgtext.text = win2unix(msg.text);
|
|
msgtext.state.disabled = msg.kind != 1;
|
|
info.text = msg.info;
|
|
updateChars();
|
|
savemsg.state.disabled = true;
|
|
delmsg.state.disabled = false;
|
|
empty.state.expanded = true;
|
|
content.state.expanded = true;
|
|
}
|
|
|
|
function updateChars() {
|
|
chars.text = _("Chars:") + " " + unix2win(msgtext.value).length;
|
|
}
|
|
|
|
function deleteCurrent() {
|
|
delmsg.state.disabled = true;
|
|
var index = messages.value;
|
|
if (index === undefined || index === null) return;
|
|
CommonNative.DeleteOutboxEvent(index);
|
|
updateList();
|
|
while (index >= msgs.length) index--;
|
|
if (index >= 0) messages.value = index;
|
|
updateText();
|
|
}
|
|
|
|
function openCurrentChat() {
|
|
var msg = getCurrentEvent();
|
|
if (msg) View.share.MainNative.OpenChatWith(msg.UID);
|
|
}
|
|
|
|
updateList();
|
|
|
|
messages.on("change", () => updateText())
|
|
.on("keydown", (e) => {
|
|
if (e.keyCode == Event.VK_DELETE) deleteCurrent();
|
|
else if (e.keyCode == Event.VK_RETURN) openCurrentChat();
|
|
}).on("dblclick", () => openCurrentChat())
|
|
.on("contextmenu", (e) => {
|
|
if (typeof messages.value != "number") return false;
|
|
$("#msendnow").state.disabled = !CommonNative.IsOnline();
|
|
var [x, y] = view.box("position", "cursor");
|
|
document.popup(msgmenu, { x: x, y: y });
|
|
return true;
|
|
}).hasContextMenu = true;
|
|
|
|
msgtext.on("change", () => {
|
|
savemsg.state.disabled = false;
|
|
updateChars();
|
|
});
|
|
|
|
savemsg.on("click", () => {
|
|
savemsg.state.disabled = true;
|
|
var index = messages.value;
|
|
CommonNative.UpdateOutboxText(index, unix2win(msgtext.value));
|
|
updateList();
|
|
messages.value = index;
|
|
updateText();
|
|
});
|
|
|
|
delmsg.on("click", deleteCurrent);
|
|
|
|
$("#autoprocess").value = CommonNative.GetOutboxProcess();
|
|
$("#autoprocess").on("change", () => CommonNative.SetOutboxProcess(this.value));
|
|
|
|
$("#close").on("click", () => view.close());
|
|
|
|
setMenuListener(msgmenu, function() {
|
|
switch (this.id) {
|
|
case "msendnow":
|
|
if (typeof messages.value == "number")
|
|
CommonNative.SendOutboxEvent(messages.value);
|
|
break;
|
|
case "mopenchat": {
|
|
var msg = getCurrentEvent();
|
|
if (msg) View.share.MainNative.OpenChatWith(msg.UID);
|
|
break;
|
|
}
|
|
case "mviewinfo": {
|
|
var msg = getCurrentEvent();
|
|
if (msg) openViewInfo(msg.UID, msg.name);
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
document.on("keydown", (e) => {
|
|
if (e.keyCode == Event.VK_ESCAPE || (e.ctrlKey && e.keyCode == Event.VK_W)) view.close();
|
|
});
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<frameset cols="200dip, *">
|
|
<select type="list" as="integer" id="messages" />
|
|
<splitter/>
|
|
<div class="main">
|
|
<div id="content">
|
|
<h3><span>Information</span></h3>
|
|
<div id="info"></div>
|
|
<h3><span>Message contents</span></h3>
|
|
<div id="chars"></div>
|
|
<textarea uwp disabled id="msgtext" spellcheck="false"></textarea>
|
|
</div>
|
|
<div id="empty"><span></span></div>
|
|
</div>
|
|
</frameset>
|
|
<checkbox uwp id="autoprocess">Process messages when possible</checkbox>
|
|
<div class="buttonpane">
|
|
<button uwp withpic disabled id="delete"><div auto pic="delete"></div><span>Delete</span></button>
|
|
<button uwp withpic disabled id="save"><div auto pic="save"></div><span>Save</span></button>
|
|
<button uwp right id="close"><span>Close</span></button>
|
|
</div>
|
|
<menu id="msgmenu" class="context custom">
|
|
<li id="msendnow"><div auto pic="outbox"></div><span>Send now</span></li>
|
|
<li id="mopenchat"><div auto pic="msg"></div><span>Open chat</span></li>
|
|
<li id="mviewinfo"><div auto pic="info"></div><span>View info</span></li>
|
|
</menu>
|
|
</body>
|
|
</html> |