src/dotnet/APIView/APIViewWeb/Pages/Assemblies/Index.cshtml (140 lines of code) (raw):

@page @model APIViewWeb.Pages.Assemblies.IndexPageModel @using APIViewWeb @using System @using System.Text.RegularExpressions @using APIViewWeb.Helpers @using APIViewWeb.Models @{ ViewData["Title"] = "Reviews"; var userPreference = PageModelHelpers.GetUserPreference(Model._preferenceCache, User); TempData["UserPreference"] = userPreference; } <div class="container-fluid sticky-top nav-cst-theme"> <div class="row mx-5 py-2"> <div class="col-md-10 px-0 d-sm-flex flex-row justify-content-sm-start"> <div class="input-group" id="reviews-table-search-container"> <input type="search" class="form-control" id="reviews-table-search-box" placeholder="Search.. e.g pr:<Pull-Request Number>, package:<Package Name>, author:<Github UserName>" /> <button class="btn btn-outline-primary" id="reviews-search-button" aria-labelledby="reviews-table-search-box" type="button"><i class="fa-solid fa-magnifying-glass"></i></button> </div> </div> <div class="col-md-2 px-0 d-sm-flex flex-row justify-content-sm-end"> @if (userPreference.HideIndexPageOptions.HasValue && userPreference.HideIndexPageOptions == true) { <input type="checkbox" class="btn-check" id="index-right-offcanvas-toggle" autocomplete="off"> } else { <input type="checkbox" checked class="btn-check" id="index-right-offcanvas-toggle" autocomplete="off"> } <label class="btn btn-outline-primary" accesskey="m" for="index-right-offcanvas-toggle"><i class="fa fa-bars"></i>&nbsp;&nbsp;Options</label> </div> </div> </div> @{ var offCanvasClass = " show-right-offcanvas"; var mainContainerClass = " move-main-content-container-left"; if (userPreference.HideIndexPageOptions.HasValue && userPreference.HideIndexPageOptions == true) { offCanvasClass = String.Empty; mainContainerClass = string.Empty; } } <div id="right-offcanvas-menu" class="right-offcanvas@(offCanvasClass)"> <div class="right-offcanvas-menu-content" id="index-offcanvas-menu-content"> <p class="h6">Filters</p> <div class="input-group input-group-sm mb-2"> <span class="input-group-text">Languages</span> <select multiple id="language-filter-select" aria-label="Language Filter"> <partial name="_SelectPickerPartial" model="Model.ReviewsProperties.Languages" /> </select> </div> <div class="input-group input-group-sm mb-2"> <span class="input-group-text">State</span> <select multiple id="state-filter-select" aria-label="State Filter"> <partial name="_SelectPickerPartial" model="Model.ReviewsProperties.State" /> </select> </div> @* Disabling Approval since it has no benefit to users at this point <div class="input-group input-group-sm mb-2"> <span class="input-group-text">Status</span> <select multiple id="status-filter-select" aria-label="Status Filter"> <partial name="_SelectPickerPartial" model="Model.ReviewsProperties.Status" /> </select> </div> *@ <button type="button" class="btn btn-outline-primary btn-sm mt-2" id="reset-filter-button"><i class="fa-solid fa-xmark"></i>&nbsp;&nbsp;Reset Filters</button> <hr class="border"> </div> </div> <div class="container-fluid mb-5@(mainContainerClass)" id="index-main-container"> <div class="modal fade" id="uploadModel" tabindex="-1" role="dialog"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <form asp-page-handler="Upload" method="post" enctype="multipart/form-data" id="review-upload-form"> <div class="modal-header"> <h5 class="modal-title">Create Review</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="container-fluid"> <div class="row"> <div class="form-group mb-3"> <p class="small mb-0">Select Language</p> <select asp-for="Upload.Language" id="review-language-select"> <option selected disabled value="">None Selected</option> @foreach (string lang in UploadModel.SupportedLanguages) { <option value=@lang data-content=@lang>@lang</option> } </select> </div> <div class="input-group mb-3 custom-file-label" id="create-review-via-upload"> <label for="uploadReviewFile" class="input-group-text small mb-0">Select File to Include in API Review</label> <input asp-for="Upload.Files" type="file" class="form-control" id="uploadReviewFile"> </div> <div class="form-group d-none mb-3" id="create-review-via-path"> <input asp-for="Upload.FilePath" class="form-control" type="text" placeholder="Package root e.g https://github.com/Azure/azure-rest-api-specs/specification/cognitiveservices/AnomalyDetector/"> </div> <div class="form-group mb-3 d-none"> <div class="form-check"> <input class="form-check-input" hidden asp-for="Upload.RunAnalysis" checked> <label class="form-check-label" hidden> Run static analysis </label> </div> </div> <div class="form-group mb-3"> <input asp-for="Label" class="form-control" type="text" placeholder="Enter an optional review label"> </div> <div class="form-group"> <partial name="_ReviewUploadHelp" /> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Close</button> <button id="review-upload-submit-btn" class="btn btn-primary"> <i class="fas fa-cloud-upload-alt"></i> Upload </button> </div> </form> </div> </div> </div> <button type="button" class="btn btn-primary" id="create-review-button" data-bs-toggle="modal" data-bs-target="#uploadModel" data-bs-backdrop="false"><small>CREATE</small><br><i class="fas fa-plus"></i><br><small>REVIEW</small></button> <div class="mx-5 row"> @if (!string.IsNullOrEmpty(Model.NotificationMessage)) { <div class="alert alert-warning alert-dismissible fade show mt-1" role="alert"> @Model.NotificationMessage <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div> } <div class="col-md-12" id="reviews-filter-partial"> <partial name="_ReviewsPartial" model="Model.PagedResults" /> </div> </div> </div>