Merge branch 'master' of gitea.azcona-becker.net:alcetech/phast

This commit is contained in:
Michael Becker 2024-05-28 16:21:34 -04:00
commit 9c79cfd2ed
3 changed files with 175 additions and 7 deletions

View File

@ -1,7 +1,159 @@
function DropDownWrapper(parentElement) function DropDownWrapper(parentElement)
{ {
this.ParentElement = parentElement; this.ParentElement = parentElement;
this.ParentContainer = this.ParentElement.parentElement;
this.SelectElement = this.ParentElement;
this.ShowPopupMenu = function()
{
for (var i = 0; i < this.SelectElement.options.length; i++)
{
if (this.InputElement.value == "" || this.SelectElement.options[i].label.toLowerCase().indexOf(this.InputElement.value.toLowerCase()) != -1)
{
System.ClassList.Add(this.SelectElement.options[i].li, "uwt-visible");
}
else
{
System.ClassList.Remove(this.SelectElement.options[i].li, "uwt-visible");
}
}
System.ClassList.Add(this.MenuElement, "uwt-visible");
};
this.HidePopupMenu = function()
{
System.ClassList.Remove(this.MenuElement, "uwt-visible");
};
var div = document.createElement("div");
div.className = "uwt-combobox";
div.ni = this;
div.tabIndex = 0;
this.ParentElement.replaceWith(div);
div.appendChild(this.SelectElement);
var input = document.createElement("input");
input.id = this.SelectElement.id + "_input";
input.ni = this;
input.type = "text";
input.addEventListener("focus", function()
{
this.ni.InputElement._prev_value = this.ni.InputElement.value;
this.ni.InputElement.value = "";
this.ni.ShowPopupMenu();
});
input.addEventListener("blur", function()
{
this.ni.InputElement.value = this.ni.InputElement._prev_value;
if (!this.ni.SelectElement.hasAttribute("multiple"))
{
this.ni.HidePopupMenu();
}
});
input.addEventListener("keydown", function(e)
{
if (e.keyCode == KeyboardKeys.Enter)
{
this.__accepted = true;
//this.ni.SetValue(this.ni.GetHighlightedOption().value);
this.ni.HidePopupMenu();
this.parentElement.focus();
e.preventDefault();
e.stopPropagation();
return false;
}
});
input.addEventListener("keyup", function(e)
{
if (this.__accepted == true)
{
this.__accepted = false;
e.preventDefault();
e.stopPropagation();
return false;
}
if (e.keyCode == KeyboardKeys.Escape)
{
this.ni.HidePopupMenu();
}
else
{
this.ni.ShowPopupMenu();
}
});
div.appendChild(input);
this.InputElement = input;
var ul = document.createElement("ul");
this.MenuElement = ul;
ul.className = "uwt-menu uwt-popup";
for (var i = 0; i < this.SelectElement.options.length; i++)
{
var li = document.createElement("li");
li.className = "uwt-menu-item uwt-menu-item-command uwt-visible";
this.SelectElement.options[i].li = li;
var a = document.createElement("a");
a.href = "#";
var spanTitle = document.createElement("span");
spanTitle.className = "uwt-title";
spanTitle.innerHTML = this.SelectElement.options[i].label;
a.appendChild(spanTitle);
var spanDescription = document.createElement("span");
spanDescription.className = "uwt-description";
spanDescription.innerHTML = "";
a.appendChild(spanDescription);
if (this.SelectElement.options[i].hasAttribute("data-description"))
{
spanDescription.innerHTML = this.SelectElement.options[i].getAttribute("data-description");
}
a.option = this.SelectElement.options[i];
a.ni = this;
a.addEventListener("click", function()
{
this.ni.InputElement.value = this.option.label;
if (this.ni.SelectElement.hasAttribute("multiple"))
{
}
else
{
this.ni.SelectElement.value = this.option.value;
for (var j = 0; j < this.ni.MenuElement.children.length; j++)
{
if (this.ni.MenuElement.children[j].children[0] == this)
{
System.ClassList.Add(this.ni.MenuElement.children[j], "uwt-selected");
}
else
{
System.ClassList.Remove(this.ni.MenuElement.children[j], "uwt-selected");
}
}
System.ClassList.Remove(this.ni.MenuElement, "uwt-visible");
}
});
li.appendChild(a);
if (i == this.SelectElement.selectedIndex)
{
this.InputElement.value = a.option.label;
System.ClassList.Add(li, "uwt-selected");
}
ul.appendChild(li);
}
div.appendChild(ul);
this.ParentElement.style.display = "none";
} }
function DropDown(id) function DropDown(id)

View File

@ -271,7 +271,7 @@ function Window(parentElement)
} }
var Window = this.ParentElement; var Window = this.ParentElement;
Window.className = "Window Visible"; Window.className = "uwt-window uwt-visible";
if (this.mvarContentURL != null) if (this.mvarContentURL != null)
{ {
@ -405,7 +405,7 @@ window.addEventListener("mouseup", function(e)
}); });
window.addEventListener("load", function(e) window.addEventListener("load", function(e)
{ {
var items = document.getElementsByClassName("Window"); var items = document.getElementsByClassName("uwt-window");
for (var i = 0; i < items.length; i++) for (var i = 0; i < items.length; i++)
{ {
items[i].NativeObject = new Window(items[i]); items[i].NativeObject = new Window(items[i]);

View File

@ -23,6 +23,11 @@
public $ContentControls; public $ContentControls;
public $FooterControls; public $FooterControls;
public $Content;
private $__Content;
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
@ -30,6 +35,7 @@
$this->TagName = "div"; $this->TagName = "div";
$this->ClassList[] = "uwt-window"; $this->ClassList[] = "uwt-window";
$this->ParseChildElements = true; $this->ParseChildElements = true;
$this->__Content = null;
} }
protected function OnInitialize() protected function OnInitialize()
@ -40,6 +46,9 @@
protected function RenderBeginTag() protected function RenderBeginTag()
{ {
$this->__Content = $this->Content;
$this->Content = null;
switch($this->HorizontalAlignment) switch($this->HorizontalAlignment)
{ {
case HorizontalAlignment::Left: case HorizontalAlignment::Left:
@ -89,11 +98,18 @@
$divInnerContent = new HTMLControl("div"); $divInnerContent = new HTMLControl("div");
$divInnerContent->ClassList[] = "uwt-content"; $divInnerContent->ClassList[] = "uwt-content";
if ($this->__Content !== null)
{
$divInnerContent->Content = $this->__Content;
}
else
{
foreach ($this->ContentControls as $ctl) foreach ($this->ContentControls as $ctl)
{ {
$divInnerContent->Controls[] = $ctl; $divInnerContent->Controls[] = $ctl;
} }
$divContent->Controls[] = $divInnerContent; $divContent->Controls[] = $divInnerContent;
}
$divLoading = new HTMLControl("div"); $divLoading = new HTMLControl("div");
$divLoading->ClassList[] = "uwt-loading"; $divLoading->ClassList[] = "uwt-loading";