goog.module('nbsrc.utils.parser');
const Event = goog.require('goog.events.Event');
const Coordinate = goog.require('goog.math.Coordinate');
/**
* Gibt eine Liste der Interaktionspunkte eines Ereignisses zurück. Diese Methode berücksichtigt die Unterschiede zwischen den Geräten.
* @param {Event} event
* @param {number=} scale
* @return {Array<Coordinate>}
*/
function getBrowserPoints(event, scale = 1)
{
let points = [];
if(event.getBrowserEvent() && ((event.getBrowserEvent().touches && event.getBrowserEvent().touches.length > 0) || (event.getBrowserEvent().changedTouches && event.getBrowserEvent().changedTouches.length > 0)))
{
let touchPoints = event.getBrowserEvent().touches.length > 0 ? event.getBrowserEvent().touches : event.getBrowserEvent().changedTouches;
for(let i=touchPoints.length-1; i>=0; i--)
{
points.push(new Coordinate(touchPoints[i]['clientX'] * scale, touchPoints[i]['clientY'] * scale));
}
}
else if(event.getBrowserEvent() && event.getBrowserEvent().clientX)
{
points.push(new Coordinate(event.getBrowserEvent().clientX * scale, event.getBrowserEvent().clientY * scale));
}
else
{
points.push(new Coordinate(event['clientX'] * scale, event['clientY'] * scale));
}
return points;
}
/**
* Returns from a pafd only the filename without its extension.
* @param {string} path
* @return {string}
*/
function getFileName(path)
{
let filename = path.substring(path.lastIndexOf("/") + 1).toLowerCase();
return filename.split('.')[0];
}
/**
* Gets german moth name aut of a list [0-11]
* @param {number} month Desired month 0-11
* @return {string}
*/
function getGermanMonthName(month)
{
let monthNames = [
'Januar',
'Februar',
'März',
'April',
'Mai',
'Juni',
'Juli',
'August',
'September',
'Oktober',
'November',
'Dezember'
];
return monthNames[month];
}
/**
* Change the pathname so that `@2x` is added before the file extension.
* @param {string} path
* @return {string}
*/
function createRetinaFilePath(path)
{
let fileObject = path.split('.');
if(fileObject.length == 2)
return fileObject[0] + "@2x." + fileObject[1];
return path;
}
/**
* Gets the query parameters of `window.location.search` as an object for better handling.
* @param {string} urlSearch Is equal to window.location.search
* @return {Object}
*/
function getQueryParams(urlSearch) {
urlSearch = urlSearch.split('+').join(' ');
let params = {};
let tokens;
let re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(urlSearch)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
/**
* Generate a timestring with optionla include of milliseconds
* @param {number} time in milliseconds
* @param {boolean=} hideZeroHours Don't show zero hours if the time is lass than on hour
* @param {boolean=} showMilliseconds
* @return {string}
*/
function msToTime(time, hideZeroHours = false, showMilliseconds = false) {
let ms = time % 1000;
time = (time - ms) / 1000;
let secs = time % 60;
time = (time - secs) / 60;
let mins = time % 60;
let hrs = (time - mins) / 60;
let str = ('00'+mins).slice(-2) + ':' + ('00'+secs).slice(-2);
if(!(hideZeroHours && hrs == 0))
str = ('00'+hrs).slice(-2) + ':' + str;
if(showMilliseconds)
str += '.' + ('000'+ms).slice(-3);
return str;
}
/**
* Shorten the text up to a maximum number of characters. At the end of the new shorter text `...` added.
* @param {string} text
* @param {number} maxCharacters
* @param {boolean=} preventWordCut
* @return {string}
*/
function createShortText(text, maxCharacters, preventWordCut = false) {
if(text.length <= maxCharacters)
return text;
if(preventWordCut)
{
let textObj = text.split(' ');
let textStr = '';
for(let i=0; i<textObj.length; i++)
{
if(textStr.length + textObj[i].length + 1 < maxCharacters)
textStr += textObj[i]+' ';
}
if(textStr.length>0)
return textStr+'...';
}
return text.substr(0, maxCharacters)+'...';
}
exports = {
getBrowserPoints,
getFileName,
createRetinaFilePath,
getGermanMonthName,
getQueryParams,
msToTime,
createShortText
};