diff --git a/routes/project.ts b/routes/project.ts index 52bcb4125d42b98286901cd71b13d53393bb65ae..d7e86a429ec9091088ff73b350266091693a4235 100644 --- a/routes/project.ts +++ b/routes/project.ts @@ -76,6 +76,7 @@ module.exports = function (app:any, lang:string) { let projectArr = [] let isProject = true let firstId = 0 + let orderKeyword = req.query.sort while (isProject == true) { let projects = await gitlab.getProjects(100, firstId) @@ -100,12 +101,38 @@ module.exports = function (app:any, lang:string) { name: projectData[i].name, weburl: projectData[i].web_url, desc: projectData[i].description, - keywords: projectData[i].tag_list + keywords: projectData[i].tag_list, + createdAt: projectData[i].created_at, + lastUpdatedAt: projectData[i].last_activity_at } projectArr.push(project) } firstId = projectData[projectData.length-1].id } + + // MLAB-576 + if (orderKeyword == "created_at") { + projectArr.sort((a, b) => { + let aDate:any = new Date(a.createdAt) + let bDate:any = new Date(b.createdAt) + return bDate - aDate + }); + } else if (orderKeyword == "updated_at") { + projectArr.sort((a, b) => { + let aDate:any = new Date(a.lastUpdatedAt) + let bDate:any = new Date(b.lastUpdatedAt) + return bDate - aDate + }); + } else { // default, sorted by name + projectArr.sort((a, b) => { + let fa = a.name.toLowerCase(), + fb = b.name.toLowerCase(); + + if (fa < fb) return -1; + if (fa > fb) return 1; + return 0; + }); + } } res.render(lang+'/project/projectList', { @@ -118,6 +145,7 @@ module.exports = function (app:any, lang:string) { let pagesArr = [] let isProject = true let firstId = 0 + let orderKeyword = req.query.sort while (isProject == true) { let projects = await gitlab.getProjects(100, firstId) @@ -151,13 +179,40 @@ module.exports = function (app:any, lang:string) { name: pagesData[i].name, weburl: pagesData[i].web_url, desc: pagesData[i].description, - keywords: pagesData[i].tag_list + keywords: pagesData[i].tag_list, + createdAt: pagesData[i].created_at, + lastUpdatedAt: pagesData[i].last_activity_at } pagesArr.push(pages) } } firstId = pagesData[pagesData.length-1].id } + + // MLAB-576 + if (orderKeyword == "created_at") { + pagesArr.sort((a, b) => { + let aDate:any = new Date(a.createdAt) + let bDate:any = new Date(b.createdAt) + return bDate - aDate + }); + } else if (orderKeyword == "updated_at") { + pagesArr.sort((a, b) => { + let aDate:any = new Date(a.lastUpdatedAt) + let bDate:any = new Date(b.lastUpdatedAt) + return bDate - aDate + }); + } else { // default, sorted by name + pagesArr.sort((a, b) => { + let fa = a.name.toLowerCase(), + fb = b.name.toLowerCase(); + + if (fa < fb) return -1; + if (fa > fb) return 1; + return 0; + }); + } + } res.render(lang+'/project/pagesList', { diff --git a/views/DE/project/pagesList.pug b/views/DE/project/pagesList.pug index c6158220f1d1ae9f9abec32b4662f371b2bb158c..710308d6429958f60c253d881a171604585f1fd6 100644 --- a/views/DE/project/pagesList.pug +++ b/views/DE/project/pagesList.pug @@ -38,11 +38,14 @@ html(lang="de") div(class="container") p#pagesCounter #{pages.length} Projektinformationen werden angezeigt div(class="pt-4 pb-4 form-row") - div(class="form-group col-md-12") + div(class="form-group col-md-10") input(id="searchInput", class="form-control form-control-lg", type="text", placeholder="Suchen Sie hier nach Themen und Projekten", onkeyup="searchFunction()") - //div(class="form-group col-md-2") - select(class="form-control") - option uncategorized + div(class="form-group col-md-2") + select#sortingSelect(class="form-control form-control-lg") + option(value="" disabled) Sort by + option(value="name") Name + option(value="created_at") Last created + option(value="updated_at") Last updated | <div class="row"> for item in pages div(class="card-deck py-4 col-sm") @@ -97,4 +100,28 @@ html(lang="de") } document.getElementById("pagesCounter").innerHTML = counterBlock+" Projektinformationen werden angezeigt" - } \ No newline at end of file + } + + $("#sortingSelect").change(function() { + window.location.replace('/projektinformationen?sort='+$("#sortingSelect").val()) + }); + function getQueryStringParams(params, url) { + // first decode URL to get readable data + var href = decodeURIComponent(url || window.location.href); + // regular expression to get value + var regEx = new RegExp('[?&]' + params + '=([^&#]*)', 'i'); + var value = regEx.exec(href); + // return the value if exist + return value ? value[1] : null; + } + function setSortSelect() { + let sortKeyword = getQueryStringParams('sort', window.location.href) + if (sortKeyword == "created_at") { + $("#sortingSelect").val("created_at") + } else if(sortKeyword == "updated_at") { + $("#sortingSelect").val("updated_at") + } else { + $("#sortingSelect").val("name") + } + } + setSortSelect() \ No newline at end of file diff --git a/views/DE/project/projectList.pug b/views/DE/project/projectList.pug index d6fbe790a233ee03740e9d2d75f26d65ab0ee6f4..fe9323faa729760e580924b4a5bf5db7f6e5ca0f 100644 --- a/views/DE/project/projectList.pug +++ b/views/DE/project/projectList.pug @@ -38,11 +38,14 @@ html(lang="de") div(class="container") p#projectCounter #{project.length} Projektdaten werden angezeigt div(class="pt-4 pb-4 form-row") - div(class="form-group col-md-12") + div(class="form-group col-md-10") input(id="searchInput", class="form-control form-control-lg", type="text", placeholder="Suchen Sie hier nach Themen und Projekten", onkeyup="searchFunction()") - //div(class="form-group col-md-2") - select(class="form-control") - option uncategorized + div(class="form-group col-md-2") + select#sortingSelect(class="form-control form-control-lg") + option(value="" disabled) Sort by + option(value="name") Name + option(value="created_at") Last created + option(value="updated_at") Last updated | <div class="row"> for item in project div(class="card-deck py-4 col-sm") @@ -97,4 +100,28 @@ html(lang="de") } document.getElementById("projectCounter").innerHTML = counterBlock+" Projektdaten werden angezeigt" - } \ No newline at end of file + } + + $("#sortingSelect").change(function() { + window.location.replace('/projektdaten?sort='+$("#sortingSelect").val()) + }); + function getQueryStringParams(params, url) { + // first decode URL to get readable data + var href = decodeURIComponent(url || window.location.href); + // regular expression to get value + var regEx = new RegExp('[?&]' + params + '=([^&#]*)', 'i'); + var value = regEx.exec(href); + // return the value if exist + return value ? value[1] : null; + } + function setSortSelect() { + let sortKeyword = getQueryStringParams('sort', window.location.href) + if (sortKeyword == "created_at") { + $("#sortingSelect").val("created_at") + } else if(sortKeyword == "updated_at") { + $("#sortingSelect").val("updated_at") + } else { + $("#sortingSelect").val("name") + } + } + setSortSelect() \ No newline at end of file