This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.4 KiB
64 lines
1.4 KiB
'use strict'; |
|
|
|
function preserveCamelCase(str) { |
|
let isLastCharLower = false; |
|
let isLastCharUpper = false; |
|
let isLastLastCharUpper = false; |
|
|
|
for (let i = 0; i < str.length; i++) { |
|
const c = str[i]; |
|
|
|
if (isLastCharLower && /[a-zA-Z]/.test(c) && c.toUpperCase() === c) { |
|
str = str.substr(0, i) + '-' + str.substr(i); |
|
isLastCharLower = false; |
|
isLastLastCharUpper = isLastCharUpper; |
|
isLastCharUpper = true; |
|
i++; |
|
} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(c) && c.toLowerCase() === c) { |
|
str = str.substr(0, i - 1) + '-' + str.substr(i - 1); |
|
isLastLastCharUpper = isLastCharUpper; |
|
isLastCharUpper = false; |
|
isLastCharLower = true; |
|
} else { |
|
isLastCharLower = c.toLowerCase() === c; |
|
isLastLastCharUpper = isLastCharUpper; |
|
isLastCharUpper = c.toUpperCase() === c; |
|
} |
|
} |
|
|
|
return str; |
|
} |
|
|
|
module.exports = function (str) { |
|
if (arguments.length > 1) { |
|
str = Array.from(arguments) |
|
.map(x => x.trim()) |
|
.filter(x => x.length) |
|
.join('-'); |
|
} else { |
|
str = str.trim(); |
|
} |
|
|
|
if (str.length === 0) { |
|
return ''; |
|
} |
|
|
|
if (str.length === 1) { |
|
return str.toLowerCase(); |
|
} |
|
|
|
if (/^[a-z0-9]+$/.test(str)) { |
|
return str; |
|
} |
|
|
|
const hasUpperCase = str !== str.toLowerCase(); |
|
|
|
if (hasUpperCase) { |
|
str = preserveCamelCase(str); |
|
} |
|
|
|
return str |
|
.replace(/^[_.\- ]+/, '') |
|
.toLowerCase() |
|
.replace(/[_.\- ]+(\w|$)/g, (m, p1) => p1.toUpperCase()); |
|
};
|
|
|