示例#1
0
 public IEnumerable <Models.Page> ByHtmlBlock(HtmlBlock htmlBlock)
 {
     return(AllPagesNested(htmlBlock.Site).Select(it => it.AsActual())
            .Where(it => it.PagePositions != null &&
                   it.PagePositions.Any(p => p is HtmlBlockPosition && ((HtmlBlockPosition)p).BlockName.EqualsOrNullEmpty(htmlBlock.Name, StringComparison.CurrentCultureIgnoreCase)))
            .ToArray());
 }
示例#2
0
 private IEnumerable <View> Render(HtmlBlock block)
 {
     if (block.Type == HtmlBlockType.NonInterruptingBlock || block.Type == HtmlBlockType.Comment)
     {
         var tag = block.Lines.Lines.FirstOrDefault().Slice.ToString();
         if (tag == "<!--br-->" || tag == "<br>")
         {
             var label = new Label
             {
                 Text = "\n",
             };
             return(new View[] { label });
         }
         else
         {
             // ?
         }
     }
     else
     {
         // ?
     }
     // ?
     return(null);
 }
示例#3
0
        public void HtmlBlockNoTitle()
        {
            var block = new HtmlBlock();
            var title = block.GetTitle();

            Assert.Equal("Empty", title);
        }
示例#4
0
        public virtual ActionResult Versions(string uuid)
        {
            var htmlBlock = new HtmlBlock(Site, uuid);
            var model     = VersionManager.AllVersions <HtmlBlock>(htmlBlock);

            return(View(model));
        }
示例#5
0
        public virtual ActionResult PreviewVersion(string uuid, int version)
        {
            var htmlBlock = new HtmlBlock(Site, uuid);
            var model     = VersionManager.GetVersion <HtmlBlock>(htmlBlock, version);

            return(View(model));
        }
示例#6
0
        public virtual ActionResult PreviewVersion(string name, int version)
        {
            var page  = new HtmlBlock(Site, name);
            var model = Manager.VersiongLogger.GetVersion(page, version);

            return(View(model));
        }
示例#7
0
        public virtual ActionResult Version(string name)
        {
            var htmlBlock = new HtmlBlock(Site, name);
            var model     = Manager.VersiongLogger.AllVersions(htmlBlock);

            return(View(model));
        }
示例#8
0
        public void Localize(HtmlBlock o, Site targetSite)
        {
            var htmlBlock = Get(o);

            htmlBlock.Site = targetSite;
            InsertOrUpdate(htmlBlock, htmlBlock);
        }
        public Task <Either <ActionResult, IContentBlockViewModel> > UpdateTextBasedContentBlock(
            Guid releaseId, Guid contentSectionId, Guid contentBlockId, ContentBlockUpdateRequest request)
        {
            return(CheckContentSectionExists(releaseId, contentSectionId)
                   .OnSuccess(CheckCanUpdateRelease)
                   .OnSuccess(async tuple =>
            {
                var(_, section) = tuple;

                var blockToUpdate = section.Content.Find(block => block.Id == contentBlockId);

                if (blockToUpdate == null)
                {
                    return NotFound <IContentBlockViewModel>();
                }

                return blockToUpdate switch
                {
                    MarkDownBlock markDownBlock => await UpdateMarkDownBlock(markDownBlock, request.Body),
                    HtmlBlock htmlBlock => await UpdateHtmlBlock(htmlBlock, request.Body),
                    DataBlock _ => ValidationActionResult(IncorrectContentBlockTypeForUpdate),
                    _ => throw new ArgumentOutOfRangeException()
                };
            }));
        }
