Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug/multi value #375

Merged
merged 8 commits into from
Jul 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
scherztc marked this conversation as resolved.
Show resolved Hide resolved
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
Loading