private static async Task <string> ParseDynamicAsync(IParseManager parseManager, string testType, string testValue, string testOperate, string loading, string yes, string no, string onBeforeSend, string onSuccess, string onComplete, string onError) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; if (string.IsNullOrEmpty(yes) && string.IsNullOrEmpty(no)) { return(string.Empty); } await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.StlClient); var elementId = StringUtils.GetElementId(); //运行解析以便为页面生成所需JS引用 if (!string.IsNullOrEmpty(yes)) { await parseManager.ParseInnerContentAsync(new StringBuilder(yes)); } if (!string.IsNullOrEmpty(no)) { await parseManager.ParseInnerContentAsync(new StringBuilder(no)); } var dynamicInfo = new DynamicInfo(parseManager.SettingsManager) { ElementName = ElementName, SiteId = pageInfo.SiteId, ChannelId = contextInfo.ChannelId, ContentId = contextInfo.ContentId, TemplateId = pageInfo.Template.Id, ElementId = elementId, LoadingTemplate = loading, SuccessTemplate = yes, FailureTemplate = no, OnBeforeSend = onBeforeSend, OnSuccess = onSuccess, OnComplete = onComplete, OnError = onError }; var ifInfo = new DynamicInfo.IfInfo { Type = testType, Op = testOperate, Value = testValue }; dynamicInfo.ElementValues = TranslateUtils.JsonSerialize(ifInfo); var dynamicUrl = parseManager.PathManager.GetIfApiUrl(); return(dynamicInfo.GetScript(dynamicUrl, true)); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string loading, string template, bool inline, string onBeforeSend, string onSuccess, string onComplete, string onError) { await parseManager.PageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.StlClient); //运行解析以便为页面生成所需JS引用 if (!string.IsNullOrEmpty(template)) { await parseManager.ParseInnerContentAsync(new StringBuilder(template)); } var dynamicInfo = new DynamicInfo(parseManager.SettingsManager) { ElementName = ElementName, SiteId = parseManager.PageInfo.SiteId, ChannelId = parseManager.ContextInfo.ChannelId, ContentId = parseManager.ContextInfo.ContentId, TemplateId = parseManager.PageInfo.Template.Id, ElementId = StringUtils.GetElementId(), LoadingTemplate = loading, SuccessTemplate = template, OnBeforeSend = onBeforeSend, OnSuccess = onSuccess, OnComplete = onComplete, OnError = onError }; var dynamicUrl = parseManager.PathManager.GetDynamicApiUrl(); return(dynamicInfo.GetScript(dynamicUrl, inline)); }
public static async Task <string> GetEachsTemplateStringAsync(string templateString, NameValueCollection selectedItems, NameValueCollection selectedValues, string containerClientId, IParseManager parseManager, ParseType contextType) { var context = parseManager.ContextInfo; var pageInfo = parseManager.PageInfo; var itemContainer = DbItemContainer.GetItemContainer(pageInfo); parseManager.ContextInfo = parseManager.ContextInfo.Clone(); parseManager.ContextInfo.ContextType = contextType; parseManager.ContextInfo.ContainerClientId = containerClientId; parseManager.ContextInfo.ItemContainer = itemContainer; if (selectedItems != null && selectedItems.Count > 0) { foreach (var itemType in selectedItems.AllKeys) { if (IsNumberInRange(itemContainer.SqlItem.Key + 1, itemType)) { templateString = selectedItems.Get(itemType); break; } } } var innerBuilder = new StringBuilder(templateString); await parseManager.ParseInnerContentAsync(innerBuilder); DbItemContainer.PopEachItem(pageInfo); parseManager.ContextInfo = context; return(innerBuilder.ToString()); }
private static async Task <string> ParseAsync(IParseManager parseManager, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var innerHtml = string.Empty; if (!string.IsNullOrEmpty(contextInfo.InnerHtml)) { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } var parsedContent = string.Empty; if (pageInfo.EditMode == EditMode.Visual) { var elementId = StringUtils.GetElementId(); VisualUtility.AddEditableToAttributes(attributes, elementId, contextInfo.ElementName); parsedContent = GetParsedContent(attributes, innerHtml); VisualUtility.AddEditableToPage(pageInfo, elementId, contextInfo, parsedContent); } else { parsedContent = GetParsedContent(attributes, innerHtml); } return(parsedContent); }
private static async Task <string> ParseAsync(IParseManager parseManager, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var parsedContent = string.Empty; if (!string.IsNullOrEmpty(contextInfo.InnerHtml)) { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); } if (pageInfo.EditMode == EditMode.Visual) { var editable = VisualUtility.GetEditable(pageInfo, contextInfo); var editableAttributes = VisualUtility.GetEditableAttributes(editable); foreach (var key in editableAttributes.AllKeys) { attributes[key] = editableAttributes[key]; } attributes["id"] = editable.Id; attributes["contenteditable"] = "true"; } return(@$ "<div {TranslateUtils.ToAttributesString(attributes)}>{parsedContent}</div>"); }
public async Task <string> ParseAsync(string template) { var builder = new StringBuilder(template); await ParseManager.ParseInnerContentAsync(builder); return(builder.ToString()); }
public static async Task <string> GetSitesTemplateStringAsync(string templateString, string containerClientId, IParseManager parseManager, ParseType contextType) { var context = parseManager.ContextInfo; var pageInfo = parseManager.PageInfo; var itemContainer = DbItemContainer.GetItemContainer(pageInfo); var siteInfo = itemContainer.SiteItem.Value; parseManager.ContextInfo = parseManager.ContextInfo.Clone(); parseManager.ContextInfo.ContainerClientId = containerClientId; parseManager.ContextInfo.ItemContainer = itemContainer; parseManager.ContextInfo.ContextType = contextType; var preSite = pageInfo.Site; var prePageChannelId = pageInfo.PageChannelId; var prePageContentId = pageInfo.PageContentId; pageInfo.ChangeSite(siteInfo, siteInfo.Id, 0, parseManager.ContextInfo); var innerBuilder = new StringBuilder(templateString); await parseManager.ParseInnerContentAsync(innerBuilder); DbItemContainer.PopSiteItems(pageInfo); pageInfo.ChangeSite(preSite, prePageChannelId, prePageContentId, parseManager.ContextInfo); parseManager.ContextInfo = context; return(innerBuilder.ToString()); }
internal static async Task <object> ParseAsync(IParseManager parseManager) { var contextInfo = parseManager.ContextInfo; // 如果是实体标签则返回空 if (contextInfo.IsStlEntity) { return(string.Empty); } var inline = false; var onBeforeSend = string.Empty; var onSuccess = string.Empty; var onComplete = string.Empty; var onError = string.Empty; foreach (var name in contextInfo.Attributes.AllKeys) { var value = contextInfo.Attributes[name]; if (StringUtils.EqualsIgnoreCase(name, Context)) { contextInfo.ContextType = TranslateUtils.ToEnum(value, ParseType.Undefined); } else if (StringUtils.EqualsIgnoreCase(name, Inline)) { inline = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, OnBeforeSend)) { onBeforeSend = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, OnSuccess)) { onSuccess = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, OnComplete)) { onComplete = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, OnError)) { onError = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } } StlParserUtility.GetLoading(contextInfo.InnerHtml, out var loading, out var template); if (!string.IsNullOrEmpty(loading)) { var innerBuilder = new StringBuilder(loading); await parseManager.ParseInnerContentAsync(innerBuilder); loading = innerBuilder.ToString(); } return(await ParseAsync(parseManager, contextInfo.Site, loading, template, inline, onBeforeSend, onSuccess, onComplete, onError)); }
private static async Task <string> ParseAsync(IParseManager parseManager, string type, string elementId, string callback, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var parsedContent = string.Empty; if (string.IsNullOrEmpty(elementId)) { elementId = StringUtils.GetElementId(); attributes["id"] = elementId; var html = string.Empty; if (!string.IsNullOrEmpty(contextInfo.InnerHtml)) { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); html = innerBuilder.ToString(); } parsedContent = $@"<span {TranslateUtils.ToAttributesString(attributes)}>{html}</span>"; } var builder = new StringBuilder(); builder.Append($@" <script type=""text/javascript"" language=""javascript""> $(document).ready(function(){{ try {{ var queryString = document.location.search; if (queryString == null || queryString.length <= 1) return; var reg = new RegExp(""(^|&){type}=([^&]*)(&|$)""); var r = queryString.substring(1).match(reg); var v = decodeURI(decodeURI(r[2])); if (r) $(""#{elementId}"").text(v);"); if (!string.IsNullOrEmpty(callback)) { builder.Append($@"{callback}(v);"); } builder.Append(@" }catch(e){} }); </script> "); if (!pageInfo.FootCodes.ContainsKey($"{ElementName}_{elementId}")) { pageInfo.FootCodes.Add($"{ElementName}_{elementId}", builder.ToString()); } return(parsedContent); }
//对“翻页项容器”(stl:pageItems)元素进行解析,此元素在生成页面时单独解析,不包含在ParseStlElement方法中。 public static async Task <string> ParseAsync(IParseManager parseManager, string stlElement, int channelId, int contentId, int currentPageIndex, int pageCount, int totalNum, ParseType contextType) { var pageInfo = parseManager.PageInfo; await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.Jquery); string parsedContent; try { var stlElementInfo = StlParserUtility.ParseStlElement(stlElement); if (stlElementInfo.Attributes[Context] != null) { contextType = TranslateUtils.ToEnum(stlElementInfo.Attributes[Context], ParseType.Undefined); } if (pageCount <= 1) { return(string.Empty); } bool isXmlContent; var index = stlElement.IndexOf(">", StringComparison.Ordinal) + 1; var length = stlElement.LastIndexOf("<", StringComparison.Ordinal) - index; if (index <= 0 || length <= 0) { stlElement = stlElementInfo.InnerHtml; isXmlContent = true; } else { stlElement = stlElement.Substring(index, length); isXmlContent = false; } parsedContent = await parseManager.ParseStlPageItemsAsync(stlElement, channelId, contentId, currentPageIndex, pageCount, totalNum, isXmlContent, contextType); var innerBuilder = new StringBuilder(parsedContent); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); } catch (Exception ex) { parsedContent = await parseManager.AddStlErrorLogAsync(ElementName, stlElement, ex); } return(parsedContent); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string funcName, string title, string url, string width, string height, bool shadeClose, string offset) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.Jquery); await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.Layer); var type = 1; var content = string.Empty; if (!string.IsNullOrEmpty(url)) { type = 2; content = $"'{url}'"; } else if (!string.IsNullOrEmpty(contextInfo.InnerHtml)) { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); var elementId = StringUtils.GetElementId(); pageInfo.BodyCodes.Add(elementId, $@"<div id=""{elementId}"" style=""display: none"">{innerBuilder}</div>"); content = $"$('#{elementId}')"; } var area = string.Empty; if (!string.IsNullOrEmpty(width) || !string.IsNullOrEmpty(height)) { area = string.IsNullOrEmpty(height) ? $@" area: '{width}'," : $@" area: ['{width}', '{height}'],"; } var offsetStr = StringUtils.StartsWith(offset, "[") ? offset : $"'{offset}'"; var script = $@"layer.open({{type: {type},{area}shadeClose: {shadeClose.ToString().ToLower()},offset:{offsetStr},title: '{title}',content: {content}}});"; return(!string.IsNullOrEmpty(funcName) ? $@"<script>function {funcName}(){{{script}}}</script>" : $@"<script>$(document).ready(function() {{{script}}});</script>"); }
private static async Task <string> ParseAsync(IParseManager parseManager, NameValueCollection attributes, string zoomId, int fontSize) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; if (string.IsNullOrEmpty(zoomId)) { zoomId = "content"; } if (!pageInfo.BodyCodes.ContainsKey(ParsePage.Const.JsAeStlZoom)) { pageInfo.BodyCodes.Add(ParsePage.Const.JsAeStlZoom, @" <script language=""JavaScript"" type=""text/javascript""> function stlDoZoom(zoomId, size){ var artibody = document.getElementById(zoomId); if(!artibody){ return; } var artibodyChild = artibody.childNodes; artibody.style.fontSize = size + 'px'; for(var i = 0; i < artibodyChild.length; i++){ if(artibodyChild[i].nodeType == 1){ artibodyChild[i].style.fontSize = size + 'px'; } } } </script> "); } string innerHtml; if (string.IsNullOrEmpty(contextInfo.InnerHtml)) { innerHtml = "缩放"; } else { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } attributes["href"] = $"javascript:stlDoZoom('{zoomId}', {fontSize});"; return($@"<a {TranslateUtils.ToAttributesString(attributes)}>{innerHtml}</a>"); }
private static async Task <string> ParseAsync(IParseManager parseManager, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var innerHtml = string.Empty; if (!string.IsNullOrEmpty(contextInfo.InnerHtml)) { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } if (pageInfo.EditMode == EditMode.Visual) { VisualUtility.AddEditableToPage(pageInfo, contextInfo, attributes, innerHtml); } return(@$ "<div {TranslateUtils.ToAttributesString(attributes)}>{innerHtml}</div>"); }
internal static async Task <string> ParseAsync(string stlEntity, IParseManager parseManager) { var parsedContent = string.Empty; parseManager.ContextInfo.IsStlEntity = true; try { var stlElement = $"<{stlEntity.Trim(' ', '{', '}')} />"; var innerBuilder = new StringBuilder(stlElement); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); } catch { // ignored } parseManager.ContextInfo.IsStlEntity = false; return(parsedContent); }
public static async Task <string> GetChannelsItemTemplateStringAsync(string templateString, NameValueCollection selectedItems, NameValueCollection selectedValues, string containerClientId, IParseManager parseManager, ParseType contextType) { var context = parseManager.ContextInfo; var pageInfo = parseManager.PageInfo; var itemContainer = DbItemContainer.GetItemContainer(pageInfo); var channel = itemContainer.ChannelItem.Value; parseManager.ContextInfo = parseManager.ContextInfo.Clone(); parseManager.ContextInfo.ContextType = contextType; parseManager.ContextInfo.ItemContainer = itemContainer; parseManager.ContextInfo.ContainerClientId = containerClientId; parseManager.ContextInfo.ChannelId = channel.Id; if (selectedItems != null && selectedItems.Count > 0) { foreach (var itemType in selectedItems.AllKeys) { if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedCurrent))//当前栏目 { if (channel.Id == pageInfo.PageChannelId) { templateString = selectedItems.Get(itemType); break; } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedImage))//带有图片的栏目 { if (!string.IsNullOrEmpty(channel.ImageUrl)) { templateString = selectedItems.Get(itemType); break; } } else if (StringUtils.StartsWithIgnoreCase(itemType, StlItemTemplate.SelectedUp))//当前栏目的上级栏目 { var upLevel = StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedUp) ? 1 : TranslateUtils.ToInt(itemType.Substring(2)); if (upLevel > 0) { var dataManager = new StlDataManager(parseManager.DatabaseManager); var theChannelId = await dataManager.GetChannelIdByLevelAsync(pageInfo.SiteId, pageInfo.PageChannelId, upLevel, -1); if (channel.Id == theChannelId) { templateString = selectedItems.Get(itemType); break; } } } else if (StringUtils.StartsWithIgnoreCase(itemType, StlItemTemplate.SelectedTop))//当前栏目从首页向下的上级栏目栏目 { var topLevel = StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedTop) ? 1 : TranslateUtils.ToInt(itemType.Substring(3)); if (topLevel >= 0) { var dataManager = new StlDataManager(parseManager.DatabaseManager); var theChannelId = await dataManager.GetChannelIdByLevelAsync(pageInfo.SiteId, pageInfo.PageChannelId, 0, topLevel); if (channel.Id == theChannelId) { templateString = selectedItems.Get(itemType); break; } } } else if (IsNumberInRange(itemContainer.ChannelItem.Key + 1, itemType)) { templateString = selectedItems.Get(itemType); break; } } } var innerBuilder = new StringBuilder(templateString); await parseManager.ParseInnerContentAsync(innerBuilder); DbItemContainer.PopChannelItem(pageInfo); parseManager.ContextInfo = context; return(innerBuilder.ToString()); }
public static async Task <string> GetContentsItemTemplateStringAsync(string templateString, NameValueCollection selectedItems, NameValueCollection selectedValues, string containerClientId, IParseManager parseManager, ParseType contextType) { var context = parseManager.ContextInfo; var pageInfo = parseManager.PageInfo; var itemContainer = DbItemContainer.GetItemContainer(pageInfo); var content = itemContainer.ContentItem.Value; parseManager.ContextInfo = parseManager.ContextInfo.Clone(); parseManager.ContextInfo.ContextType = contextType; parseManager.ContextInfo.ItemContainer = itemContainer; parseManager.ContextInfo.ContainerClientId = containerClientId; parseManager.ContextInfo.ChannelId = content.ChannelId; parseManager.ContextInfo.ContentId = content.Id; parseManager.ContextInfo.SetContent(content); var preSite = pageInfo.Site; var prePageChannelId = pageInfo.PageChannelId; var prePageContentId = pageInfo.PageContentId; if (content.SiteId != pageInfo.SiteId) { var siteInfo = await parseManager.DatabaseManager.SiteRepository.GetAsync(content.SiteId); parseManager.ContextInfo.Site = siteInfo; pageInfo.ChangeSite(siteInfo, siteInfo.Id, 0, parseManager.ContextInfo); } var theTemplateString = string.Empty; if (selectedItems != null && selectedItems.Count > 0) { foreach (var itemTypes in selectedItems.AllKeys) { var itemTypeArrayList = ListUtils.GetStringList(itemTypes); var isTrue = true; foreach (var itemType in itemTypeArrayList) { var(success, contentTemplateString) = await IsContentTemplateStringAsync(itemType, itemTypes, selectedItems, selectedValues, parseManager); if (!success) { isTrue = false; } else { theTemplateString = contentTemplateString; } } if (isTrue) { break; } theTemplateString = string.Empty; } } if (string.IsNullOrEmpty(theTemplateString)) { theTemplateString = templateString; } var innerBuilder = new StringBuilder(theTemplateString); await parseManager.ParseInnerContentAsync(innerBuilder); DbItemContainer.PopContentItem(pageInfo); if (content.SiteId != pageInfo.SiteId) { pageInfo.ChangeSite(preSite, prePageChannelId, prePageContentId, parseManager.ContextInfo); } parseManager.ContextInfo = context; return(innerBuilder.ToString()); }
public static async Task <string> GetScriptAsync(IParseManager parseManager, string dynamicApiUrl, Dynamic dynamicInfo) { if (string.IsNullOrEmpty(dynamicInfo.LoadingTemplate) && string.IsNullOrEmpty(dynamicInfo.YesTemplate) && string.IsNullOrEmpty(dynamicInfo.NoTemplate)) { return(string.Empty); } //运行解析以便为页面生成所需JS引用 await parseManager.ParseInnerContentAsync(new StringBuilder(dynamicInfo.LoadingTemplate + dynamicInfo.YesTemplate + dynamicInfo.NoTemplate)); var values = parseManager.SettingsManager.Encrypt(TranslateUtils.JsonSerialize(dynamicInfo)); var display = dynamicInfo.IsInline ? "inline-block" : "block"; var elementId = dynamicInfo.ElementId; return($@" <span id=""{elementId}_loading"">{dynamicInfo.LoadingTemplate}</span> <span id=""{elementId}_success"" style=""display: none""></span> <span id=""{elementId}_failure"" style=""display: none""></span> <script type=""text/javascript"" language=""javascript""> function stlDynamic{elementId}(page) {{ var elementId = '{elementId}'; document.getElementById('{elementId}_loading').style.display = '{display}'; document.getElementById('{elementId}_success').style.display = 'none'; document.getElementById('{elementId}_failure').style.display = 'none'; {dynamicInfo.OnBeforeSend} stlClient.post('{dynamicApiUrl}?' + StlClient.getQueryString(), {{ value: '{values}', page: page }}, function (err, data, status) {{ if (!err) {{ if (data.value) {{ {dynamicInfo.OnSuccess} document.getElementById('{elementId}_success').innerHTML = data.html; document.getElementById('{elementId}_success').style.display = '{display}'; }} else {{ document.getElementById('{elementId}_failure').innerHTML = data.html; document.getElementById('{elementId}_failure').style.display = '{display}'; }} }} else {{ {dynamicInfo.OnError} }} {dynamicInfo.OnComplete} }}); }} function stlGetPage{elementId}(){{ var page = 1; var queryString = document.location.search; if (queryString && queryString.length > 1) {{ queryString = queryString.substring(1); var arr = queryString.split('&'); for(var i=0; i < arr.length; i++) {{ var item = arr[i]; var arr2 = item.split('='); if (arr2 && arr2.length == 2) {{ if (arr2[0] === 'page') {{ page = parseInt(arr2[1]); }} }} }} }} return page; }} stlDynamic{elementId}(stlGetPage{elementId}()); function stlRedirect{elementId}(page) {{ var queryString = document.location.search; var parameters = ''; if (queryString && queryString.length > 1) {{ queryString = queryString.substring(1); var arr = queryString.split('&'); for(var i=0; i < arr.length; i++) {{ var item = arr[i]; var arr2 = item.split('='); if (arr2 && arr2.length == 2) {{ if (arr2[0] !== 'page') {{ parameters += item + '&'; }} }} }} }} parameters += 'page=' + page; location.href = location.protocol + '//' + location.host + location.pathname + location.hash + '?' + parameters; }} </script> "); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string channelIndex, string channelName, int upLevel, int topLevel, bool removeTarget, string href, string queryString, string host, Dictionary <string, string> attributes) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; attributes.TryGetValue("id", out var htmlId); if (!string.IsNullOrEmpty(htmlId) && !string.IsNullOrEmpty(contextInfo.ContainerClientId)) { htmlId = contextInfo.ContainerClientId + "_" + htmlId; } if (!string.IsNullOrEmpty(htmlId)) { attributes["id"] = htmlId; } var innerHtml = string.Empty; var url = string.Empty; var onclick = string.Empty; if (!string.IsNullOrEmpty(href)) { url = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, href, pageInfo.IsLocal); var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } else { if (contextInfo.ContextType == ParseType.Undefined) { contextInfo.ContextType = contextInfo.ContentId != 0 ? ParseType.Content : ParseType.Channel; } if (contextInfo.ContextType == ParseType.Content) //获取内容Url { var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { url = await parseManager.PathManager.GetContentUrlAsync(pageInfo.Site, contentInfo, pageInfo.IsLocal); } else { var nodeInfo = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); url = await parseManager.PathManager.GetContentUrlAsync(pageInfo.Site, nodeInfo, contextInfo.ContentId, pageInfo.IsLocal); } if (string.IsNullOrEmpty(contextInfo.InnerHtml)) { var title = contentInfo?.Title; title = ContentUtility.FormatTitle( contentInfo?.Get <string>("BackgroundContentAttribute.TitleFormatString"), title); if (pageInfo.Site.IsContentTitleBreakLine) { title = title.Replace(" ", string.Empty); } innerHtml = title; } else { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } } else if (contextInfo.ContextType == ParseType.Channel) //获取栏目Url { var dataManager = new StlDataManager(parseManager.DatabaseManager); contextInfo.ChannelId = await dataManager.GetChannelIdByLevelAsync(pageInfo.SiteId, contextInfo.ChannelId, upLevel, topLevel); contextInfo.ChannelId = await databaseManager.ChannelRepository.GetChannelIdAsync(pageInfo.SiteId, contextInfo.ChannelId, channelIndex, channelName); var channel = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); url = await parseManager.PathManager.GetChannelUrlAsync(pageInfo.Site, channel, pageInfo.IsLocal); if (string.IsNullOrWhiteSpace(contextInfo.InnerHtml)) { innerHtml = channel.ChannelName; } else { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } } } if (url.Equals(PageUtils.UnClickableUrl)) { removeTarget = true; } else { if (!string.IsNullOrEmpty(host)) { url = PageUtils.AddProtocolToUrl(url, host); } if (!string.IsNullOrEmpty(queryString)) { url = PageUtils.AddQueryString(url, queryString); } } attributes["href"] = url; if (!string.IsNullOrEmpty(onclick)) { attributes["onclick"] = onclick; } if (removeTarget) { attributes["target"] = string.Empty; } // 如果是实体标签,则只返回url if (contextInfo.IsStlEntity) { return(url); } return($@"<a {TranslateUtils.ToAttributesString(attributes)}>{innerHtml}</a>"); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, int tagLevel, int totalNum, bool isOrderByCount) { var innerHtml = StringUtils.StripTags(parseManager.ContextInfo.OuterHtml, ElementName); var tagsBuilder = new StringBuilder(); if (parseManager.ContextInfo.ContextType == ParseType.Undefined) { parseManager.ContextInfo.ContextType = parseManager.ContextInfo.ContentId != 0 ? ParseType.Content : ParseType.Channel; } var contentId = 0; if (parseManager.ContextInfo.ContextType == ParseType.Content) { contentId = parseManager.ContextInfo.ContentId; } var tags = await parseManager.DatabaseManager.ContentTagRepository.GetTagsAsync(parseManager.PageInfo.SiteId); var tagInfoList = tags; if (contentId > 0) { tagInfoList = tags.Where(x => ListUtils.Contains(x.ContentIds, contentId)).ToList(); } if (!isOrderByCount) { tagInfoList = tagInfoList.OrderBy(x => x.TagName).ToList(); } if (totalNum > 0) { tagInfoList = tagInfoList.Take(totalNum).ToList(); } tagInfoList = parseManager.DatabaseManager.ContentTagRepository.GetTagsByLevel(tagInfoList, totalNum, tagLevel); var contentInfo = parseManager.ContextInfo.Content; if (parseManager.ContextInfo.ContextType == ParseType.Content && contentInfo != null) { var tagInfoList2 = new List <ContentTag>(); var tagNameList = new List <string>(contentInfo.TagNames); foreach (var tagName in tagNameList) { if (!string.IsNullOrEmpty(tagName)) { var isAdd = false; foreach (var tagInfo in tagInfoList) { if (tagInfo.TagName == tagName) { isAdd = true; tagInfoList2.Add(tagInfo); break; } } if (!isAdd) { var tagInfo = new ContentTag { Id = 0, SiteId = parseManager.PageInfo.SiteId, ContentIds = new List <int> { contentId }, TagName = tagName, UseNum = 1 }; tagInfoList2.Add(tagInfo); } } } tagInfoList = tagInfoList2; } foreach (var tagInfo in tagInfoList) { var tagHtml = innerHtml; tagHtml = StringUtils.ReplaceIgnoreCase(tagHtml, "{Tag.Name}", tagInfo.TagName); tagHtml = StringUtils.ReplaceIgnoreCase(tagHtml, "{Tag.Count}", tagInfo.UseNum.ToString()); tagHtml = StringUtils.ReplaceIgnoreCase(tagHtml, "{Tag.Level}", tagInfo.Level.ToString()); var innerBuilder = new StringBuilder(tagHtml); await parseManager.ParseInnerContentAsync(innerBuilder); tagsBuilder.Append(innerBuilder); } return(tagsBuilder.ToString()); }
public static async Task <object> ParseAsync(IParseManager parseManager) { var leftText = string.Empty; var rightText = string.Empty; var channelIndex = string.Empty; var channelName = string.Empty; var upLevel = 0; var topLevel = -1; var type = string.Empty; var formatString = string.Empty; var no = "0"; string separator = null; var startIndex = 0; var length = 0; var wordNum = 0; var ellipsis = Constants.Ellipsis; var replace = string.Empty; var to = string.Empty; var isClearTags = false; var isReturnToBr = false; var isLower = false; var isUpper = false; var attributes = new NameValueCollection(); foreach (var name in parseManager.ContextInfo.Attributes.AllKeys) { var value = parseManager.ContextInfo.Attributes[name]; if (StringUtils.EqualsIgnoreCase(name, ChannelIndex)) { channelIndex = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, ChannelName)) { channelName = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, Parent)) { if (TranslateUtils.ToBool(value)) { upLevel = 1; } } else if (StringUtils.EqualsIgnoreCase(name, UpLevel)) { upLevel = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, TopLevel)) { topLevel = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, Type)) { type = value; } else if (StringUtils.EqualsIgnoreCase(name, LeftText)) { leftText = value; } else if (StringUtils.EqualsIgnoreCase(name, RightText)) { rightText = value; } else if (StringUtils.EqualsIgnoreCase(name, FormatString)) { formatString = value; } else if (StringUtils.EqualsIgnoreCase(name, No)) { no = value; } else if (StringUtils.EqualsIgnoreCase(name, Separator)) { separator = value; } else if (StringUtils.EqualsIgnoreCase(name, StartIndex)) { startIndex = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, Length)) { length = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, WordNum)) { wordNum = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, Ellipsis)) { ellipsis = value; } else if (StringUtils.EqualsIgnoreCase(name, Replace)) { replace = value; } else if (StringUtils.EqualsIgnoreCase(name, To)) { to = value; } else if (StringUtils.EqualsIgnoreCase(name, IsClearTags)) { isClearTags = TranslateUtils.ToBool(value, false); } else if (StringUtils.EqualsIgnoreCase(name, IsReturnToBr)) { isReturnToBr = TranslateUtils.ToBool(value, false); } else if (StringUtils.EqualsIgnoreCase(name, IsLower)) { isLower = TranslateUtils.ToBool(value, true); } else if (StringUtils.EqualsIgnoreCase(name, IsUpper)) { isUpper = TranslateUtils.ToBool(value, true); } else { attributes[name] = value; } } var dataManager = new StlDataManager(parseManager.DatabaseManager); //var channelId = await dataManager.GetChannelIdByLevelAsync(parseManager.PageInfo.SiteId, parseManager.ContextInfo.ChannelId, upLevel, topLevel); var channelId = await parseManager.DatabaseManager.ChannelRepository.GetChannelIdAsync(parseManager.PageInfo.SiteId, parseManager.ContextInfo.ChannelId, channelIndex, channelName); if (StringUtils.StartsWithIgnoreCase(type, "up") && type.IndexOf(".", StringComparison.Ordinal) != -1) { if (StringUtils.StartsWithIgnoreCase(type, "up.")) { upLevel = 1; } else { var upLevelStr = type.Substring(2, type.IndexOf(".", StringComparison.Ordinal) - 2); upLevel = TranslateUtils.ToInt(upLevelStr); } topLevel = -1; type = type.Substring(type.IndexOf(".", StringComparison.Ordinal) + 1); } else if (StringUtils.StartsWithIgnoreCase(type, "top") && type.IndexOf(".", StringComparison.Ordinal) != -1) { if (StringUtils.StartsWithIgnoreCase(type, "top.")) { topLevel = 1; } else { var topLevelStr = type.Substring(3, type.IndexOf(".", StringComparison.Ordinal) - 3); topLevel = TranslateUtils.ToInt(topLevelStr); } upLevel = 0; type = type.Substring(type.IndexOf(".", StringComparison.Ordinal) + 1); } var channel = await parseManager.DatabaseManager.ChannelRepository.GetAsync(await dataManager.GetChannelIdByLevelAsync(parseManager.PageInfo.SiteId, channelId, upLevel, topLevel)); if (parseManager.ContextInfo.IsStlEntity && string.IsNullOrEmpty(type)) { return(channel.ToDictionary()); } var parsedContent = await ParseImplAsync(parseManager, leftText, rightText, type, formatString, no, separator, startIndex, length, wordNum, ellipsis, replace, to, isClearTags, isReturnToBr, isLower, isUpper, channel, channelId, attributes); var innerBuilder = new StringBuilder(parsedContent); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); if (!StringUtils.EqualsIgnoreCase(type, StlParserUtility.PageContent)) { parsedContent = parsedContent.Replace(Constants.PagePlaceHolder, string.Empty); } return(parsedContent); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string type, int no, string src, bool isFileName, bool isFileType, bool isFileSize, bool isCount, bool isLower, bool isUpper, string leftText, string rightText, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; if (!string.IsNullOrEmpty(contextInfo.InnerHtml)) { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); contextInfo.InnerHtml = innerBuilder.ToString(); } var contentInfo = await parseManager.GetContentAsync(); var fileUrl = string.Empty; if (!string.IsNullOrEmpty(src)) { fileUrl = src; } else { if (contextInfo.ContextType == ParseType.Undefined) { contextInfo.ContextType = ParseType.Content; } if (contextInfo.ContextType == ParseType.Content) { if (contextInfo.ContentId != 0) { if (!string.IsNullOrEmpty(contentInfo?.Get <string>(type))) { if (no <= 1) { fileUrl = contentInfo.Get <string>(type); } else { var extendName = ColumnsManager.GetExtendName(type, no - 1); fileUrl = contentInfo.Get <string>(extendName); } } } } else if (contextInfo.ContextType == ParseType.Each) { fileUrl = contextInfo.ItemContainer.EachItem.Value as string; } } string parsedContent; if (isFileName) { parsedContent = PathUtils.RemoveExtension(PageUtils.GetFileNameFromUrl(fileUrl)); if (isLower) { parsedContent = StringUtils.ToLower(parsedContent); } if (isUpper) { parsedContent = StringUtils.ToUpper(parsedContent); } } else if (isFileType) { var filePath = await parseManager.PathManager.ParseSitePathAsync(pageInfo.Site, fileUrl); parsedContent = PathUtils.GetExtension(filePath).Trim('.'); if (isLower) { parsedContent = StringUtils.ToLower(parsedContent); } if (isUpper) { parsedContent = StringUtils.ToUpper(parsedContent); } } else if (isFileSize) { var filePath = await parseManager.PathManager.ParseSitePathAsync(pageInfo.Site, fileUrl); parsedContent = FileUtils.GetFileSizeByFilePath(filePath); } else if (isCount) { parsedContent = (contentInfo?.Downloads ?? 0).ToString(); } else { var inputParser = new InputParserManager(parseManager.PathManager); parsedContent = contentInfo != null ? inputParser.GetFileHtmlWithCount(pageInfo.Site, contentInfo.ChannelId, contentInfo.Id, fileUrl, attributes, contextInfo.InnerHtml, contextInfo.IsStlEntity, isLower, isUpper) : inputParser.GetFileHtmlWithoutCount(pageInfo.Site, fileUrl, attributes, contextInfo.InnerHtml, contextInfo.IsStlEntity, isLower, isUpper); } if (!string.IsNullOrEmpty(parsedContent)) { parsedContent = leftText + parsedContent + rightText; } return(parsedContent); }
public static async Task <ListInfo> GetListInfoAsync(IParseManager parseManager, ParseType contextType) { var contextInfo = parseManager.ContextInfo; var listInfo = new ListInfo { _contextType = contextType, DatabaseType = parseManager.SettingsManager.DatabaseType, ConnectionString = parseManager.SettingsManager.DatabaseConnectionString }; var innerHtml = contextInfo.InnerHtml; var itemTemplate = string.Empty; if (!string.IsNullOrEmpty(innerHtml)) { var stlElementList = StlParserUtility.GetStlElementList(innerHtml); if (stlElementList.Count > 0) { foreach (var theStlElement in stlElementList) { if (StlParserUtility.IsSpecifiedStlElement(theStlElement, StlItemTemplate.ElementName)) { var attributes = TranslateUtils.NewIgnoreCaseNameValueCollection(); var templateString = StlParserUtility.GetInnerHtml(theStlElement, attributes); if (!string.IsNullOrEmpty(templateString)) { foreach (var key in attributes.AllKeys) { if (!StringUtils.EqualsIgnoreCase(key, StlItemTemplate.Type)) { continue; } var type = attributes[key]; if (StringUtils.EqualsIgnoreCase(type, StlItemTemplate.TypeItem)) { itemTemplate = templateString; } else if (StringUtils.EqualsIgnoreCase(type, StlItemTemplate.TypeHeader)) { listInfo.HeaderTemplate = templateString; } else if (StringUtils.EqualsIgnoreCase(type, StlItemTemplate.TypeFooter)) { listInfo.FooterTemplate = templateString; } else if (StringUtils.EqualsIgnoreCase(type, StlItemTemplate.TypeAlternatingItem)) { listInfo.AlternatingItemTemplate = templateString; } else if (StringUtils.EqualsIgnoreCase(type, StlItemTemplate.TypeSelectedItem)) { if (!string.IsNullOrEmpty(attributes[StlItemTemplate.Selected])) { var selected = attributes[StlItemTemplate.Selected]; var list = new List <string>(); if (selected.IndexOf(',') != -1) { list.AddRange(selected.Split(',')); } else { if (selected.IndexOf('-') != -1) { var first = TranslateUtils.ToInt(selected.Split('-')[0]); var second = TranslateUtils.ToInt(selected.Split('-')[1]); for (var i = first; i <= second; i++) { list.Add(i.ToString()); } } else { list.Add(selected); } } foreach (string val in list) { listInfo.SelectedItems.Set(val, templateString); } if (!string.IsNullOrEmpty(attributes[StlItemTemplate.SelectedValue])) { var selectedValue = attributes[StlItemTemplate.SelectedValue]; listInfo.SelectedValues.Set(selectedValue, templateString); } } } else if (StringUtils.EqualsIgnoreCase(type, StlItemTemplate.TypeSeparator)) { var selectedValue = TranslateUtils.ToInt(attributes[StlItemTemplate.SelectedValue], 1); if (selectedValue <= 1) { listInfo.SeparatorTemplate = templateString; } else { listInfo.SeparatorRepeatTemplate = templateString; listInfo.SeparatorRepeat = selectedValue; } } } } innerHtml = innerHtml.Replace(theStlElement, string.Empty); } else if (StlParserUtility.IsSpecifiedStlElement(theStlElement, StlLoading.ElementName)) { var innerBuilder = new StringBuilder(StlParserUtility.GetInnerHtml(theStlElement)); await parseManager.ParseInnerContentAsync(innerBuilder); listInfo.LoadingTemplate = innerBuilder.ToString(); innerHtml = innerHtml.Replace(theStlElement, string.Empty); } else if (contextType == ParseType.SqlContent && StlParserUtility.IsSpecifiedStlElement(theStlElement, StlQueryString.ElementName)) { var innerBuilder = new StringBuilder(StlParserUtility.GetInnerHtml(theStlElement)); await parseManager.ParseInnerContentAsync(innerBuilder); listInfo.QueryString = innerBuilder.ToString(); innerHtml = innerHtml.Replace(theStlElement, string.Empty); } } } } if (string.IsNullOrEmpty(itemTemplate)) { listInfo.ItemTemplate = !string.IsNullOrEmpty(innerHtml) ? innerHtml : "<stl:a target=\"_blank\"></stl:a>"; } else { listInfo.ItemTemplate = itemTemplate; } var isSetDirection = false;//是否设置了direction属性 foreach (var name in contextInfo.Attributes.AllKeys) { var value = contextInfo.Attributes[name]; if (StringUtils.EqualsIgnoreCase(name, StlListBase.ChannelIndex)) { listInfo.ChannelIndex = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.ChannelName)) { listInfo.ChannelName = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Parent)) { listInfo.UpLevel = 1; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.UpLevel)) { listInfo.UpLevel = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.TopLevel)) { listInfo.TopLevel = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Scope)) { listInfo.Scope = TranslateUtils.ToEnum(value, ScopeType.Self); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.IsTop)) { listInfo.IsTop = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.IsRecommend)) { listInfo.IsRecommend = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.IsHot)) { listInfo.IsHot = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.IsColor)) { listInfo.IsColor = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.TotalNum)) { listInfo.TotalNum = TranslateUtils.ToInt(await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value)); } else if (StringUtils.EqualsIgnoreCase(name, StlPageContents.PageNum)) { listInfo.PageNum = TranslateUtils.ToInt(await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value), Constants.PageSize); } else if (StringUtils.EqualsIgnoreCase(name, StlPageContents.MaxPage)) { listInfo.MaxPage = TranslateUtils.ToInt(await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value)); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.StartNum)) { listInfo.StartNum = TranslateUtils.ToInt(await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value)); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Order)) { listInfo.Order = value; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Where)) { listInfo.Where = value; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.GroupChannel)) { listInfo.GroupChannel = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); if (string.IsNullOrEmpty(listInfo.GroupChannel)) { listInfo.GroupChannel = "__Empty__"; } } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.GroupChannelNot)) { listInfo.GroupChannelNot = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); if (string.IsNullOrEmpty(listInfo.GroupChannelNot)) { listInfo.GroupChannelNot = "__Empty__"; } } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.GroupContent) || StringUtils.EqualsIgnoreCase(name, "group")) { listInfo.GroupContent = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); if (string.IsNullOrEmpty(listInfo.GroupContent)) { listInfo.GroupContent = "__Empty__"; } } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.GroupContentNot) || StringUtils.EqualsIgnoreCase(name, "groupNot")) { listInfo.GroupContentNot = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); if (string.IsNullOrEmpty(listInfo.GroupContentNot)) { listInfo.GroupContentNot = "__Empty__"; } } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Tags)) { listInfo.Tags = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Columns)) { listInfo.Columns = TranslateUtils.ToInt(value); listInfo.Layout = Layout.Table; if (listInfo.Columns > 1 && isSetDirection == false) { listInfo.Direction = "horizontal"; } } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Direction)) { listInfo.Layout = Layout.Table; listInfo.Direction = value; isSetDirection = true; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Align)) { listInfo.Align = value; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.ItemAlign)) { listInfo.ItemAlign = value; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.ItemVerticalAlign)) { listInfo.ItemVerticalAlign = value; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.ItemClass)) { listInfo.ItemClass = value; } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.IsImage)) { listInfo.IsImage = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.IsVideo)) { listInfo.IsVideo = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.IsFile)) { listInfo.IsFile = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlContents.IsRelatedContents)) { listInfo.IsRelatedContents = TranslateUtils.ToBool(value); } else if (StringUtils.EqualsIgnoreCase(name, StlListBase.Layout)) { listInfo.Layout = TranslateUtils.ToEnum(value, Layout.None); } else if (contextType == ParseType.SqlContent && StringUtils.EqualsIgnoreCase(name, StlSqlContents.DatabaseTypeName)) { var databaseType = parseManager.SettingsManager.Configuration[name]; if (!string.IsNullOrEmpty(databaseType)) { listInfo.DatabaseType = TranslateUtils.ToEnum(databaseType, DatabaseType.MySql); } } else if (contextType == ParseType.SqlContent && StringUtils.EqualsIgnoreCase(name, StlSqlContents.DatabaseType)) { listInfo.DatabaseType = TranslateUtils.ToEnum(value, DatabaseType.MySql); } else if (contextType == ParseType.SqlContent && StringUtils.EqualsIgnoreCase(name, StlSqlContents.ConnectionStringName)) { var connectionString = parseManager.SettingsManager.Configuration[name]; if (!string.IsNullOrEmpty(connectionString)) { listInfo.ConnectionString = connectionString; } } else if (contextType == ParseType.SqlContent && StringUtils.EqualsIgnoreCase(name, StlSqlContents.ConnectionString)) { listInfo.ConnectionString = value; } else if (contextType == ParseType.SqlContent && StringUtils.EqualsIgnoreCase(name, StlSqlContents.QueryString)) { listInfo.QueryString = await parseManager.ReplaceStlEntitiesForAttributeValueAsync(value); } else { listInfo.Others.Set(name, value); } } return(listInfo); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string tabName, string type, string action, string classActive, string classNormal, int current) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; await pageInfo.AddPageBodyCodeIfNotExistsAsync(ParsePage.Const.Jquery); var builder = new StringBuilder(); var uniqueId = pageInfo.UniqueId; var isHeader = StringUtils.EqualsIgnoreCase(type, TypeHead); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(contextInfo.InnerHtml); var htmlNodes = htmlDoc.DocumentNode.ChildNodes; if (htmlNodes != null && htmlNodes.Count > 0) { if (isHeader) { builder.Append($@" <script language=javascript> function stl_tab_{uniqueId}(tabName, no){{ for ( i = 1; i <= {htmlNodes.Count}; i++){{ var el = jQuery('#{tabName}_tabContent_' + i); var li = $('#{tabName}_tabHeader_' + i); if (i == no){{ try{{ el.show(); }}catch(e){{}} li.removeClass('{classNormal}'); li.addClass('{classActive}'); }}else{{ try{{ el.hide(); }}catch(e){{}} li.removeClass('{classActive}'); li.addClass('{classNormal}'); }} }} }} </script> "); } var count = 0; foreach (var htmlNode in htmlNodes) { if (htmlNode.NodeType != HtmlNodeType.Element) { continue; } var attributes = new NameValueCollection(); if (htmlNode.Attributes != null) { foreach (var attr in htmlNode.Attributes) { if (attr == null) { continue; } var attributeName = StringUtils.ToLower(attr.Name); if (!StringUtils.EqualsIgnoreCase(attr.Name, "id") && !StringUtils.EqualsIgnoreCase(attr.Name, "onmouseover") && !StringUtils.EqualsIgnoreCase(attr.Name, "onclick")) { attributes[attributeName] = attr.Value; } } } count++; if (isHeader) { attributes["id"] = $"{tabName}_tabHeader_{count}"; if (StringUtils.EqualsIgnoreCase(action, ActionMouseOver)) { attributes["onmouseover"] = $"stl_tab_{uniqueId}('{tabName}', {count});return false;"; } else { attributes["onclick"] = $"stl_tab_{uniqueId}('{tabName}', {count});return false;"; } if (current != 0) { if (count == current) { attributes["class"] = classActive; } else { attributes["class"] = classNormal; } } } else { attributes["id"] = $"{tabName}_tabContent_{count}"; if (current != 0) { if (count != current) { attributes["style"] = $"display:none;{attributes["style"]}"; } } } var innerHtml = string.Empty; if (!string.IsNullOrEmpty(htmlNode.InnerHtml)) { var innerBuilder = new StringBuilder(htmlNode.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } builder.Append( $"<{htmlNode.Name} {TranslateUtils.ToAttributesString(attributes)}>{innerHtml}</{htmlNode.Name}>"); } } return(builder.ToString()); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, NameValueCollection attributes, string titleId, string bodyId, string logoId, string locationId) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var jsUrl = parseManager.PathManager.GetSiteFilesUrl(pageInfo.Site, Resources.Print.Js); var iconUrl = parseManager.PathManager.GetSiteFilesUrl(pageInfo.Site, Resources.Print.IconUrl); if (!pageInfo.BodyCodes.ContainsKey(ParsePage.Const.JsAfStlPrinter)) { pageInfo.BodyCodes.Add(ParsePage.Const.JsAfStlPrinter, $@" <script language=""JavaScript"" type=""text/javascript""> function stlLoadPrintJsCallBack() {{ if(typeof forSPrint == ""object"" && forSPrint.Print) {{ forSPrint.data.titleId = ""{titleId}""; forSPrint.data.artiBodyId = ""{bodyId}""; forSPrint.data.pageLogoId = ""{logoId}""; forSPrint.data.pageWayId = ""{locationId}""; forSPrint.data.iconUrl = ""{iconUrl}""; forSPrint.Print(); }} }} function stlPrintGetBrowser() {{ if (navigator.userAgent.indexOf(""MSIE"") != -1) {{ return 1; }} else if (navigator.userAgent.indexOf(""Firefox"") != -1) {{ return 2; }} else if (navigator.userAgent.indexOf(""Navigator"") != -1) {{ return 3; }} else if (navigator.userAgent.indexOf(""Opera"") != -1 ) {{ return 4; }} else {{ return 5; }} }} function stlLoadPrintJs() {{ var myBrowser = stlPrintGetBrowser(); if(myBrowser == 1) {{ var js_url = ""{jsUrl}""; var js = document.createElement( ""script"" ); js.setAttribute( ""type"", ""text/javascript"" ); js.setAttribute( ""src"", js_url); js.setAttribute( ""id"", ""printJsUrl""); document.body.insertBefore( js, null); document.getElementById(""printJsUrl"").onreadystatechange = stlLoadPrintJsCallBack; }} else {{ var js_url = ""{jsUrl}""; var js = document.createElement( ""script"" ); js.setAttribute( ""type"", ""text/javascript"" ); js.setAttribute( ""src"", js_url); js.setAttribute( ""id"", ""printJsUrl""); js.setAttribute( ""onload"", ""stlLoadPrintJsCallBack()""); document.body.insertBefore( js, null); }} }} </script> "); } string innerHtml; if (string.IsNullOrEmpty(contextInfo.InnerHtml)) { innerHtml = "打印"; } else { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } attributes["href"] = "javascript:stlLoadPrintJs();"; return($@"<a {TranslateUtils.ToAttributesString(attributes)}>{innerHtml}</a>"); }
public static async Task <object> ParseAsync(IParseManager parseManager) { var contextInfo = parseManager.ContextInfo; var leftText = string.Empty; var rightText = string.Empty; var formatString = string.Empty; var no = "0"; string separator = null; var startIndex = 0; var length = 0; var wordNum = 0; var ellipsis = Constants.Ellipsis; var replace = string.Empty; var to = string.Empty; var isClearTags = false; var isReturnToBrStr = string.Empty; var isLower = false; var isUpper = false; var isOriginal = true;//引用的时候,默认使用原来的数据 var type = string.Empty; foreach (var name in contextInfo.Attributes.AllKeys) { var value = contextInfo.Attributes[name]; if (StringUtils.EqualsIgnoreCase(name, Type)) { type = value; } else if (StringUtils.EqualsIgnoreCase(name, LeftText)) { leftText = value; } else if (StringUtils.EqualsIgnoreCase(name, RightText)) { rightText = value; } else if (StringUtils.EqualsIgnoreCase(name, FormatString)) { formatString = value; } else if (StringUtils.EqualsIgnoreCase(name, No)) { no = value; } else if (StringUtils.EqualsIgnoreCase(name, Separator)) { separator = value; } else if (StringUtils.EqualsIgnoreCase(name, StartIndex)) { startIndex = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, Length)) { length = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, WordNum)) { wordNum = TranslateUtils.ToInt(value); } else if (StringUtils.EqualsIgnoreCase(name, Ellipsis)) { ellipsis = value; } else if (StringUtils.EqualsIgnoreCase(name, Replace)) { replace = value; } else if (StringUtils.EqualsIgnoreCase(name, To)) { to = value; } else if (StringUtils.EqualsIgnoreCase(name, IsClearTags)) { isClearTags = TranslateUtils.ToBool(value, true); } else if (StringUtils.EqualsIgnoreCase(name, IsReturnToBr)) { isReturnToBrStr = value; } else if (StringUtils.EqualsIgnoreCase(name, IsLower)) { isLower = TranslateUtils.ToBool(value, true); } else if (StringUtils.EqualsIgnoreCase(name, IsUpper)) { isUpper = TranslateUtils.ToBool(value, true); } else if (StringUtils.EqualsIgnoreCase(name, IsOriginal)) { isOriginal = TranslateUtils.ToBool(value, true); } } var contentId = contextInfo.ContentId; var content = await parseManager.GetContentAsync(); if (contextInfo.IsStlEntity && string.IsNullOrEmpty(type)) { return(content.ToDictionary()); } var parsedContent = await ParseImplAsync(parseManager, leftText, rightText, formatString, no, separator, startIndex, length, wordNum, ellipsis, replace, to, isClearTags, isReturnToBrStr, isLower, isUpper, isOriginal, type, content, contentId); var innerBuilder = new StringBuilder(parsedContent); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); if (!StringUtils.EqualsIgnoreCase(type, ColumnsManager.PageContent)) { parsedContent = parsedContent.Replace(Constants.PagePlaceHolder, string.Empty); } return(parsedContent); }
private async Task <FileResult> GetContentTemplateAsync(VisualInfo visualInfo, StringBuilder contentBuilder) { var content = await _parseManager.GetContentAsync(); if (content == null) { return(null); } if (!string.IsNullOrEmpty(content.LinkUrl)) { HttpContext.Response.Redirect(content.LinkUrl); return(null); } var stlLabelList = ParseUtils.GetStlLabels(contentBuilder.ToString()); if (StlParserUtility.IsStlContentElementWithTypePageContent(stlLabelList)) //内容存在 { var stlElement = StlParserUtility.GetStlContentElementWithTypePageContent(stlLabelList); var stlElementTranslated = _parseManager.StlEncrypt(stlElement); contentBuilder.Replace(stlElement, stlElementTranslated); var innerBuilder = new StringBuilder(stlElement); await _parseManager.ParseInnerContentAsync(innerBuilder); var pageContentHtml = innerBuilder.ToString(); var pageCount = StringUtils.GetCount(Constants.PagePlaceHolder, pageContentHtml) + 1; //一共需要的页数 await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { var index = pageContentHtml.IndexOf(Constants.PagePlaceHolder, StringComparison.Ordinal); var length = index == -1 ? pageContentHtml.Length : index; if (currentPageIndex == visualInfo.PageIndex) { var pageHtml = pageContentHtml.Substring(0, length); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml)); await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount); return(GetResponse(pagedBuilder.ToString())); } if (index != -1) { pageContentHtml = pageContentHtml.Substring(length + Constants.PagePlaceHolder.Length); } } } if (ParseUtils.IsStlElementExists(StlPageContents.ElementName, stlLabelList)) //如果标签中存在<stl:pageContents> { var stlElement = ParseUtils.GetStlElement(StlPageContents.ElementName, stlLabelList); var stlElementTranslated = _parseManager.StlEncrypt(stlElement); var pageContentsElementParser = await StlPageContents.GetAsync(stlElement, _parseManager); var(pageCount, totalNum) = pageContentsElementParser.GetPageCount(); await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == visualInfo.PageIndex) { var pageHtml = await pageContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml)); await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount); return(GetResponse(pagedBuilder.ToString())); } } } else if (ParseUtils.IsStlElementExists(StlPageChannels.ElementName, stlLabelList)) //如果标签中存在<stl:pageChannels> { var stlElement = ParseUtils.GetStlElement(StlPageChannels.ElementName, stlLabelList); var stlElementTranslated = _parseManager.StlEncrypt(stlElement); var pageChannelsElementParser = await StlPageChannels.GetAsync(stlElement, _parseManager); var pageCount = pageChannelsElementParser.GetPageCount(out _); await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == visualInfo.PageIndex) { var pageHtml = await pageChannelsElementParser.ParseAsync(currentPageIndex, pageCount); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml)); await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount); return(GetResponse(pagedBuilder.ToString())); } } } else if (ParseUtils.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList) ) //如果标签中存在<stl:pageSqlContents> { var stlElement = ParseUtils.GetStlElement(StlPageSqlContents.ElementName, stlLabelList); var stlElementTranslated = _parseManager.StlEncrypt(stlElement); var pageSqlContentsElementParser = await StlPageSqlContents.GetAsync(stlElement, _parseManager); var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum); await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == visualInfo.PageIndex) { var pageHtml = await pageSqlContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml)); await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount); return(GetResponse(pagedBuilder.ToString())); } } } await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); await _parseManager.ReplacePageElementsInContentPageAsync(contentBuilder, stlLabelList, 0, 1); return(GetResponse(contentBuilder.ToString())); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string type, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var parsedContent = string.Empty; if (pageInfo?.User == null) { return(string.Empty); } if (!string.IsNullOrEmpty(contextInfo.InnerHtml)) { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); } try { if (StringUtils.EqualsIgnoreCase(nameof(User.Id), type)) { parsedContent = pageInfo.User.Id.ToString(); } else if (StringUtils.EqualsIgnoreCase(nameof(User.UserName), type)) { parsedContent = pageInfo.User.UserName; } else if (StringUtils.EqualsIgnoreCase(nameof(User.CreatedDate), type)) { parsedContent = DateUtils.Format(pageInfo.User.CreatedDate, string.Empty); } else if (StringUtils.EqualsIgnoreCase(nameof(User.LastActivityDate), type)) { parsedContent = DateUtils.Format(pageInfo.User.LastActivityDate, string.Empty); } else if (StringUtils.EqualsIgnoreCase(nameof(User.CountOfLogin), type)) { parsedContent = pageInfo.User.CountOfLogin.ToString(); } else if (StringUtils.EqualsIgnoreCase(nameof(User.DisplayName), type)) { parsedContent = pageInfo.User.DisplayName; } else if (StringUtils.EqualsIgnoreCase(nameof(User.Email), type)) { parsedContent = pageInfo.User.Email; } else if (StringUtils.EqualsIgnoreCase(nameof(User.Mobile), type)) { parsedContent = pageInfo.User.Mobile; } else if (StringUtils.EqualsIgnoreCase(nameof(User.AvatarUrl), type)) { parsedContent = parseManager.PathManager.GetUserAvatarUrl(pageInfo.User); if (!contextInfo.IsStlEntity) { attributes["src"] = parsedContent; parsedContent = $@"<img {TranslateUtils.ToAttributesString(attributes)}>"; } } else { parsedContent = pageInfo.User.Get <string>(type); } } catch { // ignored } return(parsedContent); }
public static async Task <string> ParseDynamicAsync(IParseManager parseManager, Dynamic dynamicInfo, string template) { var databaseManager = parseManager.DatabaseManager; if (string.IsNullOrEmpty(template)) { return(string.Empty); } var templateInfo = await databaseManager.TemplateRepository.GetAsync(dynamicInfo.TemplateId); var siteInfo = await databaseManager.SiteRepository.GetAsync(dynamicInfo.SiteId); await parseManager.InitAsync(EditMode.Default, siteInfo, dynamicInfo.ChannelId, dynamicInfo.ContentId, templateInfo); parseManager.PageInfo.User = dynamicInfo.User; var templateContent = StlRequest.ParseRequestEntities(dynamicInfo.QueryString, template); var contentBuilder = new StringBuilder(templateContent); var stlElementList = ParseUtils.GetStlElements(contentBuilder.ToString()); var pageIndex = dynamicInfo.Page - 1; //如果标签中存在<stl:pageContents> if (ParseUtils.IsStlElementExists(StlPageContents.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageContents.ElementName, stlElementList); var stlPageContentsElement = stlElement; var stlPageContentsElementReplaceString = stlElement; var pageContentsElementParser = await StlPageContents.GetAsync(stlPageContentsElement, parseManager, dynamicInfo.Query); var(pageCount, totalNum) = pageContentsElementParser.GetPageCount(); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == pageIndex) { var pageHtml = await pageContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); contentBuilder.Replace(stlPageContentsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } } //如果标签中存在<stl:pageChannels> else if (ParseUtils.IsStlElementExists(StlPageChannels.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageChannels.ElementName, stlElementList); var stlPageChannelsElement = stlElement; var stlPageChannelsElementReplaceString = stlElement; var pageChannelsElementParser = await StlPageChannels.GetAsync(stlPageChannelsElement, parseManager); var pageCount = pageChannelsElementParser.GetPageCount(out var totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await pageChannelsElementParser.ParseAsync(currentPageIndex, pageCount); contentBuilder.Replace(stlPageChannelsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } //如果标签中存在<stl:pageSqlContents> else if (ParseUtils.IsStlElementExists(StlPageSqlContents.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageSqlContents.ElementName, stlElementList); var stlPageSqlContentsElement = stlElement; var stlPageSqlContentsElementReplaceString = stlElement; var pageSqlContentsElementParser = await StlPageSqlContents.GetAsync(stlPageSqlContentsElement, parseManager); var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await pageSqlContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); contentBuilder.Replace(stlPageSqlContentsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } else if (ParseUtils.IsStlElementExists(StlPageItems.ElementName, stlElementList)) { var pageCount = TranslateUtils.ToInt(dynamicInfo.QueryString["pageCount"]); var totalNum = TranslateUtils.ToInt(dynamicInfo.QueryString["totalNum"]); var pageContentsAjaxDivId = dynamicInfo.QueryString["pageContentsAjaxDivId"]; for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, pageContentsAjaxDivId); break; } } await parseManager.ParseInnerContentAsync(contentBuilder); //var parsedContent = StlParserUtility.GetBackHtml(contentBuilder.ToString(), pageInfo); //return pageInfo.HeadCodesHtml + pageInfo.BodyCodesHtml + parsedContent + pageInfo.FootCodesHtml; return(contentBuilder.ToString()); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string testType, string testOperate, string testValue, string onBeforeSend, string onSuccess, string onComplete, string onError) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; StlParserUtility.GetLoadingYesNo(contextInfo.InnerHtml, out var loading, out var yes, out var no); if (StringUtils.EqualsIgnoreCase(testType, TypeIsUserLoggin)) { return(await ParseDynamicAsync(parseManager, testType, testValue, testOperate, loading, yes, no, onBeforeSend, onSuccess, onComplete, onError)); } var isSuccess = false; if (StringUtils.EqualsIgnoreCase(testType, TypeChannelName)) { var channelName = await databaseManager.ChannelRepository.GetChannelNameAsync(pageInfo.SiteId, contextInfo.ChannelId); isSuccess = TestTypeValue(testOperate, testValue, channelName); } else if (StringUtils.EqualsIgnoreCase(testType, TypeChannelIndex)) { var channelIndex = await databaseManager.ChannelRepository.GetIndexNameAsync(pageInfo.SiteId, contextInfo.ChannelId); isSuccess = TestTypeValue(testOperate, testValue, channelIndex); } else if (StringUtils.EqualsIgnoreCase(testType, TypeTemplateName)) { isSuccess = TestTypeValue(testOperate, testValue, pageInfo.Template.TemplateName); } else if (StringUtils.EqualsIgnoreCase(testType, TypTemplateType)) { isSuccess = TestTypeValue(testOperate, testValue, pageInfo.Template.TemplateType.GetValue()); } else if (StringUtils.EqualsIgnoreCase(testType, TypeTopLevel)) { var topLevel = await databaseManager.ChannelRepository.GetTopLevelAsync(pageInfo.SiteId, contextInfo.ChannelId); isSuccess = IsNumber(topLevel, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeUpChannel)) { isSuccess = await TestTypeUpChannelAsync(parseManager, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeUpChannelOrSelf)) { isSuccess = await TestTypeUpChannelOrSelfAsync(parseManager, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeSelfChannel)) { isSuccess = pageInfo.PageChannelId == contextInfo.ChannelId; } else if (StringUtils.EqualsIgnoreCase(testType, TypeGroupChannel)) { var channel = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); isSuccess = TestTypeValues(testOperate, testValue, channel.GroupNames); } else if (StringUtils.EqualsIgnoreCase(testType, TypeGroupContent)) { if (contextInfo.ContextType == ParseType.Content) { var content = await parseManager.GetContentAsync(); if (content != null) { var groupContents = content.GroupNames; isSuccess = TestTypeValues(testOperate, testValue, groupContents); } } } else if (StringUtils.EqualsIgnoreCase(testType, TypeAddDate)) { var addDate = await GetAddDateByContextAsync(parseManager); isSuccess = IsDateTime(addDate, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeLastModifiedDate)) { var lastModifiedDate = await GetLastModifiedDateGetAsync(parseManager); isSuccess = IsDateTime(lastModifiedDate, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeItemIndex)) { var itemIndex = StlParserUtility.GetItemIndex(contextInfo); isSuccess = IsNumber(itemIndex, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeOddItem)) { var itemIndex = StlParserUtility.GetItemIndex(contextInfo); isSuccess = itemIndex % 2 == 1; } else { isSuccess = await TestTypeDefaultAsync(parseManager, testType, testOperate, testValue); } var parsedContent = isSuccess ? yes : no; if (string.IsNullOrEmpty(parsedContent)) { return(string.Empty); } var innerBuilder = new StringBuilder(parsedContent); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); return(parsedContent); }
private static async Task <string> ParseAsync(IParseManager parseManager, string type) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var attributes = new NameValueCollection(); foreach (var attributeName in contextInfo.Attributes.AllKeys) { attributes[attributeName] = contextInfo.Attributes[attributeName]; } string htmlId = attributes["id"]; var url = PageUtils.UnClickableUrl; var onclick = string.Empty; var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); var innerHtml = innerBuilder.ToString(); //计算动作开始 if (!string.IsNullOrEmpty(type)) { if (StringUtils.EqualsIgnoreCase(type, TypeTranslate)) { await pageInfo.AddPageBodyCodeIfNotExistsAsync(ParsePage.Const.JsAhTranslate); var msgToTraditionalChinese = "繁體"; var msgToSimplifiedChinese = "简体"; if (!string.IsNullOrEmpty(innerHtml)) { if (innerHtml.IndexOf(",", StringComparison.Ordinal) != -1) { msgToTraditionalChinese = innerHtml.Substring(0, innerHtml.IndexOf(",", StringComparison.Ordinal)); msgToSimplifiedChinese = innerHtml.Substring(innerHtml.IndexOf(",", StringComparison.Ordinal) + 1); } else { msgToTraditionalChinese = innerHtml; } } innerHtml = msgToTraditionalChinese; if (string.IsNullOrEmpty(htmlId)) { htmlId = "translateLink"; } pageInfo.FootCodes[TypeTranslate] = $@" <script type=""text/javascript""> var defaultEncoding = 0; var translateDelay = 0; var cookieDomain = ""/""; var msgToTraditionalChinese = ""{msgToTraditionalChinese}""; var msgToSimplifiedChinese = ""{msgToSimplifiedChinese}""; var translateButtonId = ""{htmlId}""; translateInitilization(); </script> "; } else if (StringUtils.EqualsIgnoreCase(type, TypeClose)) { url = "javascript:window.close()"; } } //计算动作结束 attributes["href"] = url; if (!string.IsNullOrEmpty(htmlId)) { attributes["id"] = htmlId; } if (!string.IsNullOrEmpty(onclick)) { attributes["onclick"] = onclick; } // 如果是实体标签,则只返回url return(contextInfo.IsStlEntity ? url : $@"<a {TranslateUtils.ToAttributesString(attributes)}>{innerHtml}</a>"); }