private static string ParseImpl(PageInfo pageInfo, ContextInfo contextInfo, HtmlAnchor stlAnchor, string type, string emptyText, string tipText, int wordNum, bool isKeyboard) { string parsedContent; string successTemplateString; string failureTemplateString; StlParserUtility.GetYesNo(contextInfo.InnerHtml, out successTemplateString, out failureTemplateString); if (string.IsNullOrEmpty(successTemplateString)) { var nodeInfo = ChannelManager.GetChannelInfo(pageInfo.SiteId, contextInfo.ChannelId); if (type.ToLower().Equals(TypePreviousChannel.ToLower()) || type.ToLower().Equals(TypeNextChannel.ToLower())) { var taxis = nodeInfo.Taxis; var isNextChannel = !StringUtils.EqualsIgnoreCase(type, TypePreviousChannel); //var siblingChannelId = DataProvider.ChannelDao.GetIdByParentIdAndTaxis(nodeInfo.ParentId, taxis, isNextChannel); var siblingChannelId = StlChannelCache.GetIdByParentIdAndTaxis(nodeInfo.ParentId, taxis, isNextChannel); if (siblingChannelId != 0) { var siblingNodeInfo = ChannelManager.GetChannelInfo(pageInfo.SiteId, siblingChannelId); var url = PageUtility.GetChannelUrl(pageInfo.SiteInfo, siblingNodeInfo, pageInfo.IsLocal); if (url.Equals(PageUtils.UnclickedUrl)) { stlAnchor.Target = string.Empty; } stlAnchor.HRef = url; if (string.IsNullOrEmpty(contextInfo.InnerHtml)) { stlAnchor.InnerHtml = ChannelManager.GetChannelName(pageInfo.SiteId, siblingChannelId); if (wordNum > 0) { stlAnchor.InnerHtml = StringUtils.MaxLengthText(stlAnchor.InnerHtml, wordNum); } } else { contextInfo.ChannelId = siblingChannelId; var innerBuilder = new StringBuilder(contextInfo.InnerHtml); StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo); stlAnchor.InnerHtml = innerBuilder.ToString(); } } } else if (type.ToLower().Equals(TypePreviousContent.ToLower()) || type.ToLower().Equals(TypeNextContent.ToLower())) { if (contextInfo.ContentId != 0) { var taxis = contextInfo.ContentInfo.Taxis; var isNextContent = !StringUtils.EqualsIgnoreCase(type, TypePreviousContent); var tableName = ChannelManager.GetTableName(pageInfo.SiteInfo, contextInfo.ChannelId); //var siblingContentId = DataProvider.ContentDao.GetContentId(tableName, contextInfo.ChannelId, taxis, isNextContent); var siblingContentId = StlContentCache.GetContentId(tableName, contextInfo.ChannelId, taxis, isNextContent); if (siblingContentId != 0) { //var siblingContentInfo = DataProvider.ContentDao.GetContentInfo(tableStyle, tableName, siblingContentId); var siblingContentInfo = ContentManager.GetContentInfo(pageInfo.SiteInfo, contextInfo.ChannelId, siblingContentId); var url = PageUtility.GetContentUrl(pageInfo.SiteInfo, siblingContentInfo, pageInfo.IsLocal); if (url.Equals(PageUtils.UnclickedUrl)) { stlAnchor.Target = string.Empty; } stlAnchor.HRef = url; if (isKeyboard) { var keyCode = isNextContent ? 39 : 37; var scriptContent = new StringBuilder(); pageInfo.AddPageBodyCodeIfNotExists(PageInfo.Const.Jquery); scriptContent.Append($@"<script language=""javascript"" type=""text/javascript""> $(document).keydown(function(event){{ if(event.keyCode=={keyCode}){{location = '{url}';}} }}); </script> "); var nextOrPrevious = isNextContent ? "nextContent" : "previousContent"; pageInfo.BodyCodes[nextOrPrevious] = scriptContent.ToString(); } if (string.IsNullOrEmpty(contextInfo.InnerHtml)) { stlAnchor.InnerHtml = siblingContentInfo.Title; if (wordNum > 0) { stlAnchor.InnerHtml = StringUtils.MaxLengthText(stlAnchor.InnerHtml, wordNum); } } else { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); contextInfo.ContentId = siblingContentId; StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo); stlAnchor.InnerHtml = innerBuilder.ToString(); } } } } parsedContent = string.IsNullOrEmpty(stlAnchor.HRef) ? emptyText : ControlUtils.GetControlRenderHtml(stlAnchor); } else { var nodeInfo = ChannelManager.GetChannelInfo(pageInfo.SiteId, contextInfo.ChannelId); var isSuccess = false; var theContextInfo = contextInfo.Clone(); if (type.ToLower().Equals(TypePreviousChannel.ToLower()) || type.ToLower().Equals(TypeNextChannel.ToLower())) { var taxis = nodeInfo.Taxis; var isNextChannel = !StringUtils.EqualsIgnoreCase(type, TypePreviousChannel); //var siblingChannelId = DataProvider.ChannelDao.GetIdByParentIdAndTaxis(nodeInfo.ParentId, taxis, isNextChannel); var siblingChannelId = StlChannelCache.GetIdByParentIdAndTaxis(nodeInfo.ParentId, taxis, isNextChannel); if (siblingChannelId != 0) { isSuccess = true; theContextInfo.ContextType = EContextType.Channel; theContextInfo.ChannelId = siblingChannelId; } } else if (type.ToLower().Equals(TypePreviousContent.ToLower()) || type.ToLower().Equals(TypeNextContent.ToLower())) { if (contextInfo.ContentId != 0) { var taxis = contextInfo.ContentInfo.Taxis; var isNextContent = !StringUtils.EqualsIgnoreCase(type, TypePreviousContent); var tableName = ChannelManager.GetTableName(pageInfo.SiteInfo, contextInfo.ChannelId); //var siblingContentId = DataProvider.ContentDao.GetContentId(tableName, contextInfo.ChannelId, taxis, isNextContent); var siblingContentId = StlContentCache.GetContentId(tableName, contextInfo.ChannelId, taxis, isNextContent); if (siblingContentId != 0) { isSuccess = true; theContextInfo.ContextType = EContextType.Content; theContextInfo.ContentId = siblingContentId; theContextInfo.ContentInfo = null; } } } parsedContent = isSuccess ? successTemplateString : failureTemplateString; if (!string.IsNullOrEmpty(parsedContent)) { var innerBuilder = new StringBuilder(parsedContent); StlParserManager.ParseInnerContent(innerBuilder, pageInfo, theContextInfo); parsedContent = innerBuilder.ToString(); } } parsedContent = tipText + parsedContent; return(parsedContent); }
private static string ParseImpl(PageInfo pageInfo, ContextInfo contextInfo, string testType, string testOperate, string testValue) { string successTemplateString; string failureTemplateString; StlParserUtility.GetYesNo(contextInfo.InnerHtml, out successTemplateString, out failureTemplateString); if (StringUtils.EqualsIgnoreCase(testType, TypeIsUserLoggin) || StringUtils.EqualsIgnoreCase(testType, TypeIsAdministratorLoggin) || StringUtils.EqualsIgnoreCase(testType, TypeIsUserOrAdministratorLoggin)) { StlParserManager.ParseInnerContent(new StringBuilder(successTemplateString), pageInfo, contextInfo); StlParserManager.ParseInnerContent(new StringBuilder(failureTemplateString), pageInfo, contextInfo); return(TestTypeDynamic(pageInfo, contextInfo, testType, testValue, testOperate, successTemplateString, failureTemplateString)); } var isSuccess = false; if (StringUtils.EqualsIgnoreCase(testType, TypeChannelName)) { var channelName = ChannelManager.GetChannelInfo(pageInfo.SiteId, contextInfo.ChannelId).ChannelName; isSuccess = TestTypeValue(testOperate, testValue, channelName); } else if (StringUtils.EqualsIgnoreCase(testType, TypeChannelIndex)) { var channelIndex = ChannelManager.GetChannelInfo(pageInfo.SiteId, contextInfo.ChannelId).IndexName; isSuccess = TestTypeValue(testOperate, testValue, channelIndex); } else if (StringUtils.EqualsIgnoreCase(testType, TypeTemplateName)) { isSuccess = TestTypeValue(testOperate, testValue, pageInfo.TemplateInfo.TemplateName); } else if (StringUtils.EqualsIgnoreCase(testType, TypTemplateType)) { isSuccess = TestTypeValue(testOperate, testValue, pageInfo.TemplateInfo.TemplateType.Value); } else if (StringUtils.EqualsIgnoreCase(testType, TypeTopLevel)) { var topLevel = ChannelManager.GetTopLevel(pageInfo.SiteId, contextInfo.ChannelId); isSuccess = IsNumber(topLevel, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeUpChannel)) { isSuccess = TestTypeUpChannel(pageInfo, contextInfo, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeUpChannelOrSelf)) { isSuccess = TestTypeUpChannelOrSelf(pageInfo, contextInfo, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeSelfChannel)) { isSuccess = pageInfo.PageChannelId == contextInfo.ChannelId; } else if (StringUtils.EqualsIgnoreCase(testType, TypeGroupChannel)) { var groupChannels = TranslateUtils.StringCollectionToStringList( ChannelManager.GetChannelInfo(pageInfo.SiteId, contextInfo.ChannelId).GroupNameCollection); isSuccess = TestTypeValues(testOperate, testValue, groupChannels); } else if (StringUtils.EqualsIgnoreCase(testType, TypeGroupContent)) { if (contextInfo.ContextType == EContextType.Content) { var tableName = ChannelManager.GetTableName(pageInfo.SiteInfo, contextInfo.ChannelId); //var groupContents = TranslateUtils.StringCollectionToStringList(DataProvider.ContentDao.GetValue(tableName, contextInfo.ContentId, ContentAttribute.ContentGroupNameCollection)); var groupContents = TranslateUtils.StringCollectionToStringList(StlContentCache.GetValue(tableName, contextInfo.ContentId, ContentAttribute.GroupNameCollection)); isSuccess = TestTypeValues(testOperate, testValue, groupContents); } } else if (StringUtils.EqualsIgnoreCase(testType, TypeAddDate)) { var addDate = GetAddDateByContext(pageInfo, contextInfo); isSuccess = IsDateTime(addDate, testOperate, testValue); } else if (StringUtils.EqualsIgnoreCase(testType, TypeLastEditDate)) { var lastEditDate = GetLastEditDateByContext(contextInfo); isSuccess = IsDateTime(lastEditDate, 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 = TestTypeDefault(pageInfo, contextInfo, testType, testOperate, testValue); } var parsedContent = isSuccess ? successTemplateString : failureTemplateString; if (string.IsNullOrEmpty(parsedContent)) { return(string.Empty); } var innerBuilder = new StringBuilder(parsedContent); StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo); parsedContent = innerBuilder.ToString(); return(parsedContent); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, NameValueCollection attributes, string type, string emptyText, string tipText, int wordNum, bool isKeyboard) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; string parsedContent; var innerHtml = string.Empty; StlParserUtility.GetYesNo(contextInfo.InnerHtml, out var successTemplateString, out var failureTemplateString); var contentInfo = await parseManager.GetContentAsync(); if (string.IsNullOrEmpty(successTemplateString)) { var nodeInfo = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); if (StringUtils.EqualsIgnoreCase(type, TypePreviousChannel) || StringUtils.EqualsIgnoreCase(type, TypeNextChannel)) { var taxis = nodeInfo.Taxis; var isNextChannel = !StringUtils.EqualsIgnoreCase(type, TypePreviousChannel); //var siblingChannelId = databaseManager.ChannelRepository.GetIdByParentIdAndTaxis(node.ParentId, taxis, isNextChannel); var siblingChannelId = await databaseManager.ChannelRepository.GetIdByParentIdAndTaxisAsync(pageInfo.SiteId, nodeInfo.ParentId, taxis, isNextChannel); if (siblingChannelId != 0) { var siblingNodeInfo = await databaseManager.ChannelRepository.GetAsync(siblingChannelId); var url = await parseManager.PathManager.GetChannelUrlAsync(pageInfo.Site, siblingNodeInfo, pageInfo.IsLocal); if (url.Equals(PageUtils.UnClickableUrl)) { attributes["target"] = string.Empty; } attributes["href"] = url; if (string.IsNullOrEmpty(contextInfo.InnerHtml)) { innerHtml = await databaseManager.ChannelRepository.GetChannelNameAsync(pageInfo.SiteId, siblingChannelId); if (wordNum > 0) { innerHtml = StringUtils.MaxLengthText(innerHtml, wordNum); } } else { contextInfo.ChannelId = siblingChannelId; var innerBuilder = new StringBuilder(contextInfo.InnerHtml); await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } } } else if (StringUtils.EqualsIgnoreCase(type, TypePreviousContent) || StringUtils.EqualsIgnoreCase(type, TypeNextContent)) { if (contextInfo.ContentId != 0) { var taxis = contentInfo.Taxis; var isNextContent = !StringUtils.EqualsIgnoreCase(type, TypePreviousContent); var tableName = await databaseManager.ChannelRepository.GetTableNameAsync(pageInfo.Site, contextInfo.ChannelId); var siblingContentId = await databaseManager.ContentRepository.GetContentIdAsync(tableName, contextInfo.ChannelId, taxis, isNextContent); if (siblingContentId != 0) { var siblingContentInfo = await databaseManager.ContentRepository.GetAsync(pageInfo.Site, contextInfo.ChannelId, siblingContentId); var url = await parseManager.PathManager.GetContentUrlAsync(pageInfo.Site, siblingContentInfo, pageInfo.IsLocal); if (url.Equals(PageUtils.UnClickableUrl)) { attributes["target"] = string.Empty; } attributes["href"] = url; if (isKeyboard) { var keyCode = isNextContent ? 39 : 37; var scriptContent = new StringBuilder(); await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.Jquery); scriptContent.Append($@"<script language=""javascript"" type=""text/javascript""> $(document).keydown(function(event){{ if(event.keyCode=={keyCode}){{location = '{url}';}} }}); </script> "); var nextOrPrevious = isNextContent ? "nextContent" : "previousContent"; pageInfo.BodyCodes[nextOrPrevious] = scriptContent.ToString(); } if (string.IsNullOrEmpty(contextInfo.InnerHtml)) { innerHtml = siblingContentInfo.Title; if (wordNum > 0) { innerHtml = StringUtils.MaxLengthText(innerHtml, wordNum); } } else { var innerBuilder = new StringBuilder(contextInfo.InnerHtml); contextInfo.ContentId = siblingContentId; await parseManager.ParseInnerContentAsync(innerBuilder); innerHtml = innerBuilder.ToString(); } } } } parsedContent = string.IsNullOrEmpty(attributes["href"]) ? emptyText : $@"<a {TranslateUtils.ToAttributesString(attributes)}>{innerHtml}</a>"; } else { var context = parseManager.ContextInfo; var nodeInfo = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); var isSuccess = false; parseManager.ContextInfo = contextInfo.Clone(); if (StringUtils.EqualsIgnoreCase(type, TypePreviousChannel) || StringUtils.EqualsIgnoreCase(type, TypeNextChannel)) { var taxis = nodeInfo.Taxis; var isNextChannel = !StringUtils.EqualsIgnoreCase(type, TypePreviousChannel); //var siblingChannelId = databaseManager.ChannelRepository.GetIdByParentIdAndTaxis(node.ParentId, taxis, isNextChannel); var siblingChannelId = await databaseManager.ChannelRepository.GetIdByParentIdAndTaxisAsync(pageInfo.SiteId, nodeInfo.ParentId, taxis, isNextChannel); if (siblingChannelId != 0) { isSuccess = true; parseManager.ContextInfo.ContextType = ParseType.Channel; parseManager.ContextInfo.ChannelId = siblingChannelId; } } else if (StringUtils.EqualsIgnoreCase(type, TypePreviousContent) || StringUtils.EqualsIgnoreCase(type, TypeNextContent)) { if (contextInfo.ContentId != 0) { var taxis = contentInfo.Taxis; var isNextContent = !StringUtils.EqualsIgnoreCase(type, TypePreviousContent); var tableName = await databaseManager.ChannelRepository.GetTableNameAsync(pageInfo.Site, contextInfo.ChannelId); var siblingContentId = await databaseManager.ContentRepository.GetContentIdAsync(tableName, contextInfo.ChannelId, taxis, isNextContent); if (siblingContentId != 0) { isSuccess = true; parseManager.ContextInfo.ContextType = ParseType.Content; parseManager.ContextInfo.ContentId = siblingContentId; parseManager.ContextInfo.SetContent(null); } } } parsedContent = isSuccess ? successTemplateString : failureTemplateString; if (!string.IsNullOrEmpty(parsedContent)) { var innerBuilder = new StringBuilder(parsedContent); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); } parseManager.ContextInfo = context; } parsedContent = tipText + parsedContent; return(parsedContent); }