Skip to content

Commit

Permalink
Merge pull request #375 from uclibs/bug/multi_value
Browse files Browse the repository at this point in the history
Bug/multi value
  • Loading branch information
Janell-Huyck authored Jul 25, 2024
2 parents da9b4dd + cf24615 commit 64bc907
Show file tree
Hide file tree
Showing 15 changed files with 504 additions and 604 deletions.
35 changes: 28 additions & 7 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,49 @@
name: CI GitHub Action
on: "push"

#permissions:
# contents: read
on: push

jobs:
test:
runs-on: ubuntu-latest
services:
selenium:
image: selenium/standalone-chrome
ports:
- 4444:4444

steps:
- uses: actions/checkout@v3

- name: Set up Ruby
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
# change this to (see https://github.com/ruby/setup-ruby#versioning):
uses: ruby/setup-ruby@v1
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
ruby-version: '3.3.3' # or your preferred Ruby version
bundler-cache: true

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y xvfb libnss3-dev
gem install bundler
bundle install
- name: Run rubocop
run: |
bundle exec rubocop
- name: Run tests
run: bundle exec rake
env:
DISPLAY: :99.0
run: |
Xvfb :99 -ac &
bundle exec rspec
- name: Coveralls
uses: coverallsapp/github-action@v2

- name: Brakeman linter
run: bundle exec brakeman --no-exit-on-warn --no-exit-on-error

- name: 'Run Bundler Audit'
run: bundle exec bundler-audit

17 changes: 17 additions & 0 deletions app/assets/javascripts/filtermanagement.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Specific to software_records.html.erb
function clearFilters() {
document.getElementById("vendor-record-filter").style.display = "none";
document.getElementById("software-type-filter").style.display = "none";
var loaded = window.location.host;
window.location = "software_records";
}

function handleRadio(myRadio) {
if(myRadio.value === "vendor_records") {
document.getElementById("vendor-record-filter").style.display = "block";
document.getElementById("software-type-filter").style.display = "none";
} else {
document.getElementById("vendor-record-filter").style.display = "none";
document.getElementById("software-type-filter").style.display = "block";
}
}
4 changes: 4 additions & 0 deletions app/assets/javascripts/inputsanitization.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
var createdbyfield = document.getElementsByClassName('regex-createdby')[0];
createdbyfield.onkeyup = function() {
createdbyfield.value = createdbyfield.value.replace(/[^a-zA-Z0-9 ]/, '');
}
78 changes: 78 additions & 0 deletions app/assets/javascripts/multivalueinputs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
window.onload = function() {
window.counts = {

developers: window.counts?.developers || 1,
tech_leads: window.counts?.tech_leads || 1,
departments: window.counts?.departments || 1,
product_owners: window.counts?.product_owners || 1,
admin_users: window.counts?.admin_users || 1

};
};

function add(name, value) {
var count = window.counts[name]++;
var elementId = name + count;
var inputId = "software_record_" + name + "_" + count;

var element = document.createElement("div");
element.className = "input-group mt-2";
element.id = elementId;

var inputElement = document.createElement("input");
inputElement.type = "text";
inputElement.required = true;
inputElement.name = "software_record[" + name + "][]";
inputElement.id = inputId; // Ensure unique ID for each input element
inputElement.className = "form-control";
if (value != "") {
inputElement.value = value;
}
element.appendChild(inputElement);

var inputGroupAppend = document.createElement("div");
inputGroupAppend.className = "input-group-append btnRemove";
element.appendChild(inputGroupAppend);

var spanElement = document.createElement("span");
spanElement.className = "input-group-text";
inputGroupAppend.appendChild(spanElement);

var removeButton = document.createElement("i");
removeButton.className = "fas fa-minus remove";
removeButton.innerHTML = " Delete";
spanElement.appendChild(removeButton);

// Update the onclick handler to directly remove the parent element
inputGroupAppend.onclick = function() {
element.remove();
};

var valued = "multiple_" + name;
var multiValued = document.getElementById(valued);
multiValued.appendChild(element);
}

document.getElementById("btnAddProductOwners").onclick = function() {
add("product_owners", "");
};

document.getElementById("btnAddAdminUsers").onclick = function() {
add("admin_users", "");
};

document.getElementById("btnAddDepartments").onclick = function() {
add("departments", "");
};

document.getElementById("btnAddDevelopers").onclick = function() {
add("developers", "");
};

document.getElementById("btnAddTechLeads").onclick = function() {
add("tech_leads", "");
};

function remove(id) {
document.getElementById(id).remove();
}
11 changes: 11 additions & 0 deletions app/assets/javascripts/navigation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
function openNav() {
document.getElementById("mySidenav").style.visibility = "visible";
document.getElementById("mySidenav").style.width = "250px";
document.getElementById("main").style.marginLeft = "250px";
}