示例#10
0
        private void InsertOrUpdate(HtmlBlock @new, HtmlBlock old)
        {
            ((IPersistable)@new).OnSaving();

            DataHelper.StoreObject(@new, @new.UUID, ModelExtensions.HtmlBlockDataType);

            ((IPersistable)@new).OnSaved();
        }
        /// <summary>
        /// Returns a new <c>HtmlBlock</c> which generates a "&lt;td&gt;" element for use within
        /// the toolbar.
        /// </summary>
        ///
        /// <param name="htmlTextWriter">The <c>HtmlTextWriter</c> to write to.</param>
        ///
        private static HtmlBlock GetTd(HtmlTextWriter htmlTextWriter)
        {
            htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Class, Constants.ToolbarClass);
            htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Nowrap, "1");
            HtmlBlock block = new HtmlBlock(HtmlTextWriterTag.Td, 0, htmlTextWriter);

            return(block);
        }
示例#12
0
        public Search.Models.IndexObject GetIndexObject(object o)
        {
            IndexObject indexObject = null;

            Page page = (Page)o;
            NameValueCollection storeFields = new NameValueCollection();
            NameValueCollection sysFields   = new NameValueCollection();

            sysFields.Add("SiteName", page.Site.FullName);
            sysFields.Add("PageName", page.FullName);

            string        title = "";
            StringBuilder body  = new StringBuilder();

            if (page.HtmlMeta != null && !string.IsNullOrEmpty(page.HtmlMeta.HtmlTitle))
            {
                title = page.HtmlMeta.HtmlTitle;
            }
            if (!string.IsNullOrEmpty(page.ContentTitle))
            {
                body.AppendFormat(title);

                title = page.ContentTitle;
            }

            if (page.PagePositions != null)
            {
                foreach (var item in page.PagePositions.Where(it => (it is HtmlBlockPosition) || (it is HtmlPosition)))
                {
                    if (item is HtmlBlockPosition)
                    {
                        HtmlBlockPosition htmlBlockPosition = (HtmlBlockPosition)item;
                        var htmlBlock = new HtmlBlock(page.Site, htmlBlockPosition.BlockName).LastVersion().AsActual();
                        if (htmlBlock != null)
                        {
                            body.Append(" " + Kooboo.Extensions.StringExtensions.StripAllTags(htmlBlock.Body));
                        }
                    }
                    else
                    {
                        HtmlPosition htmlPosition = (HtmlPosition)item;
                        body.Append(" " + Kooboo.Extensions.StringExtensions.StripAllTags(htmlPosition.Html));
                    }
                }
            }


            indexObject = new IndexObject()
            {
                Title        = title,
                Body         = body.ToString(),
                StoreFields  = storeFields,
                SystemFields = sysFields,
                NativeType   = typeof(Page).AssemblyQualifiedNameWithoutVersion()
            };

            return(indexObject);
        }
示例#13
0
 public HtmlBlock(HtmlBlock b, bool isInAnchor, double pos)
 {
     if (isInAnchor)
     {
         numTokensInsideAnchors = b.numTokensInsideAnchors;
     }
     textClass   = b.textClass;
     relPosition = pos;
 }
        private void AddCoreCss(HtmlTextWriter writer, int lcid)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Rel, "stylesheet");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css");
            string cssUrl = String.Format(CultureInfo.InvariantCulture, "/_layouts/{0}/styles/core.css", lcid);

            writer.AddAttribute(HtmlTextWriterAttribute.Href, cssUrl);
            HtmlBlock.WriteFullTag(HtmlTextWriterTag.Link, 1, writer);
        }
        public static void WriteHtml(HtmlBlock html)
        {
            if (html.Type != HtmlBlockType.InterruptingBlock &&
                html.Type != HtmlBlockType.NonInterruptingBlock)
            {
                return;
            }

            MarkdownConsole.WriteHtml(GetTextFromInlineContainer(html.Inline));
        }
