Browse Source

Live on demand domain search.

FusionPBX 2 years ago
parent
commit
d9d1d6f6b8
1 changed files with 95 additions and 66 deletions
  1. 95 66
      themes/default/template.php

+ 95 - 66
themes/default/template.php

@@ -298,6 +298,8 @@
 				$('#domains_hide').on('click', function() { hide_domains(); });
 
 				function show_domains() {
+					search_domains('domains_list');
+
 					$('#domains_visible').val(1);
 					var scrollbar_width = (window.innerWidth - $(window).width()); //gold: only solution that worked with body { overflow:auto } (add -ms-overflow-style: scrollbar; to <body> style for ie 10+)
 					if (scrollbar_width > 0) {
@@ -308,7 +310,7 @@
 					$(document).scrollTop(0);
 					$('#domains_container').show();
 					$('#domains_block').animate({marginRight: '+=300'}, 400, function() {
-						$('#domains_filter').trigger('focus');
+						$('#domains_search').trigger('focus');
 					});
 				}
 
@@ -316,8 +318,7 @@
 					$('#domains_visible').val(0);
 					$(document).ready(function() {
 						$('#domains_block').animate({marginRight: '-=300'}, 400, function() {
-							$('#domains_filter').val('');
-							domain_search($('#domains_filter').val());
+							$('#domains_search').val('');
 							$('.navbar').css('margin-right','0'); //restore navbar margin
 							$('#domains_container').css('right','0'); //domain container right position
 							$('#domains_container').hide();
@@ -556,7 +557,6 @@
 			});
 			{/literal}
 
-
 		//link list rows
 			{literal}
 			$('.tr_hover tr,.list tr').each(function(i,e) {
@@ -1017,6 +1017,94 @@
 	{*//session timer *}
 		{$session_timer}
 
+	{*//domain selector *}
+	function search_domains(element_id) {
+		var xhttp = new XMLHttpRequest();
+		xhttp.onreadystatechange = function() {
+			//if (this.readyState == 4 && this.status == 200) {
+			//	document.getElementById(element_id).innerHTML = this.responseText;
+			//}
+
+			//remove current options
+			document.getElementById(element_id).innerHTML = '';
+
+			if (this.readyState == 4 && this.status == 200) {
+
+				//create the json object from the response
+				obj = JSON.parse(this.responseText);
+
+				//update the domain count
+				document.getElementById('domain_count').innerText = '('+ obj.length +')';
+
+				//add new options from the json results
+				for (var i=0; i < obj.length; i++) {
+					
+					//get the variables
+					domain_uuid = obj[i].domain_uuid;
+					domain_name = obj[i].domain_name;
+					if (obj[i].domain_description != null) {
+					//	domain_description = DOMPurify.sanitize(obj[i].domain_description);
+					}
+
+					//create a div element
+					var div = document.createElement('div');
+
+					//add a div title
+					div.title = obj[i].domain_name;
+
+					//add a css class
+					div.classList.add("domains_list_item");
+
+					//alternate the background color
+					if(i%2==0) {
+						div.style.background = '{$domain_selector_background_color_1}';
+					}
+					else {
+						div.style.background = '{$domain_selector_background_color_2}';
+					}
+
+					//set the active domain style 
+					if ('{$domain_uuid}' == obj[i].domain_uuid) {
+						div.style.background = '{$domain_active_background_color}';
+						div.style.fontWeight = 'bold';
+						//div.classList.add("domains_list_item_active");
+						//var item_description_class = 'domain_active_list_item_description';
+					}
+					else {
+						//div.classList.add("domains_list_item_inactive");
+						//var item_description_class = 'domain_inactive_list_item_description';
+					}
+					
+					link_label = obj[i].domain_name;
+					if (obj[i].domain_description != null) {
+						link_label += ' - ' + obj[i].domain_description;
+					}
+					var a_tag = document.createElement('a');
+					a_tag.setAttribute('href','{$domains_app_path}?domain_uuid='+obj[i].domain_uuid+'&domain_change=true');
+					a_tag.innerText = link_label;
+					div.appendChild(a_tag);
+
+					//div.innerHTML = '<a href="{$domains_app_path}?domain_uuid='+obj[i].domain_uuid+'&domain_change=true">'+obj[i].domain_name+'</a> ';
+					//if (obj[i].domain_description != null) {
+					//	div.innerHTML += '<span class="domain_list_item_description" title="'+obj[i].domain_description+'"> - '+obj[i].domain_description+'</span>';
+					//}
+
+					document.getElementById(element_id).appendChild(div);
+				}
+			}
+		};
+		search = document.getElementById('domains_search');
+		if (search.value) {
+			//xhttp.open("GET", "/core/domains/domain_list.php?search="+search.value, true);
+			xhttp.open("GET", "/core/domains/domain_json.php?search="+search.value, true);
+		}
+		else {
+			//xhttp.open("GET", "/core/domains/domain_list.php", true);
+			xhttp.open("GET", "/core/domains/domain_json.php", true);
+		}
+		xhttp.send();
+	}
+	{*//domain selector *}
 	</script>
 
 </head>
@@ -1033,70 +1121,11 @@
 				<div id='domains_block'>
 					<div id='domains_header'>
 						<input id='domains_hide' type='button' class='btn' style='float: right' value="{$text.theme_button_close}">
-						<a id='domains_title' href='{$domains_app_path}'>{$text.theme_title_domains} <span style='font-size: 80%;'>({$domain_count})</span></a>
+						<a id='domains_title' href='{$domains_app_path}'>{$text.theme_title_domains} <span id='domain_count' style='font-size: 80%;'></span></a>
 						<br><br>
-						<input type='text' id='domains_filter' class='formfld' style='margin-left: 0; min-width: 100%; width: 100%;' placeholder="{$text.theme_label_search}" onkeyup='domain_search(this.value)'>
-					</div>
-					<div id='domains_list'>
-						{foreach $domains as $row}
-							{if $row.domain_enabled}
-								{*//alternate background colors of inactive domains *}
-									{if $background_color == $domain_selector_background_color_1}
-										{$background_color=$domain_selector_background_color_2}
-									{else}
-										{$background_color=$domain_selector_background_color_1}
-									{/if}
-								{*//set active domain color *}
-									{if $domain_active_background_color != ''}
-										{if $row.domain_uuid == $domain_uuid}{$background_color=$domain_active_background_color}{/if}
-									{/if}
-								{*//active domain text hover color *}
-									{if $settings.theme.domain_active_text_color_hover != '' && $row.domain_uuid == $domain_uuid}
-										<div id='{$row.domain_name}' class='domains_list_item_active' style='background-color: {$background_color}' onclick="document.location.href='{$domains_app_path}?domain_uuid={$row.domain_uuid}&domain_change=true';">
-									{elseif $settings.theme.domain_inactive_text_color_hover != '' && $row.domain_uuid != $domain_uuid}
-										<div id='{$row.domain_name}' class='domains_list_item_inactive' style='background-color: {$background_color}' onclick="document.location.href='{$domains_app_path}?domain_uuid={$row.domain_uuid}&domain_change=true';">
-									{else}
-										<div id='{$row.domain_name}' class='domains_list_item' style='background-color: {$background_color}' onclick="document.location.href='{$domains_app_path}?domain_uuid={$row.domain_uuid}&domain_change=true';">
-									{/if}
-								{*//domain link *}
-									<a href='{$domains_app_path}?domain_uuid={$row.domain_uuid}&domain_change=true' {if $row.domain_uuid == $domain_uuid}style='font-weight: bold;'{/if}>{$row.domain_name}</a>
-								{*//domain description *}
-									{if $row.domain_description != ''}
-										{*//active domain description text color *}
-											{if $settings.theme.domain_active_desc_text_color != '' && $row.domain_uuid == $domain_uuid}
-												<span class='domain_active_list_item_description' title="{$row.domain_description}"> - {$row.domain_description}</span>
-										{*//inactive domains description text color *}
-											{elseif $settings.theme.domain_inactive_desc_text_color != '' && $row.domain_uuid != $domain_uuid}
-												<span class='domain_inactive_list_item_description' title="{$row.domain_description}"> - {$row.domain_description}</span>
-										{*//default domain description text color *}
-											{else}
-												<span class='domain_list_item_description' title="{$row.domain_description}"> - {$row.domain_description}</span>
-											{/if}
-									{/if}
-								</div>
-								{$ary_domain_names[]=$row.domain_name}
-								{$ary_domain_descs[]=$row.domain_description|replace:'"':'\"'}
-							{/if}
-						{/foreach}
+						<input type='text' id='domains_search' class='formfld' style='margin-left: 0; min-width: 100%; width: 100%;' placeholder="{$text.theme_label_search}" onkeyup="search_domains('domains_list');">
 					</div>
-
-					<script>
-						{literal}
-						var domain_names = new Array("{/literal}{'","'|implode:$ary_domain_names}{literal}");
-						var domain_descs = new Array("{/literal}{'","'|implode:$ary_domain_descs}{literal}");
-						function domain_search(criteria) {
-							for (var x = 0; x < domain_names.length; x++) {
-								if (domain_names[x].toLowerCase().match(criteria.toLowerCase()) || domain_descs[x].toLowerCase().match(criteria.toLowerCase())) {
-									document.getElementById(domain_names[x]).style.display = '';
-								}
-								else {
-									document.getElementById(domain_names[x]).style.display = 'none';
-								}
-							}
-						}
-						{/literal}
-					</script>
-
+					<div id='domains_list'></div>
 				</div>
 			</div>