mirror of
https://github.com/jaandrle/deka-dom-el
synced 2024-11-24 09:29:37 +01:00
53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
/**
|
||
* This is helper to write texts in code more readable
|
||
* and doesn’t inpact the finally generated text in HTML.
|
||
*
|
||
* ```js
|
||
* t`
|
||
* Hello ${el("b", "world")}!
|
||
* How are you?
|
||
* ` === "Hello <b>world</b>! How are you?"
|
||
* ```
|
||
*
|
||
* In future, this can be expanded to allow translations.
|
||
*
|
||
* ```js
|
||
* t(key)`text`; // for example
|
||
* ```
|
||
*
|
||
* @param {TemplateStringsArray} strings
|
||
* @param {...(string|Node)} values
|
||
* @returns {(string|Node)[]}
|
||
* */
|
||
export function T(strings, ...values){
|
||
const out= [];
|
||
tT(s=> out.push(s), strings, ...values);
|
||
return out;
|
||
}
|
||
/**
|
||
* Similarly to {@link T}, but for only strings.
|
||
* @param {TemplateStringsArray} strings
|
||
* @param {...string} values
|
||
* @returns {string}
|
||
* */
|
||
export function t(strings, ...values){
|
||
let out= "";
|
||
tT(s=> out+= s, strings, ...values);
|
||
return out;
|
||
}
|
||
|
||
/**
|
||
* @param {(input: string|Node)=> void} callback
|
||
* @param {TemplateStringsArray} strings
|
||
* @param {...(string|Node)} values
|
||
* */
|
||
function tT(callback, strings, ...values){
|
||
const { length }= strings;
|
||
const last= length-1;
|
||
for(let i= 0; i<length; i++){
|
||
const out= strings[i].replace(/\n\s+/g, " ");
|
||
callback(!i ? out.trimStart() : i===last ? out.trimEnd() : out);
|
||
if(i<values.length) callback(values[i]);
|
||
}
|
||
}
|