示例#16
0
文件: Match.cs 项目: Scub3d/Jhinxz
        public static Match parseMatchJSON(JSONNode json)
        {
            List <Team>          teams          = Team.parseTeamsJSON(json["teams"].AsArray);
            List <Player>        players        = Player.parsePlayersJSON(json["players"].AsArray);
            List <ScheduleItem>  scheduleItems  = ScheduleItem.parseScheduleItemsJSON(json["scheduleItems"].AsArray);
            List <GameIdMapping> gameIdMappings = GameIdMapping.parseGameIdMappingsJSON(json["gameIdMappings"].AsArray);
            List <Video>         videos         = Video.parseVideosJSON(json["videos"].AsArray);
            List <HtmlBlock>     htmlBlocks     = HtmlBlock.parseHtmlBlocksJSON(json["htmlBlocks"].AsArray);

            return(new Match(teams, players, scheduleItems, gameIdMappings, videos, htmlBlocks));
        }
示例#17
0
        public virtual ActionResult Revert(string uuid, int version, string @return)
        {
            var data      = new JsonResultData(ModelState);
            var htmlBlock = new HtmlBlock(Site, uuid);

            data.RunWithTry((resultData) =>
            {
                VersionManager.Revert <HtmlBlock>(htmlBlock, version);
                data.RedirectUrl = @return;
            });
            return(Json(data));
        }
示例#18
0
 private bool TryScriptBlockRenderer(HtmlRenderer renderer, HtmlBlock block)
 {
     if (block.Lines.Lines.Any(l => l.Slice.Text.Contains("script")))
     {
         foreach (var line in block.Lines.Lines)
         {
             renderer.WriteEscape(line.Slice);
         }
         return(true);
     }
     return(false);
 }
示例#19
0
        private void CalcBlockFeatures(HtmlBlock b, HtmlBlock prevB)
        {
            if (b.Empty)
            {
                b.linkDensity = 0.0;
                b.textDensity = 0.0;
                b.numWords    = 0;
                return;
            }
            b.linkDensity = b.numTokensInsideAnchors / (double)b.tokenCount;
            if (b.linkDensity > 1.0)
            {
                b.linkDensity = 1.0;
            }
            int lines = b.charCount / 80;

            if (lines <= 1)
            {
                b.textDensity = b.tokenCount;
            }
            else
            {
                b.textDensity = b.tokenCount / (double)(lines - 1);
            }

            b.textDensityQuotPC = prevB.textDensity / b.textDensity;
            if (b.numWords > 0)
            {
                b.avgWordLen             = b.wordLengthSum / (double)b.numWords;
                b.capitalWordsRatio      = b.numCapitalWords / (double)b.numWords;
                b.capitalStartWordsRatio = b.numCapitalStartWords / (double)b.numWords;
                b.numWordsQuotPC         = prevB.numWords / (double)b.numWords;
                b.capitalWordsRatio      = b.numCapitalWords / (double)b.numWords;
            }
            else
            {
                b.avgWordLen             = 0;
                b.fullstopRatio          = 0;
                b.capitalWordsRatio      = 0;
                b.capitalStartWordsRatio = 0;
                b.numWordsQuotPC         = 0;
                b.capitalWordsRatio      = 0;
            }

            b.text = GetTextBlock(b.startListIdx, b.endListIdx, /*decode=*/ true, /*compact=*/ true);
            int indx = -1;

            while ((indx = b.text.IndexOf(".", indx + 1)) != -1)
            {
                b.numFullstops++;
            }
            b.fullstopRatio = b.numFullstops / (double)b.numWords;
        }
示例#20
0
        public void EnsureChildrenAreWritten()
        {
            string    text  = "some text";
            HtmlBlock block = new HtmlBlock(new HtmlBlockParser())
            {
                Inline = new ContainerInline().AppendChild(new LiteralInline(text))
            };

            renderer.Write(pdfBuilder, block);
            Assert.AreEqual(1, document.LastSection.Elements.Count);
            Assert.AreEqual(text, ((Paragraph)document.LastSection.Elements[0]).GetRawText());
        }
