//===----------------------------------------------------------------------===//
//
// This source file is part of the swift-nio-irc open source project
//
// Copyright (c) 2018 ZeeZide GmbH. and the swift-nio-irc project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of SwiftNIOIRC project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//
const SidebarVC = function(onTargetChange) {
const self = this;
self.onTargetChange = onTargetChange;
self.activeTarget = "server";
self.idPrefix = "";
self.loadView = function(parent) {
self.view = parent.querySelector("aside");
self.channeList = self.view.querySelector("#channelList");
self.queryList = self.view.querySelector("#queryList");
document.getElementById("server").addEventListener("click", function(e) {
e.preventDefault()
self.selectTarget("Server");
});
}
self.setNick = function(newNick) {
const nickView = self.view.querySelector("aside .info .username");
nickView.innerText = newNick;
};
self.selectTarget = function(newTarget) {
if (self.activeTarget === newTarget) { return }
self.view.querySelectorAll("section li").forEach(function(item) {
item.classList.remove('selected');
});
const lc = newTarget.toLowerCase();
const selection = document.getElementById(self.idPrefix + lc);
if (selection !== null) selection.classList.add('selected');
self.activeTarget = lc;
if (self.onTargetChange !== undefined)
self.onTargetChange(newTarget);
};
self.updateUnreadCount = function(target, count) {
const lc = target.toLowerCase();
const targetView = document.getElementById(self.idPrefix + lc);
if (targetView === null) return;
const countView = targetView.querySelector(".unreadcount");
if (countView === null) return;
if (count > 0) countView.innerText = "(" + count + ")"
else countView.innerText = "";
};
self.addTargetView = function(list, newTarget) {
const elementID = self.idPrefix + newTarget.toLowerCase();
if (document.getElementById(elementID))
return;
const childView = document.createElement("li")
childView.innerHTML = `
`;
childView.setAttribute("id", elementID);
const nameView = childView.querySelector(".name");
nameView.innerText = newTarget;
list.appendChild(childView);
childView.addEventListener("click", function(e) {
e.preventDefault()
self.selectTarget(newTarget);
});
};
self.removeTargetView = function(target) {
const lc = target.toLowerCase();
const targetView = document.getElementById(self.idPrefix + lc);
if (targetView === null) return;
targetView.parentNode.removeChild(targetView);
if (self.activeTarget === lc)
self.selectTarget("server");
};
self.removeChannelView = self.removeTargetView;
self.addChannelView = function(channel, select) {
self.addTargetView(self.channeList, channel);
self.view.querySelector("section.channels.list")
.classList.remove("hidden");
if (select) self.selectTarget(channel);
};
self.addQueryView = function(user, select) {
self.addTargetView(self.queryList, user);
self.view.querySelector("section.queries.list")
.classList.remove("hidden");
if (select) self.selectTarget(user);
};
};