function closeNav() {
document.getElementById("mySidenav").style.visibility = "hidden";
document.getElementById("mySidenav").style.width = "0";
document.getElementById("main").style.marginLeft = "0";
}
153 changes: 24 additions & 129 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -6,138 +6,33 @@
<%= csp_meta_tag %>
<%= favicon_link_tag asset_path('favicon.ico'), :rel => 'icon', :type => 'image/x-icon' %>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-REHJTs1r2ErKBuJB0fCK99gCYsVjwxHrSU0N7I1zl9vZbggVJXRMsv/sLlOAGb4M" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-REHJTs1r2ErKBuJB0fCK99gCYsVjwxHrSU0N7I1zl9vZbggVJXRMsv/sLlOAGb4M"
crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css">
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>

<body>
<%= render 'shared/dashboard_menu' %>
<div id="main">
<%= render 'shared/dashboard_header' %>
<% if current_user %><div id="pillSideNav"><span id="dashboard-open" onclick="openNav()" style="background-color: #E00122; color: white;">Menu &#9776;</span></div><% end %>
<%= yield %>
<%= alerts %>
<% if @controller == "users" %>
<% %>
<% elsif @controller!=("front") %>
<%= render 'shared/application_footer' %>
<% end %>
</div>
<%= render 'shared/dashboard_menu' %>
<div id="main">
<%= render 'shared/dashboard_header' %>
<% if current_user %>
<div id="pillSideNav">
<span id="dashboard-open" onclick="openNav()" style="background-color: #E00122; color: white;">Menu &#9776;</span>
</div>
<% end %>
<%= yield %>
<%= alerts %>
<% if @controller == "users" %>
<% %>
<% elsif @controller!=("front") %>
<%= render 'shared/application_footer' %>
<% end %>
</div>
<%= javascript_include_tag 'navigation' %>
<%= javascript_include_tag 'filtermanagement' %>
<%= javascript_include_tag 'inputsanitization' %>
<%= javascript_include_tag 'multivalueinputs' %>
</body>

<script>
function openNav() {
document.getElementById("mySidenav").style.visibility = "visible";
document.getElementById("mySidenav").style.width = "250px";
document.getElementById("main").style.marginLeft = "250px";
}

function closeNav() {
document.getElementById("mySidenav").style.visibility = "hidden";
document.getElementById("mySidenav").style.width = "0";
document.getElementById("main").style.marginLeft= "0";
}

var dropdown = document.getElementsByClassName("dropdown-btn");
var i;
for (i = 0; i < dropdown.length; i++) {
dropdown[i].addEventListener("click", function() {
this.classList.toggle("active");
var dropdownContent = this.nextElementSibling;
if (dropdownContent.style.display === "block") {
dropdownContent.style.display = "none";
} else {
dropdownContent.style.display = "block";
}
});
}

window.onload = function() {
window.count_developers = 2;
window.count_tech_leads = 2;
window.count_departments = 2;
window.count_product_owners = 2;
window.count_admin_users = 2;
}

function add(name, value) {
var element = document.createElement("div");
var inputelement = document.createElement("input");
var inputgroupappend = document.createElement("div");
var spanelement = document.createElement("span");
var removebutton = document.createElement("i");
element.className = "input-group mt-2";
if(name == "departments") {
element.id = name + window.count_departments;
}

else if(name == "product_owners") {
element.id = name + window.count_product_owners;
}

else if(name == "admin_users") {
element.id = name + window.count_admin_users;
}


else {
}

inputelement.type = "text";
inputelement.required = true;
if(value != "") {
inputelement.innerHTML = value;
}
inputelement.name = "software_record[" + name + "][]";
inputelement.id = "software_record_"+ name + "_" ;
inputelement.className = "form-control";

element.appendChild(inputelement);

inputgroupappend.className = "input-group-append btnRemove";
element.appendChild(inputgroupappend);

spanelement.className = "input-group-text";
inputgroupappend.appendChild(spanelement);

removebutton.className = "fas fa-minus remove";
removebutton.innerHTML = " Delete";
spanelement.appendChild(removebutton);

inputgroupappend.onclick = function() {
document.getElementById(element.id).remove();
};

var valued = "multiple_"+name;
var multi_valued = document.getElementById(valued);
multi_valued.appendChild(element);
}

document.getElementById("btnAddProductOwners").onclick = function() {
add("product_owners", "");
window.count_product_owners++;
};

document.getElementById("btnAddAdminUsers").onclick = function() {
add("admin_users", "");
window.count_admin_users++;
};

document.getElementById("btnAddDepartments").onclick = function() {
add("departments", "");
window.count_departments++;
};

function remove(id){
document.getElementById(id).remove();
}

var createdbyfield = document.getElementsByClassName('regex-createdby')[0];
createdbyfield.onkeyup = function() {
createdbyfield.value = createdbyfield.value.replace(/[^a-zA-Z0-9 ]/, '');
}
</script>

</html>

Loading

0 comments on commit 64bc907

Please sign in to comment.