示例#21
0
        public override ActionResult Create(HtmlBlock model)
        {
            ViewBag.ExternalCssSetting = this.GetExternalCssSetting();
            if (model == null)
            {
                model = new HtmlBlock();
            }
            string name = Request.RequestContext.GetRequestValue("ns");

            name       = !string.IsNullOrEmpty(name) ? name + "." : null;
            model.Name = name;
            return(base.Create(model));
        }
示例#22
0
        private static IEnumerable <Tag> Convert(HtmlBlock block)
        {
            var lines = block.Lines;

            for (var i = 0; i < lines.Count; i++)
            {
                var line = lines.Lines[i];
                foreach (var tag in Convert(line) ?? Enumerable.Empty <Tag>())
                {
                    yield return(tag);
                }
            }
        }
示例#23
0
        public void HtmlBlockHasTitle()
        {
            var block = new HtmlBlock()
            {
                Body = new Extend.Fields.HtmlField
                {
                    Value = "<p>Lorem ipsum</p>"
                }
            };
            var title = block.GetTitle();

            Assert.Equal("Lorem ipsum", title);
        }
示例#24
0
        public void SearchHtmlBlock()
        {
            var block = new HtmlBlock
            {
                Body = new HtmlField
                {
                    Value = "<p>Lorem ipsum</p>"
                }
            };
            var search = block.GetIndexedContent();

            Assert.Equal(block.Body.Value, search);
        }
示例#25
0
        public void ExportHtmlBlocksToDisk(Site site)
        {
            IHtmlBlockProvider fileHtmlProvider = new Kooboo.CMS.Sites.Persistence.FileSystem.HtmlBlockProvider();

            //remove the pages folder to clear all old pages.
            var dummy = new HtmlBlock(site, "Dummy");

            Kooboo.IO.IOUtility.DeleteDirectory(dummy.BasePhysicalPath, true);

            foreach (var item in QueryBySite(site))
            {
                fileHtmlProvider.Add(item);
            }
        }
        /// <summary>
        /// Returns a new <c>HtmlBlock</c> which generates a "&lt;img&gt;" element for use within
        /// the toolbar.  This is the icon-like image.
        /// </summary>
        ///
        /// <param name="htmlTextWriter">The <c>HtmlTextWriter</c> to write to.</param>
        ///
        private HtmlBlock GetImage(HtmlTextWriter htmlTextWriter)
        {
            htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Src, ImageUrl);
            if (ToolTip.Length != 0)
            {
                htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Alt, ToolTip);
            }
            htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Style, "border-width:0px;");
            htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Width, "16");
            htmlTextWriter.AddAttribute(HtmlTextWriterAttribute.Height, "16");
            HtmlBlock block = new HtmlBlock(HtmlTextWriterTag.Img, 0, htmlTextWriter);

            return(block);
        }
示例#27
0
        public Task <string> RenderAsync(RenderContext context, ComponentSetting settings)
        {
            if (settings != null && !string.IsNullOrEmpty(settings.NameOrId))
            {
                HtmlBlock htmlBlock = context.WebSite.SiteDb().HtmlBlocks.GetByNameOrId(settings.NameOrId);

                if (htmlBlock != null)
                {
                    return(Task.FromResult(htmlBlock.GetValue(context.Culture).ToString()));
                }
            }

            return(Task.FromResult(string.Empty));
        }
示例#28
0
        public void HtmlBlockHasLongTitle()
        {
            var block = new HtmlBlock()
            {
                Body = new Extend.Fields.HtmlField
                {
                    Value = "<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Donec id elit non mi porta gravida at eget metus. Nulla vitae elit libero, a pharetra augue. Sed posuere consectetur est at lobortis. Etiam porta sem malesuada magna mollis euismod.</p>"
                }
            };
            var title = block.GetTitle();

            Assert.Equal(43, title.Length);
            Assert.EndsWith("...", title);
        }
