Calculation arithmetic inline input text

Inspired from cell box on office spreadsheet.



Try typing arithmetic e.g.(2+5/2-1*3) then hit enter or move out cursor
This will calculate 2+5/2-1*3 to be 1.5

Basic
With currency format

With round decimal

How to use



Include inline-calc.js on your page before end of body tag

<script src="path-to-inline-calc-js" type="text/javascript"></script>

Then just add class calc and data attribut for currency format data="N" or data="S"

<input type="text" class="calc" data="N"/>

To using round decimal add format data="N-2" for 2 decimal place

<input type="text" class="calc" data="N-2"/>
            
            /*! Created By: Hangs Breaker */
            document.getElementsByTagName("head")[0].insertAdjacentHTML('beforeend', '');
    
            var enKey = false;
            var calc = document.querySelectorAll('.calc');
            var forEach = [].forEach;
            forEach.call(calc, function (el, i) {
                //calc[i].setAttribute("onblur", "calcs()");
                //calc[i].setAttribute("onclick", "getcalcs()");
                //calc[i].setAttribute("onkeypress", "handle(event)");
                calc[i].insertAdjacentHTML('beforeBegin', '<div class="calcc">c</div>');
                calc[i].insertAdjacentHTML('afterEnd', '<input type="hidden" class="calcr" style="display:none;"/>');
                var calcr = document.querySelectorAll('.calcr');
    
                function doCalc() {
                    calcr[i].value = calc[i].value;
                    if (calc[i].value != '') {
                        if (calc[i].getAttribute("data")) {
                            var data = calc[i].getAttribute("data").split("-");
                            if (data[0] === "N") {
                                calc[i].value = eval(calc[i].value.replace(/\,/g, "")) === undefined ? '' : eval(calc[i].value.replace(/\,/g, ""));
                                if (data[1] != null && data[1] != "") { calc[i].value = parseFloat(calc[i].value).toFixed(data[1]); }
                                calc[i].value = calc[i].value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
                            } else if (data[0] === "S") {
                                calc[i].value = eval(calc[i].value.replace(/\./g, "").replace(/\,/g, ".")) === undefined ? '' : eval(calc[i].value.replace(/\./g, "").replace(/\,/g, "."));
                                if (data[1] != null && data[1] != "") { calc[i].value = parseFloat(calc[i].value).toFixed(data[1]); }
                                calc[i].value = calc[i].value.toString().replace(/\./g, ",").replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1.");
                            }
                        } else {
                            calc[i].value = eval(calc[i].value) === undefined ? '' : eval(calc[i].value);
                        }
                    }
                }
                function mouseDown() {
                    if (calcr[i].value != '') {
                        calc[i].value = calcr[i].value; enKey = false;
                    }
                }
                function onBlur() {
                    if (enKey) { enKey = false; } else { doCalc(); }
                }
    
    
                el.addEventListener('mousedown', mouseDown);
                el.addEventListener('blur', onBlur);
                el.addEventListener('keypress', function (e) {
                    var key = e.which || e.keyCode;
                    if (key === 13) {
                        enKey = true;
                        doCalc();
                    }
                });
    
                var calcc = document.querySelectorAll('.calcc');
                function mouseEnter() {
                    calcc[i].innerHTML = "Copy";
                    calcc[i].style.padding = "6px 6px 6px 5px";
                }
                function mouseOut() {
                    calcc[i].innerHTML = "c";
                    calcc[i].style.padding = "0px 2px 0px 2px";
                }
                function copyText() {
                    calc[i].select();
                    document.execCommand("Copy");
                    calcc[i].innerHTML = "Copied: " + calc[i].value;
                    calcc[i].style.padding = "6px 6px 6px 5px";
                }
                calcc[i].addEventListener('mouseenter', mouseEnter);
                calcc[i].addEventListener('mouseout', mouseOut);
                calcc[i].addEventListener('mousedown', copyText);
            });