cm-web-modules
is a library of JavaScript ES6 (ECMAScript 6) modules, used for coding chessmail.
The main purpose of cm-web-modules
is, to prevent the usage of large libraries, and to provide needed functionality with the smallest and cleanest amount of code possible.
The cm-web-modules
modules have no external dependencies, they don't use jQuery or other frameworks. They are written with modern vanilla JavaScript in ECMAScript 6 syntax.
The cm-web-modules
modules are:
Module for the Web Audio API. For playing audio samples in a web page.
Cache data on client site.
Module to read, write and delete cookies.
Module to handle the internationalisation of frontend text.
const i18n = new I18n(props)
default props:
this.props = {
locale: null,
fallbackLang: "en" // used, when the translation was not found for locale
}
load language files:
i18n.load("translations.json").then(() => {
// do this after loading
})
where the json file has the form
{
"de": {
"start_game": "Ein neues Spiel starten",
"undo_move": "Zug zurück nehmen"
},
"en": {
"start_game": "Start a new game",
"undo_move": "Undo move"
}
}
or directly add the translations in your js code
i18n.load({
de: {
"0_starts_game": "$0 startet ein neues Spiel",
"undo_move": "Zug zurück nehmen"
},
en: {
"0_starts_game": "$0 starts a new game",
"undo_move": "Undo move"
}
})
Use placeholder $n [0-9] to replace them when using.
To handle the translations in your frontend code use
i18n.t("0_starts_game", ["John Doe"])
i18n.t("undo_move")
to render the needed text in the needed language. You can specify
the language in the props
when calling new or it uses the browser
preferences.
Module to observe object properties used for reactive coding the simple way.
const stopwatch = new Stopwatch({
onStateChanged: (running) => {
stateOutput.innerText = running
},
onTimeChanged: (seconds) => {
secondsOutput.innerText = seconds.toFixed(1)
}
})
buttonStart.addEventListener("click", () => {
stopwatch.start()
})
buttonStop.addEventListener("click", () => {
stopwatch.stop()
})
buttonReset.addEventListener("click", () => {
stopwatch.reset()
})
Module to render SVG elements and load sprites.
ArrayUtils, ColorUtils, CoreUtils, DateUtils, DomUtils, EncryptionUtils, EventUtils, TextUtils
The LibraryManager is the glue between the web-modules.
It is configured in postinstall.js
. Add postinstall.js
to the automtically excuted install-scripts from npm by adding it to package.json
like this
package.json
"scripts": {
"test": "mocha --require babel-core/register ./test/*.js",
"postinstall": "node postinstall.js"
}
In postinstall.js
, add the used modules via manager.addProject("module-name")
The source of the module is then copied to PROJECT_ROOT/lib/modules/name
. It provides
the same include-folder (/lib) for the local and for the via npm installed modules.
You must call npm install
after every npm update
, because it is only automatically started by
the initial install.
Example postinstall.js
const LibraryManager = require("cm-web-modules/src/LibraryManager.js")
const manager = new LibraryManager(__dirname)
manager.addProject("cm-web-modules")
manager.addProject("chess.js", "", "chess.js")