private static async Task <string> GetValueFromContentAsync(IParseManager parseManager, string testTypeStr) { var theValue = string.Empty; var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { if (StringUtils.EqualsIgnoreCase(testTypeStr, "IsTop")) { theValue = contentInfo.Get <string>(nameof(Content.Top)); } else if (StringUtils.EqualsIgnoreCase(testTypeStr, "IsRecommend")) { theValue = contentInfo.Get <string>(nameof(Content.Recommend)); } else if (StringUtils.EqualsIgnoreCase(testTypeStr, "IsColor")) { theValue = contentInfo.Get <string>(nameof(Content.Color)); } else if (StringUtils.EqualsIgnoreCase(testTypeStr, "IsHot")) { theValue = contentInfo.Get <string>(nameof(Content.Hot)); } else { theValue = contentInfo.Get <string>(testTypeStr); } } return(theValue); }
private static async Task <string> ParseEntitiesAsync(string type, IParseManager parseManager) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var parsedContent = string.Empty; try { var nodeInfo = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); if (StringUtils.EqualsIgnoreCase(TypePreviousChannel, type) || StringUtils.EqualsIgnoreCase(TypeNextChannel, type)) { 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); parsedContent = await parseManager.PathManager.GetChannelUrlAsync(pageInfo.Site, siblingNodeInfo, pageInfo.IsLocal); } } else if (StringUtils.EqualsIgnoreCase(TypePreviousContent, type) || StringUtils.EqualsIgnoreCase(TypeNextContent, type)) { if (contextInfo.ContentId != 0) { var contentInfo = await parseManager.GetContentAsync(); 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); parsedContent = await parseManager.PathManager.GetContentUrlAsync(pageInfo.Site, siblingContentInfo, pageInfo.IsLocal); } } } } catch { // ignored } if (string.IsNullOrEmpty(parsedContent)) { parsedContent = PageUtils.UnClickableUrl; } return(parsedContent); }
public async Task <string> GetCurrentUrlAsync() { var contextInfo = ParseManager.ContextInfo; var pageInfo = ParseManager.PageInfo; var contentInfo = await ParseManager.GetContentAsync(); return(await StlParserUtility.GetStlCurrentUrlAsync(ParseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal)); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string type, string playUrl, bool isAutoPlay, bool isPreLoad, bool isLoop) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var contentId = contextInfo.ContentId; if (string.IsNullOrEmpty(playUrl)) { if (contentId != 0)//获取内容视频 { var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { playUrl = contentInfo.Get <string>(type); if (string.IsNullOrEmpty(playUrl)) { playUrl = contentInfo.VideoUrl; } if (string.IsNullOrEmpty(playUrl)) { playUrl = contentInfo.FileUrl; } } } } if (string.IsNullOrEmpty(playUrl)) { return(string.Empty); } playUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, playUrl, pageInfo.IsLocal); // 如果是实体标签,则只返回数字 if (contextInfo.IsStlEntity) { return(playUrl); } await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.Jquery); await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.JsAcMediaElement); var url = parseManager.PathManager.GetSiteFilesUrl(Resources.MediaElement.Swf); return($@" <audio class=""mejs__player"" src=""{playUrl}"" {(isAutoPlay ? "autoplay" : string.Empty)} {(isPreLoad ? string.Empty : @"preload=""none""")} {(isLoop ? "loop" : string.Empty)}> <object width=""460"" height=""40"" type=""application/x-shockwave-flash"" data=""{url}""> <param name=""movie"" value=""{url}"" /> <param name=""flashvars"" value=""controls=true&file={playUrl}"" /> </object> </audio> "); }
private static async Task <string> GetValueFromContentAsync(IParseManager parseManager, string testTypeStr) { var theValue = string.Empty; var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { theValue = contentInfo.Get <string>(testTypeStr); } return(theValue); }
private static async Task <DateTime> GetLastModifiedDateGetAsync(IParseManager parseManager) { var lastModifiedDate = Constants.SqlMinValue; var contentInfo = await parseManager.GetContentAsync(); if (parseManager.ContextInfo.ContextType == ParseType.Content) { if (contentInfo.LastModifiedDate.HasValue) { lastModifiedDate = contentInfo.LastModifiedDate.Value; } } return(lastModifiedDate); }
private static async Task <DateTime> GetAddDateByContextAsync(IParseManager parseManager) { var databaseManager = parseManager.DatabaseManager; var contextInfo = parseManager.ContextInfo; var addDate = Constants.SqlMinValue; var contentInfo = await parseManager.GetContentAsync(); if (contextInfo.ContextType == ParseType.Content) { if (contentInfo.AddDate.HasValue) { addDate = contentInfo.AddDate.Value; } } else if (contextInfo.ContextType == ParseType.Channel) { var channel = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); if (channel.AddDate.HasValue) { addDate = channel.AddDate.Value; } } else { if (contextInfo.ItemContainer != null) { //else if (contextInfo.ItemContainer.InputItem != null) //{ // addDate = (DateTime)DataBinder.Eval(contextInfo.ItemContainer.InputItem.DataItem, InputContentAttribute.AddDate); //} //else if (contextInfo.ItemContainer.ContentItem != null) //{ // addDate = (DateTime)DataBinder.Eval(contextInfo.ItemContainer.ContentItem.DataItem, ContentAttribute.AddDate); //} //else if (contextInfo.ItemContainer.ChannelItem != null) //{ // addDate = (DateTime)DataBinder.Eval(contextInfo.ItemContainer.ChannelItem.DataItem, NodeAttribute.AddDate); //} //if (contextInfo.ItemContainer.SqlItem != null) //{ // addDate = (DateTime)DataBinder.Eval(contextInfo.ItemContainer.SqlItem.DataItem, "AddDate"); //} } else if (contextInfo.ContentId != 0)//获取内容 { if (contentInfo.AddDate.HasValue) { addDate = contentInfo.AddDate.Value; } } else if (contextInfo.ChannelId != 0)//获取栏目 { var channel = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); if (channel.AddDate.HasValue) { addDate = channel.AddDate.Value; } } } return(addDate); }
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 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, string playUrl, bool isAutoPlay, bool isPreLoad, bool isLoop, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var contentId = contextInfo.ContentId; if (string.IsNullOrEmpty(playUrl)) { if (contentId != 0)//获取内容视频 { var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { playUrl = contentInfo.Get <string>(type); if (string.IsNullOrEmpty(playUrl)) { playUrl = contentInfo.VideoUrl; } if (string.IsNullOrEmpty(playUrl)) { playUrl = contentInfo.FileUrl; } } } } if (string.IsNullOrEmpty(playUrl)) { return(string.Empty); } playUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, playUrl, pageInfo.IsLocal); if (contextInfo.IsStlEntity) { return(playUrl); } await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.Jquery); await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.JsAcMediaElement); var url = parseManager.PathManager.GetSiteFilesUrl(pageInfo.Site, Resources.MediaElement.Swf); attributes["class"] = "mejs__player" + (string.IsNullOrEmpty(attributes["class"]) ? string.Empty : " " + attributes["class"]); attributes["src"] = playUrl; if (isAutoPlay) { attributes["autoplay"] = "true"; } if (!isPreLoad) { attributes["preload"] = "none"; } if (isLoop) { attributes["loop"] = "true"; } return($@" <audio {TranslateUtils.ToAttributesString(attributes)}> <object width=""460"" height=""40"" type=""application/x-shockwave-flash"" data=""{url}""> <param name=""movie"" value=""{url}"" /> <param name=""flashvars"" value=""controls=true&file={playUrl}"" /> </object> </audio>"); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, string type, string playUrl, string imageUrl, string width, string height, bool isAutoPlay, bool isControls, bool isLoop) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var videoUrl = string.Empty; if (!string.IsNullOrEmpty(playUrl)) { videoUrl = playUrl; } else { var contentId = contextInfo.ContentId; if (contextInfo.ContextType == ParseType.Content) { if (contentId != 0)//获取内容视频 { var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { videoUrl = contentInfo.Get <string>(type); if (string.IsNullOrEmpty(videoUrl)) { videoUrl = contentInfo.VideoUrl; } } } } else if (contextInfo.ContextType == ParseType.Each) { videoUrl = contextInfo.ItemContainer.EachItem.Value as string; } } if (string.IsNullOrEmpty(videoUrl)) { return(string.Empty); } videoUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, videoUrl, pageInfo.IsLocal); imageUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, imageUrl, pageInfo.IsLocal); await pageInfo.AddPageBodyCodeIfNotExistsAsync(ParsePage.Const.JsAcVideoJs); var dict = new Dictionary <string, string> { { "class", "video-js vjs-default-skin" }, { "src", videoUrl } }; if (isAutoPlay) { dict.Add("autoplay", null); } if (isControls) { dict.Add("controls", null); } if (isLoop) { dict.Add("loop", null); } if (!string.IsNullOrEmpty(imageUrl)) { dict.Add("poster", imageUrl); } if (!string.IsNullOrEmpty(width)) { dict.Add("width", width); } dict.Add("height", string.IsNullOrEmpty(height) ? "280" : height); return($@"<video {TranslateUtils.ToAttributesString(dict)}></video>"); }
internal static async Task <string> ParseAsync(string stlEntity, IParseManager parseManager) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var parsedContent = string.Empty; try { var entityName = StlParserUtility.GetNameFromEntity(stlEntity); var attributeName = entityName.Substring(12, entityName.Length - 13); var nodeInfo = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); if (StringUtils.EqualsIgnoreCase(PreviousChannel, attributeName) || StringUtils.EqualsIgnoreCase(NextChannel, attributeName)) { var taxis = nodeInfo.Taxis; var isNextChannel = !StringUtils.EqualsIgnoreCase(attributeName, PreviousChannel); //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); parsedContent = await parseManager.PathManager.GetChannelUrlAsync(pageInfo.Site, siblingNodeInfo, pageInfo.IsLocal); } } else if (StringUtils.EqualsIgnoreCase(PreviousContent, attributeName) || StringUtils.EqualsIgnoreCase(NextContent, attributeName)) { if (contextInfo.ContentId != 0) { var contentInfo = await parseManager.GetContentAsync(); var taxis = contentInfo.Taxis; var isNextContent = !StringUtils.EqualsIgnoreCase(attributeName, PreviousContent); 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); parsedContent = await parseManager.PathManager.GetContentUrlAsync(pageInfo.Site, siblingContentInfo, pageInfo.IsLocal); } } } } catch { // ignored } if (string.IsNullOrEmpty(parsedContent)) { parsedContent = PageUtils.UnClickableUrl; } return(parsedContent); }
internal static async Task <string> ParseAsync(string stlEntity, IParseManager parseManager) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var parsedContent = string.Empty; if (parseManager.ContextInfo.ContentId != 0) { try { var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null && contentInfo.ReferenceId > 0 && contentInfo.SourceId > 0 && TranslateType.ReferenceContent.GetValue() == contentInfo.Get <string>(ColumnsManager.TranslateContentType)) { var targetChannelId = contentInfo.SourceId; var targetSiteId = await databaseManager.ChannelRepository.GetSiteIdAsync(targetChannelId); var targetSite = await databaseManager.SiteRepository.GetAsync(targetSiteId); var targetNodeInfo = await databaseManager.ChannelRepository.GetAsync(targetChannelId); var targetContentInfo = await databaseManager.ContentRepository.GetAsync(targetSite, targetNodeInfo, contentInfo.ReferenceId); if (targetContentInfo != null && targetContentInfo.ChannelId > 0) { //标题可以使用自己的 targetContentInfo.Title = contentInfo.Title; contentInfo = targetContentInfo; } } var entityName = StlParserUtility.GetNameFromEntity(stlEntity); var attributeName = entityName.Substring(9, entityName.Length - 10); if (StringUtils.EqualsIgnoreCase(nameof(Models.Content.Id), attributeName))//内容ID { if (contentInfo != null) { parsedContent = contentInfo.ReferenceId > 0 ? contentInfo.ReferenceId.ToString() : contentInfo.Id.ToString(); } } else if (StringUtils.EqualsIgnoreCase(Title, attributeName))//内容标题 { if (contentInfo != null) { parsedContent = contentInfo.Title; } } else if (StringUtils.EqualsIgnoreCase(FullTitle, attributeName))//内容标题全称 { if (contentInfo != null) { parsedContent = contentInfo.Title; } } else if (StringUtils.EqualsIgnoreCase(NavigationUrl, attributeName))//内容链接地址 { if (contentInfo != null) { parsedContent = await parseManager.PathManager.GetContentUrlAsync(pageInfo.Site, contentInfo, pageInfo.IsLocal); } else { var nodeInfo = await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId); parsedContent = await parseManager.PathManager.GetContentUrlAsync(pageInfo.Site, nodeInfo, contextInfo.ContentId, pageInfo.IsLocal); } } else if (StringUtils.EqualsIgnoreCase(ImageUrl, attributeName))//内容图片地址 { if (contentInfo != null) { parsedContent = contentInfo.ImageUrl; } if (!string.IsNullOrEmpty(parsedContent)) { parsedContent = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, parsedContent, pageInfo.IsLocal); } } else if (StringUtils.EqualsIgnoreCase(VideoUrl, attributeName))//内容视频地址 { if (contentInfo != null) { parsedContent = contentInfo.VideoUrl; } if (!string.IsNullOrEmpty(parsedContent)) { parsedContent = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, parsedContent, pageInfo.IsLocal); } } else if (StringUtils.EqualsIgnoreCase(FileUrl, attributeName))//内容附件地址 { if (contentInfo != null) { parsedContent = contentInfo.FileUrl; } if (!string.IsNullOrEmpty(parsedContent)) { parsedContent = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, parsedContent, pageInfo.IsLocal); } } else if (StringUtils.EqualsIgnoreCase(DownloadUrl, attributeName))//内容附件地址(可统计下载量) { if (contentInfo != null) { parsedContent = contentInfo.FileUrl; } if (!string.IsNullOrEmpty(parsedContent)) { parsedContent = parseManager.PathManager.GetDownloadApiUrl(pageInfo.SiteId, contextInfo.ChannelId, contextInfo.ContentId, parsedContent); } } else if (StringUtils.EqualsIgnoreCase(AddDate, attributeName))//内容添加日期 { if (contentInfo != null) { parsedContent = DateUtils.Format(contentInfo.AddDate, string.Empty); } } else if (StringUtils.EqualsIgnoreCase(LastModifiedDate, attributeName))//替换最后修改日期 { if (contentInfo != null) { parsedContent = DateUtils.Format(contentInfo.LastModifiedDate, string.Empty); } } else if (StringUtils.EqualsIgnoreCase(Body, attributeName) || StringUtils.EqualsIgnoreCase("Content", attributeName))//内容正文 { if (contentInfo != null) { parsedContent = contentInfo.Body; } parsedContent = await parseManager.PathManager.DecodeTextEditorAsync(pageInfo.Site, parsedContent, pageInfo.IsLocal); } else if (StringUtils.EqualsIgnoreCase(Group, attributeName))//内容组别 { if (contentInfo != null) { parsedContent = ListUtils.ToString(contentInfo.GroupNames); } } else if (StringUtils.EqualsIgnoreCase(Tags, attributeName))//标签 { if (contentInfo != null) { parsedContent = ListUtils.ToString(contentInfo.TagNames); } } else if (StringUtils.StartsWithIgnoreCase(attributeName, StlParserUtility.ItemIndex) && contextInfo.ItemContainer?.ContentItem != null) { parsedContent = StlParserUtility.ParseItemIndex(contextInfo.ItemContainer.ContentItem.Key, attributeName, contextInfo).ToString(); } else { var contentChannelId = 0; if (contentInfo == null) { contentInfo = await databaseManager.ContentRepository.GetAsync(pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId); } if (contentInfo != null) { contentChannelId = contentInfo.ChannelId; if (contentInfo.ContainsKey(attributeName)) { parsedContent = contentInfo.Get <string>(attributeName); } } if (!string.IsNullOrEmpty(parsedContent)) { var channel = await databaseManager.ChannelRepository.GetAsync(contentChannelId); var tableName = databaseManager.ChannelRepository.GetTableName(pageInfo.Site, channel); var relatedIdentities = databaseManager.TableStyleRepository.GetRelatedIdentities(channel); var styleInfo = await databaseManager.TableStyleRepository.GetTableStyleAsync(tableName, attributeName, relatedIdentities); //styleInfo.IsVisible = false 表示此字段不需要显示 styleInfo.TableStyleId = 0 不能排除,因为有可能是直接辅助表字段没有添加显示样式 var inputParser = new InputParserManager(parseManager.PathManager); parsedContent = await inputParser.GetContentByTableStyleAsync(parsedContent, ",", pageInfo.Site, styleInfo, string.Empty, null, string.Empty, true); } } } catch { // ignored } } return(parsedContent?.Replace(Constants.PagePlaceHolder, string.Empty)); }
private static async Task <object> ParseImplAsync(IParseManager parseManager, bool isGetPicUrlFromAttribute, string channelIndex, string channelName, int upLevel, int topLevel, string type, string src, string altSrc, string width, string height) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; object parsedContent = null; var contentId = 0; //判断是否图片地址由标签属性获得 if (!isGetPicUrlFromAttribute) { contentId = contextInfo.ContentId; } var contentInfo = await parseManager.GetContentAsync(); var flashUrl = string.Empty; if (!string.IsNullOrEmpty(src)) { flashUrl = src; } else { if (contentId != 0)//获取内容Flash { if (contentInfo != null) { flashUrl = contentInfo.Get <string>(type); } } else//获取栏目Flash { var dataManager = new StlDataManager(parseManager.DatabaseManager); var channelId = await dataManager.GetChannelIdByLevelAsync(pageInfo.SiteId, contextInfo.ChannelId, upLevel, topLevel); channelId = await dataManager.GetChannelIdByChannelIdOrChannelIndexOrChannelNameAsync(pageInfo.SiteId, channelId, channelIndex, channelName); var channel = await parseManager.DatabaseManager.ChannelRepository.GetAsync(channelId); flashUrl = channel.ImageUrl; } } if (string.IsNullOrEmpty(flashUrl)) { flashUrl = altSrc; } // 如果是实体标签则返回空 if (contextInfo.IsStlEntity) { return(flashUrl); } if (!string.IsNullOrEmpty(flashUrl)) { var extension = PathUtils.GetExtension(flashUrl); if (FileUtils.IsImage(extension)) { parsedContent = await StlImage.ParseAsync(parseManager); } else if (FileUtils.IsPlayer(extension)) { parsedContent = await StlPlayer.ParseAsync(parseManager); } else { flashUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, flashUrl, pageInfo.IsLocal); parsedContent = $@" <embed src=""{flashUrl}"" allowfullscreen=""true"" width=""{width}"" height=""{height}"" align=""middle"" allowscriptaccess=""always"" type=""application/x-shockwave-flash"" /> "; } } return(parsedContent); }
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, string type, int no, string src, string fallbackLink, bool forceIframe, string height, int page, string width, bool full, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var elementId = StringUtils.GetElementId(); 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; } } await pageInfo.AddPageBodyCodeIfNotExistsAsync(ParsePage.Const.PdfObject); dynamic options = new { }; if (!string.IsNullOrEmpty(fallbackLink)) { options.fallbackLink = fallbackLink; } options.forceIframe = forceIframe; if (page > 0) { options.page = page; } if (full) { return($@"<script>PDFObject.embed(""{fileUrl}"", document.body, {JsonConvert.SerializeObject(options)});</script>"); } if (!string.IsNullOrEmpty(height)) { options.height = height; } if (!string.IsNullOrEmpty(width)) { options.width = width; } attributes["id"] = elementId; return($@"<div {TranslateUtils.ToAttributesString(attributes)}></div><script>PDFObject.embed(""{fileUrl}"", ""#{elementId}"", {JsonConvert.SerializeObject(options)});</script>"); }
private static async Task <object> ParseImplAsync(IParseManager parseManager, string type, string formatString, int startIndex, int length, int wordNum, string ellipsis, string replace, string to, bool isClearTags, bool isReturnToBr, bool isLower, bool isUpper) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; if (string.IsNullOrEmpty(type)) { return(string.Empty); } var parsedContent = string.Empty; if (contextInfo.ContextType == ParseType.Each) { parsedContent = contextInfo.ItemContainer.EachItem.Value as string; return(parsedContent); } if (StringUtils.EqualsIgnoreCase(type, TypeDate)) { if (!pageInfo.BodyCodes.ContainsKey("datestring.js")) { var jsUrl = parseManager.PathManager.GetSiteFilesUrl(Resources.DateString.Js); pageInfo.BodyCodes.Add("datestring.js", $@"<script charset=""{Resources.DateString.Charset}"" src=""{jsUrl}"" type=""text/javascript""></script>"); } parsedContent = @"<script language=""javascript"" type=""text/javascript"">RunGLNL(false);</script>"; } else if (StringUtils.EqualsIgnoreCase(type, TypeDateOfTraditional)) { if (!pageInfo.BodyCodes.ContainsKey("datestring")) { var jsUrl = parseManager.PathManager.GetSiteFilesUrl(Resources.DateString.Js); pageInfo.BodyCodes.Add("datestring", $@"<script charset=""{Resources.DateString.Charset}"" src=""{jsUrl}"" type=""text/javascript""></script>"); } parsedContent = @"<script language=""javascript"" type=""text/javascript"">RunGLNL(true);</script>"; } else if (StringUtils.EqualsIgnoreCase(TypeRootUrl, type))//系统根目录地址 { parsedContent = parseManager.PathManager.ParseUrl("~"); if (!string.IsNullOrEmpty(parsedContent)) { parsedContent = parsedContent.TrimEnd('/'); } } else if (StringUtils.EqualsIgnoreCase(TypeApiUrl, type))//API地址 { parsedContent = parseManager.PathManager.GetRootUrl(); } else if (StringUtils.EqualsIgnoreCase(TypeSiteId, type))//ID { parsedContent = pageInfo.SiteId.ToString(); } else if (StringUtils.EqualsIgnoreCase(TypeSiteName, type))//名称 { parsedContent = pageInfo.Site.SiteName; } else if (StringUtils.EqualsIgnoreCase(TypeSiteUrl, type))//域名地址 { parsedContent = (await parseManager.PathManager.GetSiteUrlAsync(pageInfo.Site, pageInfo.IsLocal)).TrimEnd('/'); } else if (StringUtils.EqualsIgnoreCase(TypeSiteDir, type))//文件夹 { parsedContent = pageInfo.Site.SiteDir; } else if (StringUtils.EqualsIgnoreCase(TypeCurrentUrl, type))//当前页地址 { var contentInfo = await parseManager.GetContentAsync(); parsedContent = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); } else if (StringUtils.EqualsIgnoreCase(TypeChannelUrl, type))//栏目页地址 { parsedContent = await parseManager.PathManager.GetChannelUrlAsync(pageInfo.Site, await parseManager.DatabaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId), pageInfo.IsLocal); } else if (StringUtils.EqualsIgnoreCase(TypeHomeUrl, type))//用户中心地址 { parsedContent = parseManager.PathManager.GetHomeUrl(string.Empty).TrimEnd('/'); } else if (StringUtils.EqualsIgnoreCase(TypeLoginUrl, type)) { var contentInfo = await parseManager.GetContentAsync(); var returnUrl = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); parsedContent = parseManager.PathManager.GetHomeUrl($"pages/login.html?returnUrl={PageUtils.UrlEncode(returnUrl)}"); } else if (StringUtils.EqualsIgnoreCase(TypeLogoutUrl, type)) { var contentInfo = await parseManager.GetContentAsync(); var returnUrl = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); parsedContent = parseManager.PathManager.GetHomeUrl($"pages/logout.html?returnUrl={PageUtils.UrlEncode(returnUrl)}"); } else if (StringUtils.EqualsIgnoreCase(TypeRegisterUrl, type)) { var contentInfo = await parseManager.GetContentAsync(); var returnUrl = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); parsedContent = parseManager.PathManager.GetHomeUrl($"pages/register.html?returnUrl={PageUtils.UrlEncode(returnUrl)}"); } else if (StringUtils.StartsWithIgnoreCase(type, "TableFor"))// { if (StringUtils.EqualsIgnoreCase(type, "TableForContent")) { parsedContent = pageInfo.Site.TableName; } } else if (StringUtils.StartsWithIgnoreCase(type, "Site"))// { parsedContent = pageInfo.Site.Get <string>(type.Substring(4)); } else if (pageInfo.Parameters != null && pageInfo.Parameters.ContainsKey(type)) { pageInfo.Parameters.TryGetValue(type, out parsedContent); parsedContent = InputTypeUtils.ParseString(InputType.Text, parsedContent, replace, to, startIndex, length, wordNum, ellipsis, isClearTags, isReturnToBr, isLower, isUpper, formatString); } else { return(await StlSite.ParseAsync(parseManager)); } return(parsedContent); }
private static async Task <string> ParseImplAsync(IParseManager parseManager, ListInfo listInfo) { var pageInfo = parseManager.PageInfo; var type = listInfo.Others.Get(Type); if (string.IsNullOrEmpty(type)) { type = nameof(Content.ImageUrl); } var valueList = new List <string>(); var content = await parseManager.GetContentAsync(); if (content != null) { if (!string.IsNullOrEmpty(content.Get <string>(type))) { valueList.Add(content.Get <string>(type)); } var countName = ColumnsManager.GetCountName(type); var total = content.Get <int>(countName); for (var i = 1; i <= total; i++) { var extendName = ColumnsManager.GetExtendName(type, i); var extend = content.Get <string>(extendName); valueList.Add(extend); } //var extendAttributeName = ColumnsManager.GetExtendAttributeName(type); //var extendValues = content.Get<string>(extendAttributeName); //if (!string.IsNullOrEmpty(extendValues)) //{ // foreach (var extendValue in ListUtils.GetStringList(extendValues)) // { // valueList.Add(extendValue); // } //} if (listInfo.StartNum > 1 || listInfo.TotalNum > 0) { if (listInfo.StartNum > 1) { var count = listInfo.StartNum - 1; if (count > valueList.Count) { count = valueList.Count; } valueList.RemoveRange(0, count); } if (listInfo.TotalNum > 0) { if (listInfo.TotalNum < valueList.Count) { valueList.RemoveRange(listInfo.TotalNum, valueList.Count - listInfo.TotalNum); } } } } if (valueList.Count == 0) { return(string.Empty); } var eachList = new List <KeyValuePair <int, object> >(); var index = 0; foreach (string value in valueList) { eachList.Add(new KeyValuePair <int, object>(index++, value)); } var builder = new StringBuilder(); if (listInfo.Layout == Layout.None) { if (!string.IsNullOrEmpty(listInfo.HeaderTemplate)) { builder.Append(listInfo.HeaderTemplate); } var isAlternative = false; var isSeparator = false; if (!string.IsNullOrEmpty(listInfo.AlternatingItemTemplate)) { isAlternative = true; } if (!string.IsNullOrEmpty(listInfo.SeparatorTemplate)) { isSeparator = true; } for (var i = 0; i < eachList.Count; i++) { var each = eachList[i]; pageInfo.EachItems.Push(each); var templateString = isAlternative && i % 2 == 1 ? listInfo.AlternatingItemTemplate : listInfo.ItemTemplate; builder.Append(await TemplateUtility.GetEachsTemplateStringAsync(templateString, listInfo.SelectedItems, listInfo.SelectedValues, string.Empty, parseManager, ParseType.Each)); if (isSeparator && i != eachList.Count - 1) { builder.Append(listInfo.SeparatorTemplate); } } if (!string.IsNullOrEmpty(listInfo.FooterTemplate)) { builder.Append(listInfo.FooterTemplate); } } else { var isAlternative = !string.IsNullOrEmpty(listInfo.AlternatingItemTemplate); var tableAttributes = listInfo.GetTableAttributes(); var cellAttributes = listInfo.GetCellAttributes(); using var table = new HtmlTable(builder, tableAttributes); if (!string.IsNullOrEmpty(listInfo.HeaderTemplate)) { table.StartHead(); using (var tHead = table.AddRow()) { tHead.AddCell(listInfo.HeaderTemplate, cellAttributes); } table.EndHead(); } table.StartBody(); var columns = listInfo.Columns <= 1 ? 1 : listInfo.Columns; var itemIndex = 0; while (true) { using var tr = table.AddRow(); for (var cell = 1; cell <= columns; cell++) { var cellHtml = string.Empty; if (itemIndex < eachList.Count) { var each = eachList[itemIndex]; pageInfo.EachItems.Push(each); var templateString = isAlternative && itemIndex % 2 == 1 ? listInfo.AlternatingItemTemplate : listInfo.ItemTemplate; cellHtml = await TemplateUtility.GetEachsTemplateStringAsync(templateString, listInfo.SelectedItems, listInfo.SelectedValues, string.Empty, parseManager, ParseType.Each); } tr.AddCell(cellHtml, cellAttributes); itemIndex++; } if (itemIndex >= eachList.Count) { break; } } table.EndBody(); if (!string.IsNullOrEmpty(listInfo.FooterTemplate)) { table.StartFoot(); using (var tFoot = table.AddRow()) { tFoot.AddCell(listInfo.FooterTemplate, cellAttributes); } table.EndFoot(); } } return(builder.ToString()); }
internal static async Task <string> ParseAsync(string stlEntity, IParseManager parseManager) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var parsedContent = string.Empty; try { var entityName = StlParserUtility.GetNameFromEntity(stlEntity); var attributeName = entityName.Substring(5, entityName.Length - 6); if (StringUtils.EqualsIgnoreCase(PoweredBy, attributeName))//支持信息 { parsedContent = @$ "Powered by <a href=" "{CloudUtils.Www.Host}" " target=" "_blank" ">SS CMS</a>"; } else if (StringUtils.EqualsIgnoreCase(RootUrl, attributeName))//系统根目录地址 { parsedContent = parseManager.PathManager.ParseUrl("~"); if (!string.IsNullOrEmpty(parsedContent)) { parsedContent = parsedContent.TrimEnd('/'); } } else if (StringUtils.EqualsIgnoreCase(ApiUrl, attributeName))//API地址 { parsedContent = parseManager.PathManager.GetRootUrl(); } else if (StringUtils.EqualsIgnoreCase(SiteId, attributeName))//ID { parsedContent = pageInfo.SiteId.ToString(); } else if (StringUtils.EqualsIgnoreCase(SiteName, attributeName))//名称 { parsedContent = pageInfo.Site.SiteName; } else if (StringUtils.EqualsIgnoreCase(SiteUrl, attributeName))//域名地址 { parsedContent = (await parseManager.PathManager.GetSiteUrlAsync(pageInfo.Site, pageInfo.IsLocal)).TrimEnd('/'); } else if (StringUtils.EqualsIgnoreCase(SiteDir, attributeName))//文件夹 { parsedContent = pageInfo.Site.SiteDir; } else if (StringUtils.EqualsIgnoreCase(CurrentUrl, attributeName))//当前页地址 { var contentInfo = await parseManager.GetContentAsync(); parsedContent = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); } else if (StringUtils.EqualsIgnoreCase(ChannelUrl, attributeName))//栏目页地址 { parsedContent = await parseManager.PathManager.GetChannelUrlAsync(pageInfo.Site, await databaseManager.ChannelRepository.GetAsync(contextInfo.ChannelId), pageInfo.IsLocal); } else if (StringUtils.EqualsIgnoreCase(HomeUrl, attributeName))//用户中心地址 { parsedContent = parseManager.PathManager.GetHomeUrl(string.Empty).TrimEnd('/'); } else if (StringUtils.EqualsIgnoreCase(LoginUrl, attributeName)) { var contentInfo = await parseManager.GetContentAsync(); var returnUrl = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); parsedContent = parseManager.PathManager.GetHomeUrl($"pages/login.html?returnUrl={PageUtils.UrlEncode(returnUrl)}"); } else if (StringUtils.EqualsIgnoreCase(LogoutUrl, attributeName)) { var contentInfo = await parseManager.GetContentAsync(); var returnUrl = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); parsedContent = parseManager.PathManager.GetHomeUrl($"pages/logout.html?returnUrl={PageUtils.UrlEncode(returnUrl)}"); } else if (StringUtils.EqualsIgnoreCase(RegisterUrl, attributeName)) { var contentInfo = await parseManager.GetContentAsync(); var returnUrl = await StlParserUtility.GetStlCurrentUrlAsync(parseManager, pageInfo.Site, contextInfo.ChannelId, contextInfo.ContentId, contentInfo, pageInfo.Template.TemplateType, pageInfo.Template.Id, pageInfo.IsLocal); parsedContent = parseManager.PathManager.GetHomeUrl($"pages/register.html?returnUrl={PageUtils.UrlEncode(returnUrl)}"); } else if (StringUtils.StartsWithIgnoreCase(attributeName, "TableFor"))// { if (StringUtils.EqualsIgnoreCase(attributeName, "TableForContent")) { parsedContent = pageInfo.Site.TableName; } } else if (StringUtils.StartsWithIgnoreCase(attributeName, "Site"))// { parsedContent = pageInfo.Site.Get <string>(attributeName.Substring(4)); } else if (pageInfo.Parameters != null && pageInfo.Parameters.ContainsKey(attributeName)) { pageInfo.Parameters.TryGetValue(attributeName, out parsedContent); } else { if (pageInfo.Site.ContainsKey(attributeName)) { parsedContent = pageInfo.Site.Get <string>(attributeName); if (!string.IsNullOrEmpty(parsedContent)) { var styleInfo = await databaseManager.TableStyleRepository.GetTableStyleAsync(databaseManager.SiteRepository.TableName, attributeName, databaseManager.TableStyleRepository.GetRelatedIdentities(pageInfo.SiteId)); if (styleInfo.Id > 0) { var inputParser = new InputParserManager(parseManager.PathManager); parsedContent = InputTypeUtils.EqualsAny(styleInfo.InputType, InputType.Image, InputType.File) ? await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, parsedContent, pageInfo.IsLocal) : await inputParser.GetContentByTableStyleAsync(parsedContent, string.Empty, pageInfo.Site, styleInfo, string.Empty, null, string.Empty, true); } else { // 如果字段已经被删除或不再显示了,则此字段的值为空。有时虚拟字段值不会清空 parsedContent = string.Empty; } } } } } catch { // ignored } return(parsedContent); }
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 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); }
private static async Task <object> ParseImplAsync(IParseManager parseManager, NameValueCollection attributes, bool isGetPicUrlFromAttribute, string channelIndex, string channelName, int upLevel, int topLevel, string type, int no, bool isOriginal, string src, string altSrc) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; object parsedContent = null; var contentId = 0; //判断是否图片地址由标签属性获得 if (!isGetPicUrlFromAttribute) { contentId = contextInfo.ContentId; } var contextType = contextInfo.ContextType; var picUrl = string.Empty; if (!string.IsNullOrEmpty(src)) { picUrl = src; } else { if (contextType == ParseType.Undefined) { contextType = contentId != 0 ? ParseType.Content : ParseType.Channel; } if (contextType == ParseType.Content)//获取内容图片 { var contentInfo = await parseManager.GetContentAsync(); if (isOriginal) { if (contentInfo != null && contentInfo.ReferenceId > 0 && contentInfo.SourceId > 0) { var targetChannelId = contentInfo.SourceId; //var targetSiteId = databaseManager.ChannelRepository.GetSiteId(targetChannelId); var targetSiteId = await databaseManager.ChannelRepository.GetSiteIdAsync(targetChannelId); var targetSite = await databaseManager.SiteRepository.GetAsync(targetSiteId); var targetNodeInfo = await databaseManager.ChannelRepository.GetAsync(targetChannelId); //var targetContentInfo = databaseManager.ContentRepository.GetContentInfo(tableStyle, tableName, contentInfo.ReferenceId); var targetContentInfo = await databaseManager.ContentRepository.GetAsync(targetSite, targetNodeInfo, contentInfo.ReferenceId); if (targetContentInfo != null && targetContentInfo.ChannelId > 0) { contentInfo = targetContentInfo; } } } if (contentInfo == null) { contentInfo = await databaseManager.ContentRepository.GetAsync(pageInfo.Site, contextInfo.ChannelId, contentId); } if (contentInfo != null) { if (no <= 1) { picUrl = contentInfo.Get <string>(type); } else { var extendName = ColumnsManager.GetExtendName(type, no - 1); picUrl = contentInfo.Get <string>(extendName); } } } else if (contextType == ParseType.Channel)//获取栏目图片 { var dataManager = new StlDataManager(parseManager.DatabaseManager); var channelId = await dataManager.GetChannelIdByLevelAsync(pageInfo.SiteId, contextInfo.ChannelId, upLevel, topLevel); channelId = await dataManager.GetChannelIdByChannelIdOrChannelIndexOrChannelNameAsync(pageInfo.SiteId, channelId, channelIndex, channelName); var channel = await databaseManager.ChannelRepository.GetAsync(channelId); picUrl = channel.ImageUrl; } else if (contextType == ParseType.Each) { picUrl = contextInfo.ItemContainer.EachItem.Value as string; } } if (string.IsNullOrEmpty(picUrl)) { picUrl = altSrc; } if (!string.IsNullOrEmpty(picUrl)) { var extension = PathUtils.GetExtension(picUrl); if (FileUtils.IsFlash(extension)) { parsedContent = await StlFlash.ParseAsync(parseManager); } else if (FileUtils.IsPlayer(extension)) { parsedContent = await StlPlayer.ParseAsync(parseManager); } else { attributes["src"] = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, picUrl, pageInfo.IsLocal); parsedContent = $@"<img {TranslateUtils.ToAttributesString(attributes)}>"; } } 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); }
private static async Task <(bool Success, string TemplateString)> IsContentTemplateStringAsync(string itemType, string itemTypes, NameValueCollection selectedItems, NameValueCollection selectedValues, IParseManager parseManager) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var contentInfo = await parseManager.GetContentAsync(); if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedCurrent))//当前内容 { if (contentInfo.Id == pageInfo.PageContentId) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedIsTop))//置顶内容 { if (contentInfo.Top) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedImage))//带图片的内容 { if (!string.IsNullOrEmpty(contentInfo.ImageUrl)) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedVideo))//带视频的内容 { if (!string.IsNullOrEmpty(contentInfo.VideoUrl)) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedFile))//带附件的内容 { if (!string.IsNullOrEmpty(contentInfo.FileUrl)) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedIsRecommend))//推荐的内容 { if (contentInfo.Recommend) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedIsHot))//热点内容 { if (contentInfo.Hot) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedIsColor))//醒目内容 { if (contentInfo.Color) { return(true, selectedItems.Get(itemTypes)); } } else if (StringUtils.EqualsIgnoreCase(itemType, StlItemTemplate.SelectedChannelName))//带有附件的内容 { if (selectedValues.Count > 0) { var nodeInfo = await parseManager.DatabaseManager.ChannelRepository.GetAsync(contentInfo.ChannelId); if (nodeInfo != null) { if (selectedValues.Get(nodeInfo.ChannelName) != null) { return(true, selectedValues.Get(nodeInfo.ChannelName)); } } } } else if (IsNumberInRange(contextInfo.ItemContainer.ContentItem.Key + 1, itemType)) { return(true, selectedItems.Get(itemTypes)); } return(false, string.Empty); }
private static async Task <object> ParseImplAsync(IParseManager parseManager, string playUrl, string imageUrl, string playBy, int width, int height, string type, bool isAutoPlay) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; if (string.IsNullOrEmpty(playUrl)) { var contentId = contextInfo.ContentId; if (contentId != 0)//获取内容视频 { var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { playUrl = contentInfo.Get <string>(type); if (string.IsNullOrEmpty(playUrl)) { playUrl = contentInfo.VideoUrl; } } } } if (string.IsNullOrEmpty(playUrl)) { return(string.Empty); } playUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, playUrl, pageInfo.IsLocal); imageUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, imageUrl, pageInfo.IsLocal); var extension = PathUtils.GetExtension(playUrl); var elementId = StringUtils.GetElementId(); var fileType = FileUtils.GetType(extension); if (FileUtils.IsFlash(extension)) { return(await StlPdf.ParseAsync(parseManager)); } if (FileUtils.IsImage(extension)) { return(await StlImage.ParseAsync(parseManager)); } if (fileType == FileType.Avi) { return(ParseAvi(elementId, width, height, isAutoPlay, playUrl)); } if (fileType == FileType.Mpg) { return(ParseMpg(elementId, width, height, isAutoPlay, playUrl)); } if (fileType == FileType.Rm || fileType == FileType.Rmb || fileType == FileType.Rmvb) { return(ParseRm(contextInfo, elementId, width, height, isAutoPlay, playUrl)); } if (fileType == FileType.Wmv) { return(ParseWmv(elementId, width, height, isAutoPlay, playUrl)); } if (fileType == FileType.Wma) { return(ParseWma(elementId, isAutoPlay, playUrl)); } if (StringUtils.EqualsIgnoreCase(playBy, PlayByJwPlayer)) { await pageInfo.AddPageBodyCodeIfNotExistsAsync(ParsePage.Const.JsAcJwPlayer6); return($@" <div id='{elementId}'></div> <script type='text/javascript'> jwplayer('{elementId}').setup({{ autostart: {StringUtils.ToLower(isAutoPlay.ToString())}, file: ""{playUrl}"", width: ""{width}"", height: ""{height}"", image: ""{imageUrl}"" }}); </script> "); } if (StringUtils.EqualsIgnoreCase(playBy, PlayByFlowPlayer)) { await pageInfo.AddPageBodyCodeIfNotExistsAsync(ParsePage.Const.JsAcFlowPlayer); var imageHtml = string.Empty; if (!string.IsNullOrEmpty(imageUrl)) { imageHtml = $@"<img src=""{imageUrl}"" style=""{(width > 0 ? $"width:{width}px;" : string.Empty)}{(height > 0 ? $"height:{height}px;" : string.Empty)}"" />"; } var swfUrl = parseManager.PathManager.GetSiteFilesUrl(Resources.FlowPlayer.Swf); return($@" <a href=""{playUrl}"" style=""display:block;{(width > 0 ? $"width:{width}px;" : string.Empty)}{(height > 0 ? $"height:{height}px;" : string.Empty)}"" id=""{elementId}"">{imageHtml}</a> <script language=""javascript""> flowplayer(""{elementId}"", ""{swfUrl}"", {{ clip: {{ autoPlay: {StringUtils.ToLower(isAutoPlay.ToString())} }} }}); </script> "); } return(await StlVideo.ParseAsync(parseManager)); }
private static async Task <object> ParseAsync(IParseManager parseManager, NameValueCollection attributes, bool isGetPicUrlFromAttribute, string channelIndex, string channelName, int upLevel, int topLevel, string type, int no, bool isOriginal, bool isClearTags, string src, string altSrc) { var databaseManager = parseManager.DatabaseManager; var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var contentId = 0; if (!isGetPicUrlFromAttribute) { contentId = contextInfo.ContentId; } var contextType = contextInfo.ContextType; var picUrl = string.Empty; if (!string.IsNullOrEmpty(src)) { picUrl = src; } else { if (contextType == ParseType.Undefined) { contextType = contentId != 0 ? ParseType.Content : ParseType.Channel; } if (contextType == ParseType.Content) { var contentInfo = await parseManager.GetContentAsync(); if (isOriginal) { if (contentInfo != null && contentInfo.ReferenceId > 0 && contentInfo.SourceId > 0) { var targetChannelId = contentInfo.SourceId; var targetSiteId = await databaseManager.ChannelRepository.GetSiteIdAsync(targetChannelId); var targetSite = await databaseManager.SiteRepository.GetAsync(targetSiteId); var targetNodeInfo = await databaseManager.ChannelRepository.GetAsync(targetChannelId); var targetContentInfo = await databaseManager.ContentRepository.GetAsync(targetSite, targetNodeInfo, contentInfo.ReferenceId); if (targetContentInfo != null && targetContentInfo.ChannelId > 0) { contentInfo = targetContentInfo; } } } if (contentInfo == null) { contentInfo = await databaseManager.ContentRepository.GetAsync(pageInfo.Site, contextInfo.ChannelId, contentId); } if (contentInfo != null) { if (no <= 1) { picUrl = contentInfo.Get <string>(type); } else { var extendName = ColumnsManager.GetExtendName(type, no - 1); picUrl = contentInfo.Get <string>(extendName); } } } else if (contextType == ParseType.Channel) //获取栏目图片 { var dataManager = new StlDataManager(parseManager.DatabaseManager); var channelId = await dataManager.GetChannelIdByLevelAsync(pageInfo.SiteId, contextInfo.ChannelId, upLevel, topLevel); channelId = await dataManager.GetChannelIdByChannelIdOrChannelIndexOrChannelNameAsync( pageInfo.SiteId, channelId, channelIndex, channelName); var channel = await databaseManager.ChannelRepository.GetAsync(channelId); if (no <= 1) { picUrl = channel.Get <string>(type); } else { var extendName = ColumnsManager.GetExtendName(type, no - 1); picUrl = channel.Get <string>(extendName); } } else if (contextType == ParseType.Each) { picUrl = contextInfo.ItemContainer.EachItem.Value as string; } } if (string.IsNullOrEmpty(picUrl)) { picUrl = altSrc; } if (string.IsNullOrEmpty(picUrl)) { return(string.Empty); } var extension = PathUtils.GetExtension(picUrl); if (FileUtils.IsFlash(extension)) { return(await StlPdf.ParseAsync(parseManager)); } if (FileUtils.IsPlayer(extension)) { return(await StlPlayer.ParseAsync(parseManager)); } picUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, picUrl, pageInfo.IsLocal); if (isClearTags || contextInfo.IsStlEntity) { return(picUrl); } attributes["src"] = picUrl; var parsedContent = string.Empty; if (pageInfo.EditMode == EditMode.Visual) { var elementId = StringUtils.GetElementId(); VisualUtility.AddEditableToAttributes(attributes, elementId, contextInfo.ElementName); parsedContent = GetParsedContent(attributes); VisualUtility.AddEditableToPage(pageInfo, elementId, contextInfo, parsedContent); } else { parsedContent = GetParsedContent(attributes); } return(parsedContent); }
private static async Task <string> ParseAsync(IParseManager parseManager, string type, string playUrl, string imageUrl, string width, string height, bool isAutoPlay, bool isControls, bool isLoop, NameValueCollection attributes) { var pageInfo = parseManager.PageInfo; var contextInfo = parseManager.ContextInfo; var videoUrl = string.Empty; if (!string.IsNullOrEmpty(playUrl)) { videoUrl = playUrl; } else { var contentId = contextInfo.ContentId; if (contextInfo.ContextType == ParseType.Content) { if (contentId != 0)//获取内容视频 { var contentInfo = await parseManager.GetContentAsync(); if (contentInfo != null) { videoUrl = contentInfo.Get <string>(type); if (string.IsNullOrEmpty(videoUrl)) { videoUrl = contentInfo.VideoUrl; } } } } else if (contextInfo.ContextType == ParseType.Each) { videoUrl = contextInfo.ItemContainer.EachItem.Value as string; } } if (string.IsNullOrEmpty(videoUrl)) { return(string.Empty); } videoUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, videoUrl, pageInfo.IsLocal); imageUrl = await parseManager.PathManager.ParseSiteUrlAsync(pageInfo.Site, imageUrl, pageInfo.IsLocal); await pageInfo.AddPageBodyCodeIfNotExistsAsync(ParsePage.Const.JsAcVideoJs); attributes["class"] = "video-js vjs-default-skin" + (string.IsNullOrEmpty(attributes["class"]) ? string.Empty : " " + attributes["class"]); attributes["src"] = videoUrl; if (isAutoPlay) { attributes["autoplay"] = "true"; } if (isControls) { attributes["controls"] = "true"; } if (isLoop) { attributes["loop"] = "true"; } if (!string.IsNullOrEmpty(imageUrl)) { attributes["poster"] = imageUrl; } if (!string.IsNullOrEmpty(width)) { attributes["width"] = width; } attributes["height"] = string.IsNullOrEmpty(height) ? "280" : height; return($@"<video {TranslateUtils.ToAttributesString(attributes)}></video>"); }