Skip to content

Latest commit

 

History

History
160 lines (110 loc) · 4.89 KB

File metadata and controls

160 lines (110 loc) · 4.89 KB

Trackmania Essentials (for Node.js)

GitHub release

npm NPM Size

Unit Tests

A light-weight library that provides formatting features for Trackmania games.

Installation

Node.js

npm install tm-essentials

Then you can retrieve the library with:

const TMEssentials = require('tm-essentials');

Browser

<script src="https://unpkg.com/tm-essentials"></script>

Then you can retrieve the library from the global variable TMEssentials

Methods & properties

Text formatting

TextFormatter.formatCodesRegex

RegExp to match all the formatting codes

TextFormatter.colorCodesRegex

RegExp to match all the color formatting codes

TextFormatter.deformat()

Deformat the text

let formatted = "$F00T$D01M$C13U$A14.$815K$727r$528a$329z$23By$03CC$03Co$04Bl$059o$068r$077s$085 $094v$0A30$0B1.$0C01";
let deformatted = TextFormatter.deformat(formatted);
console.log(deformatted);

// Output: TMU.KrazyColors v0.1

TextFormatter.formatAnsi()

Will parse the color formatting and convert it to ANSI escape codes. Works best on console output.

let formatted = "$l[https://kc.jfreu.com/]$F00T$D01M$C13U$A14.$815K$727r$528a$329z$23By$03CC$03Co$04Bl$059o$068r$077s$085$l $094v$0A30$0B1.$0C01";
let ansiFormat = TextFormatter.formatAnsi(formatted);
console.log(ansiFormat);

You can also pass some options in it:

  • disableLinks: will disable links to external sites (false by default)
  • lightBackground: adapt color to be visible on light backgrounds (false by default)
let formatted = "$l[https://kc.jfreu.com/]$F00T$D01M$C13U$A14.$815K$727r$528a$329z$23By$03CC$03Co$04Bl$059o$068r$077s$085$l $094v$0A30$0B1.$0C01";
let ansiFormat = TextFormatter.formatAnsi(formatted, {
  disableLinks: true,
  lightBackground: true
});
console.log(ansiFormat);

TextFormatter.formatHtml()

This is a port of the original Maniaplanet style parser written in pure JS. Copyright © 2012 - 2026 Nadeo & Baptiste Lafontaine

let formatted = "$l[https://kc.jfreu.com]$F00T$D01M$C13U$A14.$815K$727r$528a$329z$23By$03CC$03Co$04Bl$059o$068r$077s$085$l $094v$0A30$0B1.$0C01";
let htmlFormat = TextFormatter.formatHtml(formatted);
document.querySelector("#result").innerHTML = htmlFormat;

You can also pass some options in it:

  • disableLinks: will disable links to external sites (false by default)
  • lightBackground: adapt color to be visible on light backgrounds (false by default)
  • linkTarget: add a target attribute into links
let formatted = "$l[https://kc.jfreu.com]$F00T$D01M$C13U$A14.$815K$727r$528a$329z$23By$03CC$03Co$04Bl$059o$068r$077s$085$l $094v$0A30$0B1.$0C01";
let htmlFormat = TextFormatter.formatHtml(formatted, {
  disableLinks: true,
  lightBackground: true
});
document.querySelector("#result").innerHTML = htmlFormat;
let formatted = "$l[https://greep.fr]Open this link to a new tab$l with the target attribute";
let htmlFormat = TextFormatter.formatHtml(formatted, {
  linkTarget: "_blank"
});
document.querySelector("#result").innerHTML = htmlFormat;

Time formatting

Time.fromMilliseconds(1337).toTmString(); // "0:01.337"
Time.fromMilliseconds(1337).toTmString(true); // Will use hundredths as output: "0:01.33"

Time.fromSeconds(13.37).toTmString(); // "0:13.370"
Time.fromMinutes(13.37).toTmString(); // "13:37.000"
Time.fromHours(13.37).toTmString(); // "13:37:00.000"

Time.noTime.toTmString(); // "-:--.---"

TimeSpan

TimeSpan will return a Time class when one of noTime property or thoses methods is used:

  • Time.noTime
  • Time.fromMilliseconds()
  • Time.fromSeconds()
  • Time.fromMinutes()
  • Time.fromHours()

Time class

Time.time - Total milliseconds as integer value.

Time.toTmString() - Outputs the time to a formatted Trackmania-like string

Accounts formatting

Accounts.toAccountId()

Accounts.toAccountId("Jtmn3kBnSSadky_mLNhp_A") // "26d9a7de-4067-4926-9d93-2fe62cd869fc"

Accounts.toLogin()

Accounts.toLogin("26d9a7de-4067-4926-9d93-2fe62cd869fc") // "Jtmn3kBnSSadky_mLNhp_A"

Contributions

Alt