示例#29
0
            public TextClass Predict(HtmlBlock prevB, HtmlBlock curB, HtmlBlock nextB)
            {
                Features features = new Features();

                prevB.GetFeatures(features, HtmlBlock.Precedence.Previous);
                curB.GetFeatures(features, HtmlBlock.Precedence.Current);
                nextB.GetFeatures(features, HtmlBlock.Precedence.Next);

                string trace;

                curB.textClass = Predict(features, out trace);
                curB.trace     = trace;
                return(curB.textClass);
            }
示例#30
0
        public virtual ActionResult UpdateHtmlBlock(string blockName, string value)
        {
            var data = new JsonResultData(ModelState);

            data.RunWithTry((resultData) =>
            {
                var manager = ServiceFactory.GetService <HtmlBlockManager>();
                var old     = manager.Get(this.Site, blockName);
                var @new    = new HtmlBlock(this.Site, blockName)
                {
                    Body = value
                };
                manager.Update(this.Site, @new, old);
            });
            return(Json(data));
        }
示例#31
0
        private void CalcBlockFeatures(HtmlBlock b, HtmlBlock prevB)
        {
            if (b.Empty)
            {
                b.linkDensity = 0.0;
                b.textDensity = 0.0;
                b.numWords = 0;
                return;
            }
            b.linkDensity = b.numTokensInsideAnchors / (double)b.tokenCount;
            if (b.linkDensity > 1.0)
                b.linkDensity = 1.0;
            int lines = b.charCount / 80;
            if (lines <= 1)
                b.textDensity = b.tokenCount;
            else
                b.textDensity = b.tokenCount / (double)(lines - 1);

            b.textDensityQuotPC = prevB.textDensity / b.textDensity;
            if (b.numWords > 0)
            {
                b.avgWordLen = b.wordLengthSum / (double)b.numWords;
                b.capitalWordsRatio = b.numCapitalWords / (double)b.numWords;
                b.capitalStartWordsRatio = b.numCapitalStartWords / (double)b.numWords;
                b.numWordsQuotPC = prevB.numWords / (double)b.numWords;
                b.capitalWordsRatio = b.numCapitalWords / (double)b.numWords;
            }
            else
            {
                b.avgWordLen = 0;
                b.fullstopRatio = 0;
                b.capitalWordsRatio = 0;
                b.capitalStartWordsRatio = 0;
                b.numWordsQuotPC = 0;
                b.capitalWordsRatio = 0;
            }

            b.text = GetTextBlock(b.startListIdx, b.endListIdx, /*decode=*/true, /*compact=*/true);
            int indx = -1;
            while ((indx = b.text.IndexOf(".", indx + 1)) != -1)
                b.numFullstops++;
            b.fullstopRatio = b.numFullstops / (double)b.numWords;
        }
示例#32
0
 public HtmlBlock(HtmlBlock b, bool isInAnchor, double pos)
 {
     if (isInAnchor)
         numTokensInsideAnchors = b.numTokensInsideAnchors;
     textClass = b.textClass;
     relPosition = pos;
 }
示例#33
0
            public TextClass Predict(HtmlBlock prevB, HtmlBlock curB, HtmlBlock nextB)
            {
                Features features = new Features();
                prevB.GetFeatures(features, HtmlBlock.Precedence.Previous);
                curB.GetFeatures(features, HtmlBlock.Precedence.Current);
                nextB.GetFeatures(features, HtmlBlock.Precedence.Next);

                string trace;
                curB.textClass = Predict(features, out trace);
                curB.trace = trace;
                return curB.textClass;
            }
