UNPKG

@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
/** * 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