diff --git a/src/motdparsernode.js b/src/motdparsernode.js index 3440f16..9c37957 100644 --- a/src/motdparsernode.js +++ b/src/motdparsernode.js @@ -65,65 +65,73 @@ function parseJsonToHTML(jsonPart) { } function jsonToHtml(json, callback) { - json = JSON.parse(JSON.stringify(json).split('\\n').join("
")); - let motd = parseJsonToHTML(json); - motd = "
" + motd + "
"; - callback(null, motd); + const promise = new Promise((resolve, _reject) => { + json = JSON.parse(JSON.stringify(json).split('\\n').join("
")); + let motd = parseJsonToHTML(json); + motd = "
" + motd + "
"; + resolve(motd) + }) + + if (callback && typeof callback === 'function') { + promise.then(callback.bind(null, null), callback); + } + return promise; } function textToJson(text, callback) { - let jsonObj = { text: "", extra: [] }; - let curObj = jsonObj; - let arr = text.split(""); - for (let i = 0; i < arr.length; i++) { - if (arr[i] != '§') { - curObj.text += arr[i]; - } else if (arr[i + 1] == 'r') { - let innerObj = { text: "", extra: [] }; - jsonObj.extra.push(innerObj); - curObj = innerObj; - i++; - } else { - let codeStr = '§' + arr[i + 1]; - let innerObj = { text: "", extra: [] }; - if (colors.hasOwnProperty(codeStr)) { - innerObj.color = colors[codeStr]; - } - if (extras.hasOwnProperty(codeStr)) { - innerObj[extras[codeStr]] = true; + const promise = new Promise((resolve, _reject) => { + let jsonObj = { text: "", extra: [] }; + let curObj = jsonObj; + let arr = text.split(""); + for (let i = 0; i < arr.length; i++) { + if (arr[i] != '§') { + curObj.text += arr[i]; + } else if (arr[i + 1] == 'r') { + let innerObj = { text: "", extra: [] }; + jsonObj.extra.push(innerObj); + curObj = innerObj; + i++; + } else { + let codeStr = '§' + arr[i + 1]; + let innerObj = { text: "", extra: [] }; + if (colors.hasOwnProperty(codeStr)) { + innerObj.color = colors[codeStr]; + } + if (extras.hasOwnProperty(codeStr)) { + innerObj[extras[codeStr]] = true; + } + curObj.extra.push(innerObj); + curObj = innerObj; + i++; } - curObj.extra.push(innerObj); - curObj = innerObj; - i++; } + resolve(jsonObj); + }) + + if (callback && typeof callback === 'function') { + promise.then(callback.bind(null, null), callback); } - callback(null, jsonObj); + return promise; } function toHtml(motd, callback) { - if (typeof motd === 'object') { - jsonToHtml(motd, (err, res) => { - if (err) { - callback(err); - return; - } - callback(null, res); - }); - } else if (typeof motd === 'string') { - textToJson(motd, (err, json) => { - if (err) { - callback(err); - return; - } - jsonToHtml(json, (err, res) => { - if (err) { - callback(err); - return; - } - callback(null, res); - }); - }); + const promise = new Promise((resolve, reject) => { + if (typeof motd === 'object') { + return jsonToHtml(motd) + .then(resolve) + .catch(reject) + } else if (typeof motd === 'string') { + return textToJson(motd) + .then(jsonToHtml) + .then(resolve) + .catch(reject) + } + }) + + if (callback && typeof callback === 'function') { + promise.then(callback.bind(null, null), callback); } + return promise; } //var text = "§aHypixel Network §7§c1.8/1.9/1.10/1.11/1.12 §e§lNEW PTL GAME:§b§l THE BRIDGE";