Untitled
unknown
plain_text
a year ago
8.2 kB
1
Indexable
Never
<style> .invalid-input { border-color: red; } .row > div { margin-bottom: 10px; } .full-width { width: 100%; } .carbon-result, .date-inputs { display: flex; justify-content: space-between; } .carbon-result > div, .date-inputs > div { width: 49%; } </style> <body> <div class="container my-5"> <ul class="nav nav-tabs" id="inputTab" role="tablist"> <li class="nav-item"> <a class="nav-link active" id="manual-tab" data-toggle="tab" href="#manual" role="tab" aria-controls="manual" aria-selected="true">Manual Input</a> </li> <li class="nav-item"> <a class="nav-link" id="file-tab" data-toggle="tab" href="#file" role="tab" aria-controls="file" aria-selected="false">File Import</a> </li> </ul> <div class="tab-content" id="inputTabContent"> <div class="tab-pane fade show active" id="manual" role="tabpanel" aria-labelledby="manual-tab"> <div class="container my-5"> <!-- Form --> <div class="container my-5"> <div class="form-group"> <div id="scope" class="btn-group btn-group-toggle" data-toggle="buttons"> <label class="btn btn-outline-secondary"> <input type="radio" name="scope" value="1"> Scope 1 </label> <label class="btn btn-outline-secondary"> <input type="radio" name="scope" value="2"> Scope 2 </label> <label class="btn btn-outline-secondary"> <input type="radio" name="scope" value="3"> Scope 3 </label> </div> </div> <div class="row"> <div class="col-4"> <label>Kategori</label> <select id="category" class="form-control"></select> </div> <div class="col-4"> <label>Källa</label> <select id="source" class="form-control"></select> </div> <div class="col-4"> <label>Koldioxidfaktor</label> <input type="text" id="carbonfactor" class="form-control" disabled> </div> </div> <div class="row"> <div id="unit-container" class="col-8"> <label id="unit-label">Inmatning</label> <input type="text" id="unit" class="form-control"> </div> <div id="unit2-container" class="col-4" style="display: none;"> <label id="unit-label2"></label> <input type="text" id="unit2" class="form-control"> </div> <div class="col-4"> <label>Resultat CO2e</label> <input type="text" id="result" class="form-control" disabled> </div> </div> <div class="row"> <div class="col-6"> <label for="dateFrom">Utsläpp från</label> <input type="date" id="dateFrom" class="form-control"> </div> <div class="col-6"> <label for="dateTo">Utsläpp till</label> <input type="date" id="dateTo" class="form-control"> </div> </div> <div class="form-group"> <label>Comment</label> <textarea class="form-control" id="comment" maxlength="250"></textarea> <div class="d-flex justify-content-end"> <small id="charCount" class="form-text text-muted">0/250</small> </div> </div> <button class="btn btn-primary" id="submit">Lägg till</button> <button class="btn btn-outline-secondary" id="clear">Rensa</button> </div> </div> <div class="tab-pane fade" id="file" role="tabpanel" aria-labelledby="file-tab"> </div> </div> </div> </div> <script> let data = @Data@; let scopeRadios; let categorySelect; let sourceSelect; let unitInput; let unitInput2; let carbonFactorInput; let resultInput; let commentInput; let charCount; $(document).ready(function () { scopeRadios = $('input[name="scope"]'); categorySelect = $('#category'); sourceSelect = $('#source'); categorySelect.append(new Option("Välj kategori", "", true, true)).attr('disabled', true); sourceSelect.append(new Option("Välj källa", "", true, true)).attr('disabled', true); unitInput = $('#unit'); unitInput2 = $('#unit2').hide(); // hide second input box by default carbonFactorInput = $('#carbonfactor'); resultInput = $('#result'); commentInput = $('#comment'); charCount = $('#charCount'); // trigger change event on page load to initialize state scopeRadios.change(); }); scopeRadios.change(function () { categorySelect.empty(); categorySelect.append(new Option("Choose category", "", true, true)).attr('disabled', false); let selectedScope = $(this).val(); let categories = [...new Set(data.filter(item => item.scope == selectedScope).map(item => item.category))]; categories.forEach(category => { categorySelect.append(new Option(category, category)); }); categorySelect.attr('disabled', false); }); categorySelect.change(function () { if($(this).val() !== "") { sourceSelect.empty(); sourceSelect.append(new Option("Choose source", "", true, true)).attr('disabled', false); let selectedScope = $('input[name="scope"]:checked').val(); let selectedCategory = $(this).val(); let sources = [...new Set(data.filter(item => item.scope == selectedScope && item.category == selectedCategory).map(item => item.source))]; sources.forEach(source => { sourceSelect.append(new Option(source, source)); }); } }); sourceSelect.change(function () { unitInput.val(''); unitInput2.val('').hide(); unitInput.removeClass('col-4').addClass('col-8'); let selectedScope = $('input[name="scope"]:checked').val(); let selectedCategory = categorySelect.val(); let selectedSource = $(this).val(); let selectedData = data.find(item => item.scope == selectedScope && item.category == selectedCategory && item.source == selectedSource); let units = selectedData.unit.split(";"); $('#unit-label').text('Input (' + units[0] + ')'); unitInput.show(); if (units.length > 1) { $('#unit-label2').text('Input (' + units[1] + ')'); unitInput2.show(); unitInput.removeClass('col-8').addClass('col-4'); } else { $('#unit-label2').text(''); } carbonFactorInput.val(selectedData.carbonfactor); }); unitInput.add(unitInput2).on('input', function() { if (isNaN($(this).val()) || !isFinite($(this).val())) { $(this).addClass('invalid-input'); } else { $(this).removeClass('invalid-input'); calculateResult(); } }); function calculateResult() { let unit1 = parseFloat(unitInput.val()) || 0; let unit2 = parseFloat(unitInput2.val()) || 0; let carbonFactor = parseFloat(carbonFactorInput.val()); let result = (unit1 + unit2) * carbonFactor; resultInput.val(result); } commentInput.on('keyup', function() { charCount.text($(this).val().length + '/250'); }); $('#submit').click(function() { if ($('.invalid-input').length > 0) { alert('Please correct the invalid inputs'); } else { // Submit the form alert('Form submitted!'); } }); $('#clear').click(function() { $('input').val(''); $('textarea').val(''); $('#unit-label2').text(''); $('#charCount').text('0/250'); unitInput2.hide(); unitInput.removeClass('col-4').addClass('col-8'); $('input[name="scope"]').prop('checked', false); categorySelect.empty().append(new Option("Choose category", "", true, true)).attr('disabled', true); sourceSelect.empty().append(new Option("Choose source", "", true, true)).attr('disabled', true); $('.invalid-input').removeClass('invalid-input'); }); </script> </body>