@mikezimm/fps-core-v7
Version:
Library of reusable core interfaces, types and constants migrated from fps-library-v2
211 lines (210 loc) • 8.2 kB
JavaScript
/**
* CodeAnalizerComment: Updated 1 imports on 2024-09-21 23:07:24
* Update:: import { ISimpleLink } to '@mikezimm/fps-core-v7/lib/logic/Links/interfaces/ISimpleLink;'
*/
// import { CurrentOrigin, CurrentPathname } from "../Strings/getSiteCollectionUrlFromLink";
import { CurrentOrigin, CurrentPathname } from "../../components/molecules/source-props/WindowLocationConstants";
export function getBrowser(validTypes, changeSiteIcon) {
let thisBrowser = "";
return thisBrowser;
}
export function amIOnThisWeb(webUrl) {
let result = false;
let ImOnThisWeb = getWebUrlFromLink(null, 'abs');
webUrl = getWebUrlFromLink(webUrl, 'abs');
if (ImOnThisWeb == webUrl) {
result = true;
}
return result;
}
/**
* Takes in full url like from a list or library and tries to trim it down to a web url.
* Only is able to fix some links to common lists, libraries and system pages
* @param SiteLink
* @param absoluteOrRelative
* @returns
*/
export function getWebUrlFromLink(SiteLink, absoluteOrRelative) {
if (!SiteLink || SiteLink === '') {
SiteLink = `${CurrentPathname}`;
}
else {
SiteLink = SiteLink + '';
}
//Remove all search parameters first
if (SiteLink.toLowerCase().indexOf('?') > 0) {
SiteLink = SiteLink.toLowerCase().substring(0, SiteLink.toLowerCase().indexOf('?'));
}
if (SiteLink.toLowerCase().indexOf('/sitepages/') > 0) {
SiteLink = SiteLink.toLowerCase().substring(0, SiteLink.toLowerCase().indexOf('/sitepages/'));
}
if (SiteLink.toLowerCase().indexOf('/documents/') > 0) {
SiteLink = SiteLink.toLowerCase().substring(0, SiteLink.toLowerCase().indexOf('/documents/'));
}
if (SiteLink.toLowerCase().indexOf('/siteassets/') > 0) {
SiteLink = SiteLink.toLowerCase().substring(0, SiteLink.toLowerCase().indexOf('/siteassets/'));
}
if (SiteLink.toLowerCase().indexOf('/lists/') > 0) {
SiteLink = SiteLink.toLowerCase().substring(0, SiteLink.toLowerCase().indexOf('/lists/'));
}
if (SiteLink.toLowerCase().indexOf('/_layouts/') > 0) {
SiteLink = SiteLink.toLowerCase().substring(0, SiteLink.toLowerCase().indexOf('/_layouts/'));
}
if (SiteLink.toLowerCase().indexOf('/forms/') > 0) {
SiteLink = SiteLink.toLowerCase().substring(0, SiteLink.toLowerCase().indexOf('/forms/'));
//Need to take up one more notch
SiteLink = SiteLink.substr(0, SiteLink.lastIndexOf('/'));
}
if (absoluteOrRelative === 'abs') {
if (SiteLink.toLowerCase().indexOf('/sites/') === 0) {
SiteLink = CurrentOrigin + SiteLink;
}
}
else if (absoluteOrRelative === 'rel') {
if (SiteLink.toLowerCase().indexOf(CurrentOrigin) === 0) {
SiteLink = SiteLink.substring(CurrentOrigin.length);
}
}
else {
alert('whoops.... unexpected paramter in getWebUrlFromLink: absoluteOrRelative = ' + absoluteOrRelative);
}
return SiteLink;
}
/**
* https://github.com/fps-solutions/SayWhat/issues/153
* Added optional url params to getUrlVars functions to remove the teams bloat and clean up analytics.
*/
export const TeamsBloatUrlParamsToStrip = [
'xsdata',
'tenantId',
'groupId',
'ctx',
'context',
'ref',
'msLaunch',
'enableMobilePage',
'app',
'source'
];
export function getUrlVarsAsObject(options) {
if (!location.search || location.search.length === 0) {
return {};
}
const rawVars = location.search
.slice(1)
.split('&')
.map(p => p.split('='))
.reduce((obj, pair) => {
/**
* Was this prior to 11/20/2025 (added with the removal params)
* .reduce((obj, pair) => {
const [key, value] = pair.map(decodeURIComponent);
return ({ ...obj, [key]: value }) ;
*/
const key = decodeURIComponent(pair[0]);
const value = decodeURIComponent(pair[1] || '');
obj[key] = value;
return obj;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}, {});
if (!options || !options.remove || options.remove.length === 0) {
return rawVars;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const cleaned = {};
Object.keys(rawVars).forEach(key => {
if (options.remove.indexOf(key) === -1) {
cleaned[key] = rawVars[key];
}
});
return cleaned;
}
/**
* getUrlVarsAsStrings was originally: getUrlVars
* turns url variables array of strings like `param=value`;
* This was originally from Pivot Tiles
* https://github.com/fps-solutions/SayWhat/issues/153
*
* @param options - Added to remove Teams Bloat in params... pass in TeamsBloatUrlParamsToStrip to clean those up
* @returns
*/
export function getUrlVarsAsStrings(options) {
if (!location.search || location.search.length === 0) {
return [];
}
const vars = getUrlVarsAsObject(options);
const params = Object.keys(vars).map(k => { return k + '=' + vars[k]; });
return params;
}
/**
* https://github.com/fps-solutions/SayWhat/issues/153
* ElphabApproved = OneNight ( squashBug(longURL) && defiedGravity('11/20/25') )
* Returns URL parameters as a string, trimmed to a maximum length.
* If the joined params exceed maxLength, trims and appends
* "& TEAMS_BLOAT_SERVICE=true" to indicate bloat was removed.
*
* @param remove Optional array of URL parameter keys to strip out (defaults to Teams bloat params)
* @param maxLength Maximum total length of final string (default 250)
*/
export function getUrlParamsWithBloatCheck(remove, maxLength = 247) {
// Default: remove known Teams bloat params
const paramsToRemove = remove || TeamsBloatUrlParamsToStrip;
// Get array of params as strings, bloat removed
const joined = getUrlVarsAsStrings({ remove: paramsToRemove }).join(' & ');
// If under limit, return as-is
if (joined.length <= maxLength) {
return joined;
}
// Calculate how many chars we are removing
const removedChars = joined.length - maxLength;
// Dynamic flag with removed char count
const flag = `TEAMS_BLOAT_SERVICE=-${removedChars} & `;
// Adjust trim length to fit flag
const allowedLength = maxLength - flag.length;
const trimmed = joined.slice(0, allowedLength);
return flag + trimmed;
}
/**
* Returns standard link object with Url and Description
* 2025-02-25: NOTE: This does NOT TRIM the PageURL... and SharePoint Url Columns MUST be trimmed to 255 chars.
* @returns
*/
export function getCurrentPageLink() {
let PageURL = window.location.href;
let PageTitle = PageURL;
if (PageTitle.indexOf('?') > 0) {
PageTitle = PageTitle.substring(0, PageTitle.indexOf('?'));
} //2021-05-10: Removed -1 because page title was missing last character.
let PageLink = {
'Url': PageURL,
'Description': PageTitle.substring(PageTitle.lastIndexOf("/") + 1),
};
return PageLink;
}
/**
* Returns standard link object with Url and Description
* @param TargetList
* @param webTitle
* @returns
*/
export function makeListLink(TargetList, webTitle) {
let targetList = !TargetList ? null : {
'Url': TargetList.indexOf('http') === 0 ? TargetList : CurrentOrigin + TargetList,
'Description': TargetList.replace(CurrentOrigin, '').replace(webTitle, '').replace(webTitle.toLowerCase(), '').replace('/lists', ''),
};
return targetList;
}
/**
* Returns standard link object with Url and Description
* @param TargetSite
* @param webTitle
* @returns
*/
export function makeSiteLink(TargetSite, webTitle) {
let targetSite = !TargetSite ? null : {
'Url': TargetSite && TargetSite.indexOf('http') === 0 ? TargetSite : CurrentOrigin + TargetSite,
'Description': webTitle ? webTitle : TargetSite.replace(CurrentOrigin, ''),
};
return targetSite;
}
//# sourceMappingURL=UrlFunctions.js.map