212 lines
4.6 KiB
JavaScript
212 lines
4.6 KiB
JavaScript
function Menu(parentElement)
|
|
{
|
|
this.ParentElement = parentElement;
|
|
this.set_Expanded = function(value)
|
|
{
|
|
switch (value)
|
|
{
|
|
case true:
|
|
{
|
|
System.ClassList.Add(this.ParentElement.parentNode, "Opened");
|
|
break;
|
|
}
|
|
case false:
|
|
{
|
|
System.ClassList.Remove(this.ParentElement.parentNode, "Opened");
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
for (var i = 0; i < this.ParentElement.childNodes.length; i++)
|
|
{
|
|
this.ParentElement.childNodes[i].childNodes[0].addEventListener("click", function(e)
|
|
{
|
|
if (this.parentNode.childNodes.length > 1)
|
|
{
|
|
System.ClassList.Toggle(this.parentNode, "Opened");
|
|
}
|
|
|
|
this.blur();
|
|
|
|
if (this.href == "" || this.href == window.location.href + "#")
|
|
{
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
window.addEventListener("load", function(e)
|
|
{
|
|
var items = document.getElementsByClassName("uwt-menu");
|
|
for (var i = 0; i < items.length; i++)
|
|
{
|
|
if (items[i].NativeObject) continue;
|
|
items[i].NativeObject = new Menu(items[i]);
|
|
}
|
|
});
|
|
|
|
function ContextMenu()
|
|
{
|
|
this.Items = [];
|
|
this.ParentElement = null;
|
|
this.Show = function(x, y, parent)
|
|
{
|
|
ContextMenu.HideAll();
|
|
if (this.ParentElement == null)
|
|
{
|
|
var elem = document.createElement("ul");
|
|
elem.className = "uwt-menu uwt-popup";
|
|
elem.addEventListener("contextmenu", function(e)
|
|
{
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
return false;
|
|
});
|
|
|
|
for (var i = 0; i < this.Items.length; i++)
|
|
{
|
|
this.Items[i].Menu = this;
|
|
|
|
var li = document.createElement("li");
|
|
System.ClassList.Add(li, "uwt-menu-item");
|
|
|
|
var visible = false;
|
|
if (typeof(this.Items[i].Visible) === "function")
|
|
{
|
|
visible = this.Items[i].Visible();
|
|
}
|
|
else if (typeof(this.Items[i].Visible) === "undefined")
|
|
{
|
|
visible = false;
|
|
}
|
|
else
|
|
{
|
|
visible = this.Items[i].Visible;
|
|
}
|
|
|
|
if (visible)
|
|
{
|
|
System.ClassList.Add(li, "uwt-visible");
|
|
}
|
|
else
|
|
{
|
|
System.ClassList.Remove(li, "uwt-visible");
|
|
}
|
|
|
|
if (this.Items[i].ClassName == "MenuItemCommand")
|
|
{
|
|
var elem1 = document.createElement("a");
|
|
if (this.Items[i].TargetURL)
|
|
{
|
|
var targetUrl = this.Items[i].TargetURL;
|
|
if (typeof(targetUrl) === 'function')
|
|
{
|
|
targetUrl = targetUrl();
|
|
}
|
|
elem1.setAttribute("href", targetUrl);
|
|
}
|
|
else
|
|
{
|
|
elem1.setAttribute("href", "#");
|
|
elem1.addEventListener("click", function(e)
|
|
{
|
|
this.NativeObject.Hide();
|
|
this.MenuItem.Execute();
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
return false;
|
|
});
|
|
}
|
|
elem1.innerHTML = this.Items[i].Title;
|
|
elem1.NativeObject = this;
|
|
elem1.MenuItem = this.Items[i];
|
|
li.appendChild(elem1);
|
|
|
|
System.ClassList.Add(li, "uwt-menu-item-command");
|
|
}
|
|
else if (this.Items[i].ClassName == "MenuItemSeparator")
|
|
{
|
|
System.ClassList.Add(li, "uwt-separator");
|
|
}
|
|
else if (this.Items[i].ClassName == "MenuItemHeader")
|
|
{
|
|
System.ClassList.Add(li, "uwt-menu-item-header");
|
|
li.innerHTML = this.Items[i].Title;
|
|
}
|
|
elem.appendChild(li);
|
|
}
|
|
|
|
elem.style.left = x + "px";
|
|
elem.style.top = y + "px";
|
|
|
|
if (parent == null) parent = document.body;
|
|
parent.appendChild(elem);
|
|
this.ParentElement = elem;
|
|
}
|
|
this.ParentElement.className = "uwt-menu uwt-popup";
|
|
|
|
this.ParentElement.offsetWidth = this.ParentElement.offsetWidth; // thanks https://stackoverflow.com/a/24195559
|
|
System.ClassList.Add(this.ParentElement, "uwt-visible");
|
|
};
|
|
this.Hide = function()
|
|
{
|
|
if (this.ParentElement == null) return;
|
|
this.ParentElement.className = "uwt-menu uwt-popup";
|
|
};
|
|
}
|
|
|
|
ContextMenu.HideAll = function()
|
|
{
|
|
var items = document.getElementsByClassName("uwt-menu");
|
|
for (var i = 0; i < items.length; i++)
|
|
{
|
|
if (System.ClassList.Contains(items[i], "uwt-popup"))
|
|
{
|
|
if (!System.ClassList.Contains(items[i], "uwt-visible-always"))
|
|
{
|
|
System.ClassList.Remove(items[i], "uwt-visible");
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
function MenuItemHeader(id, title)
|
|
{
|
|
this.ClassName = "MenuItemHeader";
|
|
this.ID = id;
|
|
this.Title = title;
|
|
this.Visible = true;
|
|
}
|
|
function MenuItemSeparator(id)
|
|
{
|
|
this.ClassName = "MenuItemSeparator";
|
|
this.ID = id;
|
|
this.Visible = true;
|
|
}
|
|
function MenuItemCommand(id, title, onclick)
|
|
{
|
|
this.ClassName = "MenuItemCommand";
|
|
this.ID = id;
|
|
this.Title = title;
|
|
this.OnClientClick = onclick;
|
|
this.Visible = true;
|
|
|
|
this.Execute = function()
|
|
{
|
|
if (this.OnClientClick != null) this.OnClientClick();
|
|
};
|
|
}
|
|
|
|
window.addEventListener("contextmenu", function()
|
|
{
|
|
ContextMenu.HideAll();
|
|
});
|
|
window.addEventListener("mousedown", function()
|
|
{
|
|
ContextMenu.HideAll();
|
|
}); |