SORTING WORKS!

This commit is contained in:
Squidly271 2021-02-21 16:35:39 -05:00
parent 39edcb2a1f
commit e0d83821f0
6 changed files with 134 additions and 123 deletions

View File

@ -159,7 +159,7 @@ $(function(){
// Override the OS switch language function so that CA can save it's current state when switching via the OS
$("#nav-item.LanguageButton").find("a").attr("onclick","CAswitchLanguage('<?=$previousLocale?>')");
$("#title").append("<div class='searchArea'><span id='sortIconArea' style='display:none;'><i class='sortIcons fa fa-sort-alpha-asc enabledIcon ca_staticTips' title='<?tr("Sort By Name Ascending")?>' data-sort='nameUp'></i><i class='sortIcons fa fa-sort-alpha-desc ca_staticTips' title='<?tr("Sort By Name Descending")?>' data-sort='nameDown'></i><i class='sortIcons fa fa-sort-numeric-desc ca_staticTips' title='<?tr("Sort By Downloads")?>' data-sort='downloadsDown'></i><i class='sortIcons fa fa-sort-amount-desc ca_staticTips' title='<?tr("Sort By Trend")?>' data-sort='trendDown'></i><i class='sortIcons fa fa-calendar ca_staticTips' title='<?tr("Sort By Date Added")?>' data-sort='firstSeenDown'></i></span><span id='sortIcon' class='fa ca_toolsView disabledIcon'> <span class='fa-sort-alpha-asc'></span></span>&nbsp;<span id='searchFilter' class='status' style='margin-top:-1rem;'><input type='text' id='searchBox' placeholder='<?tr('Search')?>' autofocus><button class='searchSubmit' style='margin-right:10px' onclick='doSearch(true)'><i id='searchButton' class='fa fa-search fa-lg'></i></button></div>");
$("#title").append("<div class='searchArea'><span id='sortIconArea' style='display:none;'><i class='sortIcons fa fa-sort-alpha-asc enabledIcon ca_staticTips' title='<?tr("Sort By Name Ascending")?>' data-sortBy='Name' data-sortDir='Up'></i><i class='sortIcons fa fa-sort-alpha-desc ca_staticTips' title='<?tr("Sort By Name Descending")?>' data-sortBy='Name' data-sortDir='Down'></i><i class='sortIcons fa fa-sort-numeric-desc ca_staticTips' title='<?tr("Sort By Downloads")?>' data-sortBy='downloads' data-sortDir='Down'></i><i class='sortIcons fa fa-sort-amount-desc ca_staticTips' title='<?tr("Sort By Trend")?>' data-sortBy='trending' data-sortDir='Down'></i><i class='sortIcons fa fa-calendar ca_staticTips' title='<?tr("Sort By Date Added")?>' data-sortBy='FirstSeen' data-sortDir='Down'></i></span><span id='sortIcon' class='fa ca_toolsView disabledIcon'> <span class='fa-sort-alpha-asc'></span></span>&nbsp;<span id='searchFilter' class='status' style='margin-top:-1rem;'><input type='text' id='searchBox' placeholder='<?tr('Search')?>' autofocus><button class='searchSubmit' style='margin-right:10px' onclick='doSearch(true)'><i id='searchButton' class='fa fa-search fa-lg'></i></button></div>");
searchBoxInput = document.getElementById("searchBox");
searchBoxAwesomplete = new Awesomplete(searchBoxInput);
@ -350,17 +350,25 @@ $(function(){
}
});
$(".sortIcons").click(function() {
enableSortIcon(this);
$(".sortIcons").removeClass("enabledIcon");
$(this).addClass("enabledIcon");
data.currentpage = 1;
data.searchActive = false;
changeSortOrder();
$("#sortIconArea").toggle("slow");
var classList = $(this).attr('class').split(/\s+/);
var sortOrder = new Object();
sortOrder.sortBy = $(this).attr("data-sortBy");
sortOrder.sortDir = $(this).attr("data-sortDir");
var classList = $(this).attr('class').split(/\s+/);
$.each(classList, function(index, item) {
if ( item.startsWith("fa-") ) {
$("#sortIcon").html("&nbsp;<span class="+item+"></span>");
}
});
post({action:"changeSortOrder",sortOrder:sortOrder},function() {
changeSortOrder();
$("#sortIconArea").toggle("slow");
});
});
$('.mainArea').on("click",".languageSwitch",function() {
@ -442,7 +450,9 @@ $(function(){
searchBoxAwesomplete.close();
initialStartup = true;
} else {
updateContent();
post({action:"defaultSortOrder"},function() {
updateContent();
});
}
}
});
@ -495,11 +505,6 @@ function updateContent(button) {
});
}
function enableSortIcon(icon) {
$(".sortIcons").removeClass("enabledIcon");
$(icon).addClass("enabledIcon");
}
function enableIcon(icon,enable) {
enable = (enable == "false") ? false : enable;
$(icon).each(function() {
@ -606,17 +611,13 @@ function changeCategory(button,subSwitch) {
}
function changePage(pageNumber) {
var sortOrder = getSortOrder();
if ( data.searchActive ) {
sortOrder = [["sortBy","noSort"]];
}
var selected = data.selected;
data.currentpage = pageNumber;
var oldHeight = $(".ca_templatesDisplay").height();
$(".ca_templatesDisplay").css("height",oldHeight);
hideSortIcons();
post({action:'display_content',sortOrder:sortOrder,pageNumber:pageNumber,selected:selected},function(result) {
post({action:'display_content',pageNumber:pageNumber,selected:selected},function(result) {
updateDisplay(result.display);
$(".ca_templatesDisplay").css("height","auto");
});
@ -720,13 +721,12 @@ function doSearch(button,newSearch) {
return;
}
data.searchActive = true;
var sortOrder = getSortOrder();
if ( "<?=$cfg['dockerSearch']?>" == "yes" && ! dockerNotEnabled && (filter.indexOf(" Repository") < 1) ) {
$('.dockerSearch').show();
} else {
$('.dockerSearch').hide();
}
post({action:'get_content',filter:filter,sortOrder:sortOrder},function(result) {
post({action:'get_content',filter:filter},function(result) {
enableButtons();
updateDisplay(result.display);
data.section = "AppStore";
@ -754,67 +754,23 @@ function refreshDisplay() {
function changeSortOrder(button,buttonClass,previousApps) {
var pageNumber = data.currentpage;
var selected = data.selected;
var sortOrder = getSortOrder();
var startup = false;
if ( button || buttonClass || previousApps) {
data.searchFlag = false;
}
console.log("data");
console.log(data);
/* if ( ! data.searchFlag ) {
sortOrder = [["sortBy","noSort"]];
} */
$(".startupButton").each(function(){
if ($(this).hasClass("selectedMenu")) {
startup = "true";
}
});
post({action:'display_content',sortOrder:sortOrder,pageNumber:pageNumber,selected:selected,startup:startup},function(result) {
post({action:'display_content',pageNumber:pageNumber,selected:selected,startup:startup},function(result) {
updateDisplay(result.display);
});
}
function getSortOrder() {
var sortOrder = new Object();
$(".sortIcons").each(function() {
if ( isIconEnabled(this) ) {
switch ( $(this).data("sort") ) {
case 'nameUp':
sortOrder.sortBy = ["sortBy","Name"];
sortOrder.sortDir = ["sortDir","Up"];
break;
case 'nameDown':
sortOrder.sortBy = ["sortBy","Name"];
sortOrder.sortDir = ["sortDir","Down"];
break;
case 'downloadsDown':
sortOrder.sortBy = ["sortBy","downloads"];
sortOrder.sortDir = ["sortDir","Down"];
break;
case 'trendDown':
sortOrder.sortBy = ["sortBy","trending"];
sortOrder.sortDir = ["sortDir","Down"];
break;
case 'firstSeenDown':
sortOrder.sortBy = ["sortBy","FirstSeen"];
sortOrder.sortDir = ["sortDir","Down"];
break;
}
}
});
if ( ! sortOrder.sortBy ) {
if ( ! isIconEnabled("#sortIcon")) {
sortOrder.sortBy = ["sortBy","noSort"];
} else {
sortOrder.sortBy = ["sortBy","Name"];
sortOrder.sortDir = ["sortDir","Up"];
var sortIcon = $.find(".sortIcons[data-sort='nameUp']");
$(sortIcon).addClass("enabledIcon");
}
}
return [sortOrder.sortBy,sortOrder.sortDir];
}
function getContent(init,category,description,newApp,startupDisplay) {
data.currentpage = 1;
@ -833,13 +789,11 @@ function getContent(init,category,description,newApp,startupDisplay) {
if ( (category == "New") || (category == "All") ) { category = ""; }
var filter = $('#searchBox').val();
var sortOrder = getSortOrder();
if ( ! filter ) {
$('.dockerSearch').hide();
}
post({action:'get_content',filter:filter,category:category,newApp:newApp,sortOrder:sortOrder,startupDisplay:startupDisplay},function(result) {
post({action:'get_content',filter:filter,category:category,newApp:newApp,startupDisplay:startupDisplay},function(result) {
updateDisplay(result.display);
if ( initialize ) {
populateAutoComplete();
}
@ -889,8 +843,7 @@ function dockerSearch(pageNumber) {
enableIcon("#sortIcon",false);
$(".dockerSearch,.multi_installDiv").hide();
$("#Category").html(sprintf(tr("DockerHub Search for %s"),filter)+" <span id='pageNumber'></span>");
var sortOrder = getSortOrder();
post({action:'search_dockerhub',filter:filter,page:pageNumber,sortOrder:sortOrder},function(result) {
post({action:'search_dockerhub',filter:filter,page:pageNumber},function(result) {
updateDisplay(result.display);
});
}
@ -1410,11 +1363,6 @@ function saveState() {
$.cookie("ca_sortIcon",isIconEnabled("#sortIcon"));
$.cookie("ca_filter",$("#searchBox").val());
$.cookie("ca_categoryName",$(".categoryMenuName").html());
$(".sortIcons").each(function() {
if ( isIconEnabled(this) ) {
$.cookie("ca_sortButton",$(this).data("sort"));
}
});
}
}
@ -1444,25 +1392,20 @@ function restoreState() {
var ca_sortIcon = $.cookie("ca_sortIcon");
enableIcon("#sortIcon",ca_sortIcon);
$(".sortIcons").each(function() {
$(this).removeClass("enabledIcon");
post({action:"getSortOrder"},function(sortOrder) {
$(".sortIcons").removeClass("enabledIcon");
$(".sortIcons").each(function() {
if ( ($(this).attr("data-sortBy") == sortOrder.sortBy) && ($(this).attr("data-sortDir") == sortOrder.sortDir) ) {
$(this).addClass("enabledIcon");
var classList = $(this).attr('class').split(/\s+/);
$.each(classList, function(index, item) {
if ( item.startsWith("fa-") ) {
$("#sortIcon").html("&nbsp;<span class="+item+"></span>");
}
});
}
});
});
if ( ! ca_sortIcon || ca_sortIcon == "false" ) {
var selectedSort = "noSort";
var sortIcon = "";
} else {
var selectedSort = $.cookie("ca_sortButton");
var sortIcon = $.find(".sortIcons[data-sort='"+selectedSort+"']");
$(sortIcon).addClass("enabledIcon");
var classList = $(sortIcon).attr('class').split(/\s+/);
}
$.each(classList, function(index, item) {
if ( item.startsWith("fa-") ) {
$("#sortIcon").html("&nbsp;<span class="+item+"></span>");
}
});
populateAutoComplete();
}

View File

@ -62,6 +62,13 @@ if ($caSettings['debugging'] == "yes") {
file_put_contents($caPaths['logging'],"POST CALLED\n".print_r($_POST,true),FILE_APPEND);
}
$sortOrder = readJsonFile($caPaths['sortOrder']);
if ( ! $sortOrder ) {
$sortOrder['sortBy'] = "Name";
$sortOrder['sortDir'] = "Up";
writeJsonFile($caPaths['sortOrder'],$sortOrder);
}
############################################
## ##
## BEGIN MAIN ROUTINES CALLED BY THE HTML ##
@ -153,6 +160,15 @@ switch ($_POST['action']) {
case 'getFavourite':
getFavourite();
break;
case 'changeSortOrder':
changeSortOrder();
break;
case 'getSortOrder':
getSortOrder();
break;
case 'defaultSortOrder':
defaultSortOrder();
break;
###############################################
# Return an error if the action doesn't exist #
###############################################
@ -254,6 +270,14 @@ function DownloadApplicationFeed() {
$o['Category'] = str_replace("Status:Stable","",$o['Category']);
$myTemplates[$i] = $o;
$ApplicationFeed['repositories'][$o['RepoName']]['downloads']++;
$ApplicationFeed['repositories'][$o['RepoName']]['trending'] += $o['trending'];
if ( $ApplicationFeed['repositories'][$o['RepoName']]['FirstSeen'] ) {
if ($o['FirstSeen'] < $ApplicationFeed['repositories'][$o['RepoName']]['FirstSeen'])
$ApplicationFeed['repositories'][$o['RepoName']]['FirstSeen'] = $o['firstSeen'];
} else {
$ApplicationFeed['repositories'][$o['RepoName']]['FirstSeen'] = $o['FirstSeen'];
}
if ( is_array($o['Branch']) ) {
if ( ! $o['Branch'][0] ) {
$tmp = $o['Branch'];
@ -303,6 +327,13 @@ function DownloadApplicationFeed() {
writeJsonFile($caPaths['community-templates-info'],$myTemplates);
writeJsonFile($caPaths['categoryList'],$ApplicationFeed['categories']);
foreach ($ApplicationFeed['repositories'] as &$repo) {
if ( $repo['downloads'] ) {
$repo['trending'] = $repo['trending'] / $repo['downloads'];
}
}
writeJsonFile($caPaths['repositoryList'],$ApplicationFeed['repositories']);
return true;
}
@ -525,7 +556,7 @@ function get_content() {
$filter = getPost("filter",false);
$category = getPost("category",false);
$newApp = filter_var(getPost("newApp",false),FILTER_VALIDATE_BOOLEAN);
$sortOrder = getSortOrder(getPostArray("sortOrder"));
$caSettings['startup'] = getPost("startupDisplay",false);
@unlink($caPaths['repositoriesDisplayed']);
switch ($category) {
@ -587,7 +618,7 @@ function get_content() {
writeJsonFile($caPaths['community-templates-displayed'],$displayApplications);
@unlink($caPaths['community-templates-allSearchResults']);
@unlink($caPaths['community-templates-catSearchResults']);
$sortOrder['sortBy'] = "noSort";
// $sortOrder['sortBy'] = "noSort";
$o['display'] = my_display_apps($displayApplications['community'],"1");
$o['script'] = "$('#templateSortButtons,#sortButtons').hide();enableIcon('#sortIcon',false);";
postReturn($o);
@ -717,7 +748,7 @@ function get_content() {
$searchResults['favNameHit'] = array();
$displayApplications['community'] = array_merge($searchResults['favNameHit'],$searchResults['nameHit'],$searchResults['anyHit']);
$sortOrder['sortBy'] = "noSort";
// $sortOrder['sortBy'] = "noSort";
} else {
usort($display,"mySort");
$displayApplications['community'] = $display;
@ -735,9 +766,9 @@ function get_content() {
@unlink($caPaths['community-templates-catSearchResults']);
}
$o['display'] = display_apps();
if ( count($displayApplications['community']) < 2 )
$o['script'] = "disableSort();";
/* if ( count($displayApplications['community']) < 2 ) {
//$o['script'] = "disableSort();";
} */
postReturn($o);
}
@ -801,15 +832,19 @@ function force_update() {
####################################################################################
function display_content() {
global $caPaths, $caSettings, $DockerClient, $DockerTemplates, $dockerRunning, $sortOrder;
$sortOrder = getSortOrder(getPostArray('sortOrder'));
$pageNumber = getPost("pageNumber","1");
$startup = getPost("startup",false);
$selectedApps = json_decode(getPost("selected",false),true);
$o['display'] = file_exists($caPaths['community-templates-displayed']) ? display_apps($pageNumber,$selectedApps,$startup) : "";
$o['display'] = "";
if ( file_exists($caPaths['community-templates-displayed']) || file_exists($caPaths['repositoriesDisplayed']) ) {
$o['display'] = display_apps($pageNumber,$selectedApps,$startup);
}
$displayedApps = readJsonFile($caPaths['community-templates-displayed']);
if ( ! is_array($displayedApps['community']) || count($displayedApps['community']) < 1)
$o['script'] = "disableSort();";
/* if ( ! is_array($displayedApps['community']) || count($displayedApps['community']) < 1)
$o['script'] = "disableSort();"; */
$currentServer = @file_get_contents($caPaths['currentServer']);
$o['script'] .= "feedWarning('$currentServer');";
postReturn($o);
@ -855,7 +890,6 @@ function search_dockerhub() {
global $caPaths, $caSettings, $DockerClient, $DockerTemplates, $dockerRunning, $sortOrder;
$filter = getPost("filter","");
$pageNumber = getPost("page","1");
$sortOrder = getSortOrder(getPostArray('sortOrder'));
$communityTemplates = readJsonFile($caPaths['community-templates-info']);
$filter = str_replace(" ","%20",$filter);
@ -1108,8 +1142,6 @@ if ( $caSettings['dockerRunning'] ) {
}
}
if ( is_array($displayed) ) {
$sortOrder['sortBy'] = "Name";
$sortOrder['sortDir'] = "Up";
usort($displayed,"mySort");
}
$displayedApplications['community'] = $displayed;
@ -1391,7 +1423,9 @@ function populateAutoComplete() {
$autoComplete[$name] = str_replace("ca ","",$autoComplete[$name]);
if ( startsWith($autoComplete[$name],"binhex ") )
$autoComplete[$name] = str_replace("binhex ","",$autoComplete[$name]);
if ( startsWith($autoComplete[$name],"activ ") )
$autoComplete[$name] = str_replace("activ ","",$autoComplete[$name]);
if ( $template['Plugin'] )
$autoComplete[strtolower($template['Author'])] = $template['Author'];
@ -1670,4 +1704,53 @@ function getFavourite() {
global $caPaths, $caSettings, $DockerClient, $DockerTemplates, $dockerRunning, $sortOrder;
postReturn(["favourite"=>$caSettings['favourite']]);
}
##########################
# Changes the sort order #
##########################
function changeSortOrder() {
global $caPaths, $caSettings, $DockerClient, $DockerTemplates, $dockerRunning, $sortOrder;
$sortOrder = getPostArray("sortOrder");
writeJsonFile($caPaths['sortOrder'],$sortOrder);
if ( is_file($caPaths['community-templates-displayed']) ) {
$displayed = readJsonFile($caPaths['community-templates-displayed']);
usort($displayed['community'],"mySort");
writeJsonFile($caPaths['community-templates-displayed'],$displayed);
}
if ( is_file($caPaths['community-templates-allSearchResults']) ) {
$allSearchResults = readJsonFile($caPaths['community-templates-allSearchResults']);
usort($allSearchResults['community'],"mySort");
writeJsonFile($caPaths['community-templates-allSearchResults'],$allSearchResults);
}
if ( is_file($caPaths['community-templates-catSearchResults']) ) {
$catSearchResults = readJsonFile($caPaths['community-templates-catSearchResults']);
usort($catSearchResults['community'],"mySort");
writeJsonFile($caPaths['community-templates-catSearchResults'],$catSearchResults);
}
if ( is_file($caPaths['repositoriesDisplayed']) ) {
$reposDisplayed = readJsonFile($caPaths['repositoriesDisplayed']);
usort($reposDisplayed['community'],"mySort");
writeJsonFile($caPaths['repositoriesDisplayed'],$reposDisplayed);
}
postReturn(['status'=>"ok"]);
}
############################################
# Gets the sort order when restoring state #
############################################
function getSortOrder() {
global $caPaths, $caSettings, $DockerClient, $DockerTemplates, $dockerRunning, $sortOrder;
postReturn(["sortBy"=>$sortOrder['sortBy'],"sortDir"=>$sortOrder['sortDir']]);
}
function defaultSortOrder() {
global $caPaths, $caSettings, $DockerClient, $DockerTemplates, $dockerRunning, $sortOrder;
$sortOrder['sortBy'] = "Name";
$sortOrder['sortDir'] = "Up";
writeJsonFile($caPaths['sortOrder'],$sortOrder);
postReturn(['status'=>"ok"]);
}
?>

View File

@ -84,15 +84,7 @@ function getPost($setting,$default) {
function getPostArray($setting) {
return $_POST[$setting];
}
function getSortOrder($sortArray) {
if ( ! is_array($sortArray) )
return array();
foreach ($sortArray as $sort) {
$sortOrder[$sort[0]] = $sort[1];
}
return $sortOrder;
}
function var_dump_ret($mixed = null) {
ob_start();
var_dump($mixed);

View File

@ -26,6 +26,7 @@ $caPaths['application-feed-last-updatedBackup'] = "https://s3.amazonaws.com/dnld
$caPaths['appFeedDownloadError'] = $caPaths['tempFiles']."/downloaderror.txt";
$caPaths['categoryList'] = $caPaths['tempFiles']."/categoryList.json";
$caPaths['repositoryList'] = $caPaths['tempFiles']."/repositoryList.json";
$caPaths['sortOrder'] = $caPaths['tempFiles']."/sortOrder.json";
$caPaths['currentServer'] = $caPaths['tempFiles']."/currentServer.txt";
$caPaths['lastUpdated'] = $caPaths['tempFiles']."/lastUpdated.json";
$caPaths['lastUpdated-old'] = $caPaths['tempFiles']."/lastUpdated-old.json";

View File

@ -11,7 +11,7 @@ function display_apps($pageNumber=1,$selectedApps=false,$startup=false) {
if ( is_file($caPaths['repositoriesDisplayed']) ) {
$file = readJsonFile($caPaths['repositoriesDisplayed']);
$startup = true;
//$startup = true;
} else {
if ( is_file($caPaths['community-templates-catSearchResults']) )
$file = readJsonFile($caPaths['community-templates-catSearchResults']);
@ -40,14 +40,6 @@ function my_display_apps($file,$pageNumber=1,$selectedApps=false,$startup=false)
$pinnedApps = readJsonFile($caPaths['pinnedV2']);
$checkedOffApps = arrayEntriesToObject(@array_merge(@array_values($selectedApps['docker']),@array_values($selectedApps['plugin'])));
if ( filter_var($startup,FILTER_VALIDATE_BOOLEAN) )
$sortOrder['sortBy'] = "noSort";
if ( $sortOrder['sortBy'] != "noSort" ) {
if ( $sortOrder['sortBy'] == "Name" )
$sortOrder['sortBy'] = "SortName";
usort($file,"mySort");
}
$displayHeader .= getPageNavigation($pageNumber,count($file),false)."<br>";