public override TokenReplacementResult ReplaceTokens(TokenReplacementContext context) { var result = new TokenReplacementResult { Value = context.Value }; if (string.IsNullOrEmpty(result.Value)) { return(result); } foreach (var tokenInfo in TokenProcessInfos) { if (!string.IsNullOrEmpty(result.Value)) { result.Value = tokenInfo.RegEx.Replace(result.Value, ResolveToken(context, context.Context, tokenInfo.Name)); result.Value = result.Value.Replace(@"//", @"/"); result.Value = result.Value.Replace(@"\\", @"\"); } } if (OnTokenReplaced != null) { OnTokenReplaced(this, new TokenReplacementResultEventArgs { Result = result }); } return(result); }
protected virtual string ResolveToken(TokenReplacementContext tokenContext, object contextObject, string token) { if (string.Equals(token, "~sitecollection", StringComparison.CurrentCultureIgnoreCase)) { if (tokenContext.IsSiteRelativeUrl) return "/"; var site = ExtractSite(contextObject); if (site.ServerRelativeUrl == "/") return string.Empty; return site.ServerRelativeUrl; } if (string.Equals(token, "~site", StringComparison.CurrentCultureIgnoreCase)) { var web = ExtractWeb(contextObject); if (tokenContext.IsSiteRelativeUrl) { var site = ExtractSite(contextObject); return "/" + web.ServerRelativeUrl.Replace(site.ServerRelativeUrl, string.Empty); } if (web.ServerRelativeUrl == "/") return string.Empty; return web.ServerRelativeUrl; } return token; }
protected virtual string ResolveToken(TokenReplacementContext tokenContext, object contextObject, string token) { if (string.Equals(token, "~sitecollection", StringComparison.CurrentCultureIgnoreCase)) { if (tokenContext.IsSiteRelativeUrl) { return("/"); } var site = ExtractSite(contextObject); // Incorrect ~site/~sitecollection tokens resolve in NavigationNodes #1025 // https://github.com/SubPointSolutions/spmeta2/issues/1025 // always return '/' instead of empty string, further replacements would fix up double-'/' //if (site.ServerRelativeUrl == "/") // return string.Empty; return(site.ServerRelativeUrl); } if (string.Equals(token, "~site", StringComparison.CurrentCultureIgnoreCase)) { var web = ExtractWeb(contextObject); if (tokenContext.IsSiteRelativeUrl) { var site = ExtractSite(contextObject); return("/" + web.ServerRelativeUrl.Replace(site.ServerRelativeUrl, string.Empty)); } // Incorrect ~site/~sitecollection tokens resolve in NavigationNodes #1025 // https://github.com/SubPointSolutions/spmeta2/issues/1025 // always return '/' instead of empty string, further replacements would fix up double-'/' //if (web.ServerRelativeUrl == "/") // return string.Empty; return(web.ServerRelativeUrl); } return(token); }
public override TokenReplacementResult ReplaceTokens(TokenReplacementContext context) { var result = new TokenReplacementResult { Value = context.Value }; if (string.IsNullOrEmpty(result.Value)) { return(result); } foreach (var tokenInfo in TokenProcessInfos) { if (!string.IsNullOrEmpty(result.Value)) { result.Value = tokenInfo.RegEx.Replace(result.Value, ResolveToken(context.Context, tokenInfo.Name)); } } return(result); }
private string ResolveToken(TokenReplacementContext tokenContext, object contextObject, string token) { if (string.Equals(token, "~sitecollection", StringComparison.CurrentCultureIgnoreCase)) { if (tokenContext.IsSiteRelativeUrl) { return("/"); } var site = ExtractSite(contextObject); if (site.ServerRelativeUrl == "/") { return(string.Empty); } return(site.ServerRelativeUrl); } if (string.Equals(token, "~site", StringComparison.CurrentCultureIgnoreCase)) { var web = ExtractWeb(contextObject); if (tokenContext.IsSiteRelativeUrl) { return("/" + web.ServerRelativeUrl.Replace(web.Site.ServerRelativeUrl, string.Empty)); } if (web.ServerRelativeUrl == "/") { return(string.Empty); } return(web.ServerRelativeUrl); } return(token); }
public override TokenReplacementResult ReplaceTokens(TokenReplacementContext context) { var result = new TokenReplacementResult { Value = context.Value }; if (string.IsNullOrEmpty(result.Value)) { return(result); } foreach (var tokenInfo in TokenProcessInfos) { if (!string.IsNullOrEmpty(result.Value)) { var replacedValue = tokenInfo.RegEx.Replace(result.Value, ResolveToken(context, context.Context, tokenInfo.Name)); if (!string.IsNullOrEmpty(replacedValue)) { // everything to '/' replacedValue = replacedValue.Replace(@"\", @"/"); // replace doubles after '://' var urlParts = replacedValue.Split(new string[] { "://" }, StringSplitOptions.RemoveEmptyEntries); // return non 'protocol://' values if (urlParts.Count() == 1) { result.Value = urlParts[0].Replace(@"//", @"/"); } else { var resultValues = new List <string>(); resultValues.Add(urlParts[0]); foreach (var value in urlParts.Skip(1)) { resultValues.Add(value.Replace(@"//", @"/")); } result.Value = string.Join("://", resultValues.ToArray()); } } else { result.Value = replacedValue; } } } // remove ending slash, SharePoint removes it everywhere if (result.Value.Length > 1) { result.Value = result.Value.TrimEnd('/'); } if (OnTokenReplaced != null) { OnTokenReplaced(this, new TokenReplacementResultEventArgs { Result = result }); } return(result); }