Simply Calc 2.0

Vypracovanie optimalizovanej verzie Simple Calc.

by wewo

HTML

<form id="frm" name="frm">
    <div class="left-side">
        <div class="buttons-row">
            <input name="dot" type="button" value="." class="btn" />
            <input name="result" type="text" />
        </div>	
        <div class="buttons-row">
            <input type="button" value="7" class="btn btn-blue" />
            <input type="button" value="8" class="btn btn-blue" />
            <input type="button" value="9" class="btn btn-blue" />
        </div>
        <div class="buttons-row">
            <input type="button" value="4" class="btn btn-blue" />
            <input type="button" value="5" class="btn btn-blue" />
            <input type="button" value="6" class="btn btn-blue" />
        </div>
        <div class="buttons-row">
            <input type="button" value="1" class="btn btn-blue" />
            <input type="button" value="2" class="btn btn-blue" />
            <input type="button" value="3" class="btn btn-blue" />
        </div>
        <div class="buttons-row">
            <input type="button" value="0" class="btn btn-blue" />
            <input type="button" value="=" class="btn btn-red" />
            <input type="button" value="C" class="btn btn-red" />
        </div>
    </div>
    <div class="right-side">
        <div id="operations">
            <input type="button" class="btn" value="+" />
            <input type="button" class="btn" value="-" />
            <input type="button" class="btn" value="*" />
            <input type="button" class="btn" value="/" />
        </div>
    </div>
</form>

CSS

form {
    width: 575px;
}

.left-side {
    float: left;
}

.right-side {
    float: right;
}

.buttons-row {
    margin-bottom: 3px;
}

.btn {
    
}

.btn-blue,
.btn-red {
  width: 150px;
  height: 100px;
  border: 0px;
  font-family: 'Calibri', sans-serif;
  font-size: 3em;
  text-align: center;
  transition: background-color 1s;
  -webkit-transition: background-color 1s;
  -o-transition: background-color 1s;
  -moz-transition: background-color 1s;
}

.btn-blue {
  background-color: #00E5FF;
}
.btn-blue:hover {
  background-color: #00B8D4;
}

.btn-red {
  background-color: #FF5722;
}
.btn-red:hover {
  background-color: #BF360C;
}

input[name="dot"] {
  float: left;
  margin-right: 4px;
  width: 150px;
  height: 56px;
  font-family: Calibri, sans-serif;
  font-size: 3em;
  text-align: center;
  background: #FAFAFA;
  border: 1px solid #757575;
  transition: background-color 1s;
  -webkit-transition: background-color 1s;
  -o-transition: background-color 1s;
  -moz-transition: background-color 1s;
}
input[name="dot"]:hover {
  background-color: #757575;
}

input[name="result"] {
    font-family: 'Calibri', sans-serif;
    font-size: 28px;
    width: 300px;
    height: 50px;
}

#operations {
  width: 100px;
}

#operations > input {
  width: 100px;
  height: 100px;
  border: 0px;
  font-family: Calibri, sans-serif;
  font-size: 4em;
  text-align: center;
  border-radius: 100%;
  margin: 10px auto;
  background-color: #C6FF00;
  transition: background-color 1s;
  -webkit-transition: background-color 1s;
  -o-transition: background-color 1s;
  -moz-transition: background-color 1s;
}

#operations > input:hover {
      background-color: #C0CA33;
}

JavaScript

/**
 * Toto ziska vsetky elementy s classou ".btn" a nastavi
 * funkciu "addToInput" ako onclick event.
 */
var buttons = document.querySelectorAll('.btn');
for(var key in buttons) { 
   if (buttons.hasOwnProperty(key)) {
       buttons[key].onclick = addToInput;
   }
}

/**
 * Toto funkcia sa spusti vzdy ked sa klikne na element ktory ju ma
 * priradenu pre onclick event.
 *
 * V premennej "this" je vzdy ulozeny element na ktory bolo kliknute.
 * Ma property "value" v ktorej je hodnota "value atributu". Vdaka tomu
 * lahko vieme indentifikovat na ktory button sme klikli.
 * Pre znaky "=" a "C" urobi to co ma, ostatne jednoducho prida do inputu.
 *
 * Je dolezite robit funkcie taketo univerzalne a aplikacie modularne.
 * Takymto sposobom vieme napr zmenit v HTML pri inpute 9 value na 99
 * a funkcia bude reagovat tak ako ma, netreba kvoli tomu menit/pridavat
 * funkciu "run99()" ako v povodnej verzii.
 */
function addToInput() {
    
    if ( this.value == '=' ) {
	    document.frm.result.value = eval(document.frm.result.value);
    }
    else if ( this.value == 'C' ) {
        document.frm.result.value = '';
    }
    else {
        document.frm.result.value += this.value;
    }   
    
}