46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
const CLASSNAME_CHAR_RE = /^[a-z0-9_*\-.]+$/;
|
|
|
|
export function getBaseClassname(classname: string): string {
|
|
const star = classname.indexOf("*");
|
|
return star >= 0 ? classname.substring(0, star) : classname;
|
|
}
|
|
|
|
export function getSafeClassnameStem(classname: string): string {
|
|
return classname.replace(/\*/g, "_");
|
|
}
|
|
|
|
export function getIconFileName(classname: string): string {
|
|
return `${getSafeClassnameStem(classname)}_icon.png`;
|
|
}
|
|
|
|
export function getSwfFileName(classname: string): string {
|
|
return `${getBaseClassname(classname)}.swf`;
|
|
}
|
|
|
|
export function getNitroFileName(classname: string): string {
|
|
return `${getBaseClassname(classname)}.nitro`;
|
|
}
|
|
|
|
export function normalizeClassname(raw: string): string {
|
|
return raw.trim().toLowerCase();
|
|
}
|
|
|
|
export function isValidClassname(classname: string): boolean {
|
|
if (!classname) return false;
|
|
return CLASSNAME_CHAR_RE.test(classname);
|
|
}
|
|
|
|
export const LOCAL_ICON_URL_PREFIX = "/swf/dcr/hof_furni/icons/";
|
|
|
|
export function getLocalIconUrl(classname: string): string {
|
|
return `${LOCAL_ICON_URL_PREFIX}${encodeURIComponent(getIconFileName(classname))}`;
|
|
}
|
|
|
|
export function getHabboCdnIconUrl(
|
|
classname: string,
|
|
revision: number,
|
|
): string {
|
|
const base = getBaseClassname(classname);
|
|
return `https://images.habbo.com/dcr/hof_furni/${revision}/${encodeURIComponent(base)}_icon.png`;
|
|
}
|