示例#34
0
        private List<HtmlBlock> GetHtmlBlocks(TextReader reader, bool isAnnotated)
        {
            HtmlTokenizer.Enumerator tokensEnum = TokenizeHtml(reader);
            if (tokensEnum == null)
                return null;

            int pos = 0;
            bool isInAnchor = false;
            bool isInP = false;
            bool isInH = false;

            List<HtmlBlock> blocks = new List<HtmlBlock>();
            HtmlBlock prevBlock = new HtmlBlock(pos, -1);
            blocks.Add(prevBlock);
            HtmlBlock currentBlock = new HtmlBlock(++pos, 0);

            Stack<TextClass> textClasses = new Stack<TextClass>();
            textClasses.Push(TextClass.Boilerplate);
            TextClass currentClass = TextClass.Boilerplate;
            TextClass textClass = TextClass.Unknown;
            while (tokensEnum.MoveNext())
            {
                string t = tokensEnum.Current;
                //Console.WriteLine(t + " " + tokensEnum.CurrentToken.TokenType);
                if (tokensEnum.CurrentToken.IsTag)
                {
                    if (mIgnoreDecorativeTags && ignorableTags.Contains(tokensEnum.CurrentToken.TagName))
                    {
                        continue;
                    }
                    if (IsTagOpening("a", tokensEnum.CurrentToken))
                    {
                        isInAnchor = true;
                        currentBlock.Add(t, tokensEnum.CurrentToken.TokenType, false, true);
                    }
                    else if (IsTagClosing("a", tokensEnum.CurrentToken))
                    {
                        isInAnchor = false;
                        currentBlock.Add(t, tokensEnum.CurrentToken.TokenType, false, true);
                    }
                    else
                    {
                        if (IsTagOpening("p", tokensEnum.CurrentToken))
                        {
                            isInP = true;
                        }
                        else if (IsTagOpening("h", tokensEnum.CurrentToken))
                        {
                            isInH = true;
                        }
                        if (isAnnotated)
                        {
                            SpanTagType spanType = GetSpanTagType(tokensEnum.CurrentToken, out textClass);
                            if (spanType != SpanTagType.NotSpanTag && spanType != SpanTagType.OpeningAndClosingSpanTag)
                            {
                                if ((spanType == SpanTagType.ClosingSpanTag) && (textClasses.Count > 1))
                                    textClasses.Pop();
                                else if (spanType != SpanTagType.ClosingSpanTag)
                                    textClasses.Push(textClass);
                                foreach (TextClass c in textClasses)
                                    if (c != TextClass.Unknown)
                                    {
                                        currentClass = c;
                                        break;
                                    }
                                continue;
                            }
                        }
                        if (currentBlock.HasWords)
                        {
                            currentBlock.isInP = isInP;
                            currentBlock.isInH = isInH;
                            currentBlock.endListIdx = tokensEnum.CurrentTokenListIdx;
                            CalcBlockFeatures(currentBlock, prevBlock);
                            prevBlock = currentBlock;
                            blocks.Add(currentBlock);
                            currentBlock = new HtmlBlock(++pos, tokensEnum.CurrentTokenListIdx + 1);
                        }
                        else
                        {
                            currentBlock.startListIdx = tokensEnum.CurrentTokenListIdx + 1;
                            currentBlock.endListIdx = -1;
                        }

                        if (IsTagClosing("p", tokensEnum.CurrentToken))
                        {
                            isInP = false;
                        }
                        else if (IsTagClosing("h", tokensEnum.CurrentToken))
                        {
                            isInH = false;
                        }

                    }
                }
                else
                {
                    currentBlock.Add(t, tokensEnum.CurrentToken.TokenType, isInAnchor, false);
                    if (isAnnotated)
                        currentBlock.textClass = currentClass;
                }
            }
            // flush
            if (currentBlock.HasWords)
            {
                currentBlock.endListIdx = tokenizer.Tokens.Count;
                CalcBlockFeatures(currentBlock, prevBlock);
                blocks.Add(currentBlock);
            }

            // dummy
            blocks.Add(new HtmlBlock(++pos, -1));

            // calc relative position
            foreach (HtmlBlock b in blocks)
                b.relPosition = b.relPosition / (double)(blocks.Count - 2);

            return blocks;
        }