forked from antronic/thai-baht-text-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy paththai-baht-text.js
12 lines (12 loc) · 3.81 KB
/
thai-baht-text.js
1
2
3
4
5
6
7
8
9
10
11
12
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _async=require('async');// options
var primaryCurrency='บาท';/**
* @author Jirachai Chansivanon <[email protected]>
* @see {@link https://github.com/antronic/that-baht-text-js|GitHub}
*/var secondaryCurrency='สตางค์';var fullMoney='ถ้วน';var numbersText='ศูนย์,หนึ่ง,สอง,สาม,สี่,ห้า,หก,เจ็ด,แปด,เก้า,สิบ'.split(',');var unitsText='สิบ,ร้อย,พัน,หมื่น,แสน,ล้าน'.split(',');// convert function without async
var convert=function convert(numberInput){var numberStr=numberInput.toString();numberStr=numberStr.split('').reverse().join('');var millionSubfix='';var textOutput='';numberStr.split('').map(function(number,i){var currentNumber=Number(number);var numberText=numbersText[currentNumber];var unitText='';if(i!==0){unitText=unitsText[Math.abs(i-1)%6]}if(i%6===1&¤tNumber<=2){if(currentNumber===2){unitText='สิบ';numberText='ยี่'}else if(i>6&¤tNumber===1){unitText='สิบ';numberText=''}else{numberText=''}}if(i>=6&&i%6===0){if(currentNumber===1){if(i+1<numberStr.length){numberText='เอ็ด'}}}if(numberStr.length>1&&i===0&¤tNumber===1){numberText='เอ็ด'}if(currentNumber===0){unitText='';numberText=''}if(i>=6&&i%6===0){var millionCount=Math.floor(i/12);millionSubfix='ล้าน'.repeat(millionCount)}else{millionSubfix=''}textOutput=numberText+unitText+millionSubfix+textOutput;return number});return textOutput};// convert function with async
var convertAsync=function convertAsync(numberInput){var numberStr=numberInput.toString();numberStr=numberStr.split('').reverse().join('');var millionSubfix='';var textOutput='';return new Promise(function(done){(0,_async.eachOf)(numberStr,function(number,i,callback){var currentNumber=Number(number);var numberText=numbersText[currentNumber];var unitText='';// DEBUG
// console.log(`${i} -> ${i %7} -> ${currentNumber} -> ${Math.abs(i - 1) % 6} -> ${unitsText[i - 1 % 6]}`)
if(i!==0){unitText=unitsText[Math.abs(i-1)%6]}if(i%6===1&¤tNumber<=2){if(currentNumber===2){unitText='สิบ';numberText='ยี่'}else if(i>6&¤tNumber===1){unitText='สิบ';numberText=''}else{numberText=''}}if(i>=6&&i%6===0){if(currentNumber===1){if(i+1<numberStr.length){numberText='เอ็ด'}}}if(currentNumber===0){unitText='';numberText=''}if(numberStr.length>1&&i===0&¤tNumber===1){numberText='เอ็ด'}if(i>=6&&i%6===0){var millionCount=Math.floor(i/12);millionSubfix='ล้าน'.repeat(millionCount)}else{millionSubfix=''}textOutput=numberText+unitText+millionSubfix+textOutput;callback()},function(){done(textOutput)})})};// export default as convert without async
exports.default=function(numberInput){var numberStr=parseFloat(numberInput).toFixed(2);var decimalStr=numberStr.split('.')[0];var floatingStr=numberStr.split('.')[1];var textOutput='';textOutput=convert(decimalStr);if(floatingStr!==undefined&&floatingStr!=='00'){textOutput=''+textOutput+primaryCurrency+convert(floatingStr)+secondaryCurrency}else{textOutput=''+textOutput+primaryCurrency+fullMoney}return textOutput};// exprot convert with async
exports.async=function(numberInput){var numberStr=parseFloat(numberInput).toFixed(2);var decimalStr=numberStr.split('.')[0];var floatingStr=numberStr.split('.')[1];var textOutput='';return new Promise(function(done){convertAsync(decimalStr).then(function(str){textOutput=str;if(floatingStr!==undefined&&floatingStr!=='00'){convertAsync(floatingStr).then(function(floatingStrOutput){textOutput=''+textOutput+primaryCurrency+floatingStrOutput+secondaryCurrency;done(textOutput)})}else{textOutput=''+textOutput+primaryCurrency+fullMoney;done(textOutput)}})})};// export for ES5
module.exports=exports.default;module.exports.async=exports.async;