Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
5.1 kB
1
Indexable
Never
<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');
        unitInput = $('#unit');
        unitInput2 = $('#unit2').hide(); // hide second input box by default
        carbonFactorInput = $('#carbonfactor');
        resultInput = $('#result');
        commentInput = $('#comment');
        charCount = $('#charCount');

        // Event bindings
        scopeRadios.change(onScopeChange);
        categorySelect.change(onCategoryChange);
        sourceSelect.change(onSourceChange);
        unitInput.add(unitInput2).on('input', onUnitInputChange);
        commentInput.on('keyup', onCommentKeyUp);
        $('#submit').click(onSubmitClick);
        $('#clear').click(onClearClick);
        
        // Initialize form state
        resetForm();
    });

    function resetForm() {
        // Clear inputs and textarea
        $('input').val('');
        $('textarea').val('');
        $('#unit-label2').text('');
        $('#charCount').text('0/250');
        unitInput2.hide();
        unitInput.removeClass('col-4').addClass('col-12');
        $('.invalid-input').removeClass('invalid-input');
        unitInput.prop('disabled', true);
        // Clear radio button selection
        scopeRadios.parent().removeClass('active');
        scopeRadios.prop('checked', false);

        // Reset category and source select elements
        categorySelect.empty().append(new Option("Välj kategori", "", true, true)).prop('disabled', true);
        sourceSelect.empty().append(new Option("Välj källa", "", true, true)).prop('disabled', true);
    }

    function onScopeChange() {
        categorySelect.prop('disabled', false);
        let selectedScope = $(this).val();
        let categories = [...new Set(data.filter(item => item.scope == selectedScope).map(item => item.category))];
        categorySelect.empty().append(new Option("Välj kategori", "", true, true));
        categories.forEach(category => {
            categorySelect.append(new Option(category, category));
        });
    }

    function onCategoryChange() {
        if($(this).val() !== "") {
            sourceSelect.empty();
            sourceSelect.append(new Option("Välj källa", "", true, true)).prop('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));
            });
        }
    }

    function onSourceChange() {
        unitInput.val('');
        unitInput2.val('').hide();
        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('Inmatning (' + units[0] + ')');
        unitInput.show().parent().addClass('col-12').removeClass('col-8 col-4'); // make full width
        if (units.length > 1) {
            $('#unit-label2').text('Inmatning (' + units[1] + ')');
            unitInput2.show().parent().addClass('col-6').removeClass('col-8 col-4'); // make half width
            unitInput.parent().removeClass('col-12').addClass('col-6'); // make half width
        } else {
            $('#unit-label2').text('');
        }
        carbonFactorInput.val(selectedData.carbonfactor);
        unitInput.prop('disabled', false);
    }

    function onUnitInputChange() {
        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);
    }

    function onCommentKeyUp() {
        charCount.text($(this).val().length + '/250');
    }

    function onSubmitClick() {
        if ($('.invalid-input').length > 0) {
            alert('Please correct the invalid inputs');
        } else {
            alert('Form submitted!');
        }
    }

    function onClearClick() {
        resetForm();
    }
</script>