ngx-numaric-keypad
Version:
This is a two in one features keypad, you can use this as calculator also by just enabling that feature.
130 lines (123 loc) • 8.11 kB
JavaScript
import { __decorate } from 'tslib';
import { ɵɵdefineInjectable, Injectable, EventEmitter, Input, Output, Component, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
var KeypadService = /** @class */ (function () {
function KeypadService() {
}
KeypadService.ɵprov = ɵɵdefineInjectable({ factory: function KeypadService_Factory() { return new KeypadService(); }, token: KeypadService, providedIn: "root" });
KeypadService = __decorate([
Injectable({
providedIn: 'root'
})
], KeypadService);
return KeypadService;
}());
var KeypadComponent = /** @class */ (function () {
function KeypadComponent() {
this.calc = false;
this.getVal = new EventEmitter();
this.currentNumber = '0';
this.firstOperand = null;
this.operator = null;
this.waitForSecondNumber = false;
this.equalSign = false;
}
KeypadComponent.prototype.ngOnInit = function () {
};
KeypadComponent.prototype.getNumber = function (v) {
if (this.waitForSecondNumber) {
this.currentNumber = v;
this.waitForSecondNumber = false;
}
else {
this.currentNumber === '0'
? (this.currentNumber = v)
: (this.currentNumber += v);
}
this.getVal.emit(this.currentNumber);
};
KeypadComponent.prototype.backSpace = function () {
if (this.currentNumber.length > 0) {
this.currentNumber = this.currentNumber.slice(0, -1);
this.getVal.emit(this.currentNumber);
}
};
KeypadComponent.prototype.getDecimal = function () {
if (!this.currentNumber.includes('.')) {
this.currentNumber += '.';
}
};
KeypadComponent.prototype.doCalculation = function (op, secondOp) {
switch (op) {
case '+':
return (this.firstOperand += secondOp);
case '-':
return (this.firstOperand -= secondOp);
case '*':
return (this.firstOperand *= secondOp);
case '/':
return (this.firstOperand /= secondOp);
case '%':
return ((this.firstOperand / 100) * secondOp);
case '=':
return secondOp;
}
};
KeypadComponent.prototype.getOperation = function (op) {
if (this.firstOperand === null) {
this.firstOperand = Number(this.currentNumber);
}
else if (this.operator) {
var result = this.doCalculation(this.operator, Number(this.currentNumber));
this.currentNumber = String(result);
this.firstOperand = result;
}
this.operator = op;
this.waitForSecondNumber = true;
this.getVal.emit(this.firstOperand);
};
KeypadComponent.prototype.clear = function () {
this.currentNumber = '0';
this.firstOperand = null;
this.operator = null;
this.waitForSecondNumber = false;
this.getVal.emit(this.currentNumber);
};
__decorate([
Input()
], KeypadComponent.prototype, "calc", void 0);
__decorate([
Output()
], KeypadComponent.prototype, "getVal", void 0);
KeypadComponent = __decorate([
Component({
selector: 'ngx-numaric-keypad',
template: "<div class='keypad-container'>\r\n <div class=\"keypad\">\r\n <div class=\"keypad-screen\">\r\n <input type=\"text\" [value]=\"currentNumber\" disabled />\r\n </div>\r\n \r\n <div class=\"keypad-keys\">\r\n <div class=\"keypad-btns\">\r\n <button type=\"button\" (click)=\"getNumber('7')\" value=\"7\">7</button>\r\n <button type=\"button\" (click)=\"getNumber('8')\" value=\"8\">8</button>\r\n <button type=\"button\" (click)=\"getNumber('9')\" value=\"9\">9</button>\r\n \r\n <button type=\"button\" (click)=\"getNumber('4')\" value=\"4\">4</button>\r\n <button type=\"button\" (click)=\"getNumber('5')\" value=\"5\">5</button>\r\n <button type=\"button\" (click)=\"getNumber('6')\" value=\"6\">6</button>\r\n \r\n <button type=\"button\" (click)=\"getNumber('1')\" value=\"1\">1</button>\r\n <button type=\"button\" (click)=\"getNumber('2')\" value=\"2\">2</button>\r\n <button type=\"button\" (click)=\"getNumber('3')\" value=\"3\">3</button>\r\n \r\n \r\n <button type=\"button\" (click)=\"getDecimal()\" class=\"decimal\" value=\".\">\r\n .\r\n </button>\r\n <button type=\"button\" (click)=\"getNumber('0')\" value=\"0\">0</button>\r\n <button type=\"button\" (click)=\"backSpace()\" class=\"decimal back-btn\">\r\n <span class=\"material-icons\">\r\n backspace\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"op-btn\" *ngIf=\"calc\">\r\n \r\n <button type=\"button\" (click)=\"clear()\" class=\"all-clear\" value=\"all-clear\">\r\n AC\r\n </button>\r\n <button type=\"button\" (click)=\"getOperation('%')\" class=\"operator\" value=\"%\">\r\n %\r\n </button>\r\n <button type=\"button\" (click)=\"getOperation('+')\" class=\"operator\" value=\"+\">\r\n +\r\n </button>\r\n <button type=\"button\" (click)=\"getOperation('-')\" class=\"operator\" value=\"-\">\r\n -\r\n </button>\r\n <button type=\"button\" (click)=\"getOperation('*')\" class=\"operator\" value=\"*\">\r\n ×\r\n </button>\r\n <button type=\"button\" (click)=\"getOperation('/')\" class=\"operator\" value=\"/\">\r\n ÷\r\n </button>\r\n \r\n <button type=\"button\" (click)=\"getOperation('=')\" class=\"equal-sign\" value=\"=\">\r\n =\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>",
styles: [".keypad-container{width:100%;height:100vh;display:flex;align-items:center;justify-content:center}.keypad{border:1px solid #ccc;border-radius:5px;width:400px}.keypad-screen{padding:10px}.keypad-screen input{width:100%;font-size:4rem;height:80px;border:none;background-color:#fff;color:#000;text-align:right}.keypad-keys{display:flex;justify-content:space-between;padding:10px;border-top:1px solid #ccc;cursor:pointer}.keypad-keys .keypad-btns{flex:1;display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;cursor:pointer}.keypad-keys .keypad-btns button{flex:0 0 27%;width:27%;margin:5px;cursor:pointer}button{height:60px;border-radius:3px;border:1px solid #c4c4c4;background-color:transparent;font-size:2rem;color:#333;background-image:linear-gradient(to bottom,transparent,transparent 50%,rgba(0,0,0,.04));box-shadow:inset 0 0 0 1px rgba(255,255,255,.05),inset 0 1px 0 0 rgba(255,255,255,.45),inset 0 -1px 0 0 rgba(255,255,255,.15),0 1px 0 0 rgba(255,255,255,.15);text-shadow:0 1px rgba(255,255,255,.4)}button.back-btn{font-size:1.5rem}.keypad-keys .op-btn{flex:0 0 100px;margin-left:10px;display:flex;flex-direction:column;cursor:pointer}.keypad-keys .op-btn button{flex:0 0 50px;margin:5px;cursor:pointer}"]
})
], KeypadComponent);
return KeypadComponent;
}());
// import { BrowserModule } from '@angular/platform-browser';
var KeypadModule = /** @class */ (function () {
function KeypadModule() {
}
KeypadModule = __decorate([
NgModule({
declarations: [KeypadComponent],
imports: [
CommonModule
],
exports: [KeypadComponent]
})
], KeypadModule);
return KeypadModule;
}());
/*
* Public API Surface of keypad
*/
/**
* Generated bundle index. Do not edit.
*/
export { KeypadComponent, KeypadModule, KeypadService };
//# sourceMappingURL=ngx-numaric-keypad.js.map