예제 #1
0
        public static ISelector GetSelector(ExtractBy extractBy)
        {
            string    value = extractBy.Value;
            ISelector selector;

            switch (extractBy.Type)
            {
            case ExtractBy.ExtracType.Css:
                selector = new CssSelector(value);
                break;

            case ExtractBy.ExtracType.Regex:
                selector = new RegexSelector(value);
                break;

            case ExtractBy.ExtracType.XPath:
                selector = GetXpathSelector(value);
                break;

            case ExtractBy.ExtracType.JsonPath:
                selector = new JsonPathSelector(value);
                break;

            case ExtractBy.ExtracType.Enviroment:
                selector = new EnviromentSelector(value);
                break;

            default:
                selector = GetXpathSelector(value);
                break;
            }
            return(selector);
        }
예제 #2
0
        public void DescendantCombinator_WithNesting_Matches()
        {
            var selector = CssSelector.WithElement("div", null)
                           .Combine(CssCombinator.Descendant, CssSelector.WithElement("ol", null))
                           .Combine(CssCombinator.Descendant, CssSelector.WithElement("li", null))
                           .Combine(CssCombinator.Descendant, CssSelector.WithElement("p", null));

            var xdoc = XDocument.Parse(@"
				<html>
					<head />
					<body>
						<div id='div00'>
							<ol id='ol01'>
								<li id='li01'><p id='p01' /></li>
								<li id='li02'><p id='p02_1' /><p id='p02_2' /></li>
								<li id='li03' />
								<li id='li04'><div id='div04'><p id='p04' /></div></li>
								<div id='div05'>
									<li id='li05'><p id='p05' /></li>
								</div>
							</ol>
						</div>
						<ol id='ol02'>
							<li id='li06'><p id='p06' /></li>
						</ol>
					</body>
				</html>"                );

            var matchingElements = Match(xdoc, selector);

            Assert.That(matchingElements.Select(e => e.Attribute("id").Value), Is.EquivalentTo(new[] { "p01", "p02_1", "p02_2", "p04", "p05" }));
        }
예제 #3
0
        /// <summary>
        /// Freezes the current thread until at least one element that matches the query appears in the document.
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="query"></param>
        /// <param name="timeout"></param>
        /// <returns>Matched elements.</returns>
        public static IEnumerable <Element> WaitSelector(this HtmlDocument doc, string query, int timeout = 0)
        {
            if (timeout == 0)
            {
                timeout = DefaultTimeout;
            }

            var selector = new CssSelector(query);
            var timespan = 100;

            for (int i = 0; i < timeout / timespan; i++)
            {
                try
                {
                    var elt = selector.Select(doc).ToListOrNull();
                    if (elt != null)
                    {
                        return(elt);
                    }
                }
                catch
                {
                }

                Thread.Sleep(timespan);
            }

            return(selector.Select(doc));
        }
예제 #4
0
    protected override string PerformAs(IPerformer actor)
    {
        var topItem = new CssSelector("#toDoList :first-child", "the top to-do item");
        var text    = actor.Perform(TheText.Of(topItem));

        return(text);
    }
예제 #5
0
        public void StripNotPseudoClassContent_ElementWithPseudoClass_ReturnsOriginalSelector()
        {
            var expected = "li:first-child";
            var selector = new CssSelector(expected);

            Assert.AreEqual(expected, selector.StripNotPseudoClassContent().ToString());
        }
예제 #6
0
        public static ISelector GetSelector(ExtractByAttribute extractBy)
        {
            var       value    = extractBy.Value;
            ISelector selector = null;

            switch (extractBy.Type)
            {
            case ExtractType.Css:
                selector = new CssSelector(value);
                break;

            case ExtractType.Regex:
                selector = new RegexSelector(value);
                break;

            case ExtractType.XPath:
                selector = new XPathSelector(value);
                break;

            case ExtractType.JsonPath:
                selector = new JsonPathSelector(value);
                break;
            }
            return(selector);
        }
예제 #7
0
        public void SelectorSequence_WithTwoSelectors_ToString()
        {
            var selector = CssSelector.WithElement("h1", null)
                           .Add(CssSelector.WithId("chapter1"));

            Assert.That(selector.ToString(), Is.EqualTo("h1#chapter1"));
        }
예제 #8
0
        public void SelectorSequence_WithThreeSelectors_Matches()
        {
            var selector = CssSelector.WithElement("h1", null)
                           .Add(CssSelector.WithId("chapter1"));

            var pseudoClassInfo = Substitute.For <XElementPseudoClassInfo>();

            pseudoClassInfo.IsTarget(Arg.Any <XElement>())
            .Returns(call => "true".Equals(call.Arg <XElement>().Attribute("istarget")?.Value, StringComparison.OrdinalIgnoreCase));

            var xdoc = XDocument.Parse(@"
				<html>
					<head />
					<body>
						<p id='chapter1' istarget='true' />
						<h1 id='chapter1' istarget='true' />
						<h1 id='ch2' istarget='true' />
						<h1 id='ch3' />
					</body>
				</html>"                );

            var matchingElements = Match(xdoc, selector);

            Assert.That(matchingElements.Select(e => e.Name.LocalName + "." + e.Attribute("id").Value), Is.EquivalentTo(new[] { "h1.chapter1" }));
        }
예제 #9
0
    protected override void PerformAs(IPerformer actor)
    {
        // You may need to update the URL based on your test hosting
        actor.Perform(OpenTheirBrowserOn.TheUrl("http://localhost/"));
        var thePage = new CssSelector("body", "the page");

        actor.Perform(Wait.Until(thePage).IsVisible());
    }
예제 #10
0
        public void ChildCombinator_WithoutNesting_ToString()
        {
            var leftSelector  = CssSelector.WithElement("h1", null);
            var rightSelector = CssSelector.WithElement("em", null);
            var selector      = leftSelector.Combine(CssCombinator.Child, rightSelector);

            Assert.That(selector.ToString(), Is.EqualTo("h1 > em"));
        }
예제 #11
0
 /// <summary>
 /// 调用此方法通知预热 Jumony for MVC 运行环境。
 /// </summary>
 public static void WarmUp()
 {
     if (!_isWarmedUp)
     {
         CssSelector.WarmUp();
         _isWarmedUp = true;
     }
 }
예제 #12
0
        public void SelectorSequence_WithThreeSelectors_ToString()
        {
            var selector = CssSelector.WithElement("h1", null)
                           .Add(CssSelector.WithId("chapter1"))
                           .Add(CssSelector.WithPseudoClass("target"));

            Assert.That(selector.ToString(), Is.EqualTo("h1#chapter1:target"));
        }
예제 #13
0
        public void DescendantCombinator_WithNesting_ToString()
        {
            var selector = CssSelector.WithElement("div", null)
                           .Combine(CssCombinator.Descendant, CssSelector.WithElement("ol", null))
                           .Combine(CssCombinator.Descendant, CssSelector.WithElement("li", null))
                           .Combine(CssCombinator.Descendant, CssSelector.WithElement("p", null));

            Assert.That(selector.ToString(), Is.EqualTo("div ol li p"));
        }
예제 #14
0
        public void Select(string html, string selector, string expectedIds)
        {
            var doc = new Document();

            doc.Write(html);
            var cssSelector = new CssSelector(selector);
            var items       = cssSelector.Select(doc.DocumentElement).Select(x => x.Id).ToArray();

            CollectionAssert.AreEqual(string.IsNullOrEmpty(expectedIds) ? new string[0] : expectedIds.Split(','), items);
        }
예제 #15
0
    protected override void PerformAs(IPerformer actor)
    {
        var newItemTextbox = new CssSelector("#newItemText", "the new-item text box");

        actor.Perform(Enter.TheText(item).Into(newItemTextbox));

        var theAddButton = new CssSelector("#newItemButton", "the add-item button");

        actor.Perform(Click.On(theAddButton));
    }
예제 #16
0
        /// <summary>
        /// (BNF) selector: any+;
        /// </summary>
        /// <returns></returns>
        private CssSelector ParseSelector()
        {
            CssSelector selector = new CssSelector();
            char        ch;

            while (this.Read(out ch) && (Char.IsWhiteSpace(ch) || ch == ','))
            {
                // skip whitespace, and empty selectors
            }

            // consume property name
            switch (ch)
            {
            case '{':
            {
                // no more declarations
                return(null);
            }

            //case ':':// pseudoclass
            case ';':
            case '}':
            {
                throw new SyntaxError("Invalid chars in selector", this.reader.FilePath, this.reader.Line, this.reader.Column);
            }
            }

            int start = this.Position;            // start with current char

            while (this.Read(out ch))
            {
                // continue consuming selector
                switch (ch)
                {
                case ',':
                case '{':
                {
                    selector.Value = this.Copy(start);
                    if (ch == '{')
                    {
                        this.PutBack();
                    }
                    return(selector);
                }

                //case ':':// pseudoclass
                case ';':
                case '}':
                {
                    throw new SyntaxError("Invalid selector", this.reader.FilePath, this.reader.Line, this.reader.Column);
                }
                }
            }
            throw new UnexpectedEndOfFile("Unclosed ruleset", this.reader.FilePath, this.reader.Line, this.reader.Column);
        }
예제 #17
0
        public void ChildCombinator_WithoutNesting()
        {
            var leftSelector  = CssSelector.WithElement("h1", null);
            var rightSelector = CssSelector.WithElement("em", null);
            var selector      = leftSelector.Combine(CssCombinator.Child, rightSelector);

            Assert.Multiple(() =>
            {
                Assert.That(selector.Subject, Is.SameAs(rightSelector), nameof(selector.Subject));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(0, 0, 2)), nameof(selector.Specificity));
            });
        }
예제 #18
0
        public void ElementSelector_ForNameInUnspecifiedNamespace()
        {
            var selector = CssSelector.WithElement("h1");

            Assert.Multiple(() =>
            {
                Assert.That(selector, Is.InstanceOf <CssSimpleSelector>());
                Assert.That(selector.LocalName, Is.EqualTo("h1"), nameof(selector.LocalName));
                Assert.That(selector.NamespacePrefix, Is.Null, nameof(selector.NamespacePrefix));
                Assert.That(selector.TypeSelector, Is.SameAs(selector), nameof(selector.TypeSelector));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(0, 0, 1)), nameof(selector.Specificity));
            });
        }
예제 #19
0
        private ProcessResult ProcessResult(CQ elems, CssSelector selector)
        {
            var pr = new ProcessResult();

            if (elems != null)
            {
                switch (selector.Type)
                {
                case CssTypeEnum.InnerHtml:
                {
                    foreach (var ele in elems)
                    {
                        pr.Matches.Add(HttpUtility.HtmlDecode(ele.InnerHTML));
                    }
                    break;
                }

                case CssTypeEnum.Text:
                {
                    foreach (var ele in elems)
                    {
                        pr.Matches.Add(HttpUtility.HtmlDecode(ele.Cq().Text()));
                    }
                    break;
                }

                case CssTypeEnum.Attr:
                {
                    foreach (var ele in elems)
                    {
                        if (!string.IsNullOrEmpty(selector.AttrName))
                        {
                            var attr = ele.Attributes.GetAttribute(selector.AttrName);
                            pr.Matches.Add(HttpUtility.HtmlDecode(attr));
                        }
                    }
                    break;
                }

                case CssTypeEnum.OutHtml:
                {
                    foreach (var ele in elems)
                    {
                        pr.Matches.Add(HttpUtility.HtmlDecode(ele.OuterHTML));
                    }
                    break;
                }
                }
            }
            return(pr);
        }
예제 #20
0
        public void SelectorSequence_WithTwoSelectors()
        {
            var typeSelector  = CssSelector.WithElement("h1");
            var extraSelector = CssSelector.WithId("chapter1");
            var selector      = typeSelector.Add(extraSelector);

            Assert.Multiple(() =>
            {
                Assert.That(selector.TypeSelector, Is.SameAs(typeSelector), nameof(selector.TypeSelector));
                Assert.That(selector.OtherSelectors, Is.EquivalentTo(new[] { extraSelector }), nameof(selector.OtherSelectors));
                Assert.That(selector.Subject, Is.SameAs(selector), nameof(selector.Subject));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(1, 0, 1)), nameof(selector.Specificity));
            });
        }
예제 #21
0
        public void AttributeSelector_ForQualifiedName_WithValueIsLanguageCode()
        {
            var selector = CssSelector.WithAttribute("href", "x", CssAttributeMatchOperator.LanguageCode, "fr");

            Assert.Multiple(() =>
            {
                Assert.That(selector, Is.InstanceOf <CssSimpleSelector>());
                Assert.That(selector.LocalName, Is.EqualTo("href"), nameof(selector.LocalName));
                Assert.That(selector.NamespacePrefix, Is.EqualTo("x"), nameof(selector.NamespacePrefix));
                Assert.That(selector.MatchOperator, Is.EqualTo(CssAttributeMatchOperator.LanguageCode), nameof(selector.MatchOperator));
                Assert.That(selector.MatchOperand, Is.EqualTo("fr"), nameof(selector.MatchOperand));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(0, 1, 0)), nameof(selector.Specificity));
            });
        }
예제 #22
0
        public void AttributeSelector_ForNameInAnyNamespace_WithValueContainingWord()
        {
            var selector = CssSelector.WithAttribute("href", "*", CssAttributeMatchOperator.ContainsWord, "test");

            Assert.Multiple(() =>
            {
                Assert.That(selector, Is.InstanceOf <CssSimpleSelector>());
                Assert.That(selector.LocalName, Is.EqualTo("href"), nameof(selector.LocalName));
                Assert.That(selector.NamespacePrefix, Is.EqualTo("*"), nameof(selector.NamespacePrefix));
                Assert.That(selector.MatchOperator, Is.EqualTo(CssAttributeMatchOperator.ContainsWord), nameof(selector.MatchOperator));
                Assert.That(selector.MatchOperand, Is.EqualTo("test"), nameof(selector.MatchOperand));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(0, 1, 0)), nameof(selector.Specificity));
            });
        }
예제 #23
0
        public void AttributeSelector_ForNameInUnspecifiedNamespace()
        {
            var selector = CssSelector.WithAttribute("href");

            Assert.Multiple(() =>
            {
                Assert.That(selector, Is.InstanceOf <CssSimpleSelector>());
                Assert.That(selector.LocalName, Is.EqualTo("href"), nameof(selector.LocalName));
                Assert.That(selector.NamespacePrefix, Is.Null, nameof(selector.NamespacePrefix));
                Assert.That(selector.MatchOperator, Is.EqualTo(CssAttributeMatchOperator.Any), nameof(selector.MatchOperator));
                Assert.That(selector.MatchOperand, Is.Null, nameof(selector.MatchOperand));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(0, 1, 0)), nameof(selector.Specificity));
            });
        }
예제 #24
0
        public void AttributeSelector_ForNameWithoutNamespace_WithExactValue()
        {
            var selector = CssSelector.WithAttribute("href", "", CssAttributeMatchOperator.Exact, "#some-target");

            Assert.Multiple(() =>
            {
                Assert.That(selector, Is.InstanceOf <CssSimpleSelector>());
                Assert.That(selector.LocalName, Is.EqualTo("href"), nameof(selector.LocalName));
                Assert.That(selector.NamespacePrefix, Is.EqualTo(""), nameof(selector.NamespacePrefix));
                Assert.That(selector.MatchOperator, Is.EqualTo(CssAttributeMatchOperator.Exact), nameof(selector.MatchOperator));
                Assert.That(selector.MatchOperand, Is.EqualTo("#some-target"), nameof(selector.MatchOperand));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(0, 1, 0)), nameof(selector.Specificity));
            });
        }
예제 #25
0
        protected override bool CheckNode(HtmlNode node, string parameter)
        {
            var selectors = CssSelector.Parse(parameter);
            var nodes     = new[] { node };

            foreach (var selector in selectors)
            {
                if (selector.FilterCore(nodes).Count() == 1)
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #26
0
        public void AttributeSelector_ForNameWithoutNamespace_WithAnyValue_Matches()
        {
            var selector = CssSelector.WithAttribute("href", "");
            var xdoc     = XDocument.Parse(@"
				<html>
					<head />
					<body>
						<a id='anchor1' href='http://some.where.else' />
						<a id='anchor2' />
					</body>
				</html>"                );

            var matchingElements = Match(xdoc, selector);

            Assert.That(matchingElements.Select(e => e.Attribute("id").Value), Is.EquivalentTo(new[] { "anchor1" }));
        }
예제 #27
0
        public void AttributeSelector_ForNameWithoutNamespace_WithExactValue_Matches()
        {
            var selector = CssSelector.WithAttribute("href", "", CssAttributeMatchOperator.Exact, "#another-target");
            var xdoc     = XDocument.Parse(@"
				<html>
					<head />
					<body>
						<a id='anchor1' href='#some-target' />
						<a id='anchor2' href='#another-target' />
					</body>
				</html>"                );

            var matchingElements = Match(xdoc, selector);

            Assert.That(matchingElements.Select(e => e.Attribute("id").Value), Is.EquivalentTo(new[] { "anchor2" }));
        }
예제 #28
0
        public static IList <HtmlAgilityPack.HtmlNode> QuerySelectorAll(this IEnumerable <HtmlAgilityPack.HtmlNode> nodes, string cssSelector)
        {
            if (cssSelector == null)
            {
                throw new ArgumentNullException("cssSelector");
            }

            if (cssSelector.Contains(','))
            {
                var combinedSelectors = cssSelector.Split(',');
                var rt = nodes.QuerySelectorAll(combinedSelectors[0]);

                foreach (var s in combinedSelectors.Skip(1))
                {
                    foreach (var n in nodes.QuerySelectorAll(s))
                    {
                        if (!rt.Contains(n))
                        {
                            rt.Add(n);
                        }
                    }
                }

                return(rt);
            }

            cssSelector = cssSelector.Trim();

            var selectors = CssSelector.Parse(cssSelector);

            bool allowTraverse = true;

            foreach (var selector in selectors)
            {
                if (allowTraverse && selector.AllowTraverse)
                {
                    nodes = Traverse(nodes);
                }

                nodes         = selector.Filter(nodes);
                allowTraverse = selector.AllowTraverse;
            }

            return(nodes
                   .Distinct()
                   .ToList());
        }
예제 #29
0
 public override string ToString()
 {
     if (CssSelector.HasValue())
     {
         return(CssSelector);
     }
     else
     {
         return((!Content.IsNullOrEmpty() ? Content : "")
                + "<" + TagName
                + (!Id.IsNullOrEmpty() ? "#" + Id : "")
                + (!Class.IsNullOrEmpty() ? "." + Class : "")
                + (!Name.IsNullOrEmpty() ? "[Name=" + Name + "]" : "")
                + (!Type.IsNullOrEmpty() ? "[Type=" + Type + "]" : "")
                + ">");
     }
 }
예제 #30
0
        public void DescendantCombinator_WithNesting()
        {
            var selector1 = CssSelector.WithElement("div");
            var selector2 = CssSelector.WithElement("ol");
            var selector3 = CssSelector.WithElement("li");
            var selector4 = CssSelector.WithElement("p");
            var selector  = selector1
                            .Combine(CssCombinator.Descendant, selector2)
                            .Combine(CssCombinator.Descendant, selector3)
                            .Combine(CssCombinator.Descendant, selector4);

            Assert.Multiple(() =>
            {
                Assert.That(selector.Subject, Is.SameAs(selector4), nameof(selector.Subject));
                Assert.That(selector.Specificity, Is.EqualTo(new CssSpecificity(0, 0, 4)), nameof(selector.Specificity));
            });
        }
예제 #31
0
 /// <summary>
 /// Exports grid SummaryRow to the specified worksheet.
 /// 
 /// </summary>
 protected virtual void ExportSummaries(WebDataGrid grid, Worksheet worksheet, ref int rowIndex, int columnOffset, int outlineLevel, bool hidden, string gridCssClass, int firstDataRowIndex)
 {
     SummaryRow behavior = grid.Behaviors.GetBehavior<SummaryRow>();
     int index1 = rowIndex - (grid.ShowFooter ? 2 : 1);
     bool renderingResolved = behavior.EnableCompactRenderingResolved;
     int summaryNumberVisible = behavior.ColumnSummaries.GetMaxSummaryNumberVisible();
     int maxSummaryRows = behavior.ColumnSummaries.GetMaxSummaryRows();
     string str1 = string.Empty;
     if (this.EnableStylesExport)
         str1 = behavior.ResolveCssClass(behavior.SummariesCssClass, 0);
     for (int index2 = 0; index2 < maxSummaryRows; ++index2)
     {
         if ((index2 < summaryNumberVisible || !renderingResolved) && (renderingResolved || behavior.ColumnSummaries.IsVisibleRow(index2)))
         {
             WorksheetRow worksheetRow = worksheet.Rows[rowIndex];
             worksheetRow.OutlineLevel = outlineLevel;
             worksheetRow.Hidden = hidden;
             int rowIndex1 = rowIndex;
             ExcelRowExportingEventArgs e1 = new ExcelRowExportingEventArgs(worksheet, worksheetRow, rowIndex1, columnOffset, outlineLevel, false, false, true);
             this.OnRowExporting(e1);
             if (!e1.Cancel)
             {
                 int columnIndex = columnOffset;
                 foreach (ControlDataField summaryCell in (IVisibleItemsEnumerable)grid.Fields)
                 {
                     if (!summaryCell.Hidden && !summaryCell.HiddenByParent)
                     {
                         WorksheetCell worksheetCell = worksheetRow.Cells[columnIndex];
                         Summary summaryByOrder = behavior.ColumnSummaries.GetSummaryByOrder(summaryCell.Key, index2);
                         SummarySetting summarySetting = (SummarySetting)null;
                         ExcelCellExportingEventArgs e2 = new ExcelCellExportingEventArgs(worksheet, worksheetCell, rowIndex, columnIndex, outlineLevel, false, false, true);
                         e2.Summary = summaryByOrder;
                         this.OnCellExporting(e2);
                         if (e2.Cancel)
                         {
                             ++columnIndex;
                         }
                         else
                         {
                             SummaryCellExportingEventArgs e3 = new SummaryCellExportingEventArgs(summaryCell, worksheet, worksheetCell, rowIndex, columnIndex, outlineLevel, false, false, true);
                             e3.Summary = summaryByOrder;
                             this.OnSummaryCellExporting(e3);
                             if (e3.Cancel)
                             {
                                 ++columnIndex;
                             }
                             else
                             {
                                 if (summaryByOrder == null)
                                 {
                                     worksheetCell.Value = (object)behavior.EmptyFooterText;
                                 }
                                 else
                                 {
                                     SummaryRowSetting sumRowSetting = behavior.ColumnSettings[summaryCell.Key];
                                     summarySetting = sumRowSetting != null ? (summaryByOrder.SummaryType == SummaryType.Custom ? sumRowSetting.SummarySettings.CustomSummaryByName(summaryByOrder.CustomSummaryName) : sumRowSetting.SummarySettings[summaryByOrder.SummaryType]) : (SummarySetting)null;
                                     string format1 = summarySetting == null ? (sumRowSetting == null ? behavior.FormatString : sumRowSetting.FormatString) : summarySetting.FormatString;
                                     if (summaryByOrder.SummaryType == SummaryType.Custom)
                                         worksheetCell.Value = (object)string.Format(format1, (object)summaryByOrder.CustomSummaryName, summaryByOrder.Value);
                                     else if (summaryByOrder.SummaryType == SummaryType.Custom)
                                     {
                                         worksheetCell.Value = (object)string.Format(format1, (object)summaryByOrder.CustomSummaryName, summaryByOrder.Value);
                                     }
                                     else
                                     {
                                         List<string> list = (List<string>)null;
                                         string str2 = string.Empty;
                                         string str3;
                                         if (grid is ContainerGrid && ((ContainerGrid)grid).HasChildGrids())
                                         {
                                             list = new List<string>();
                                             for (int index3 = firstDataRowIndex; index3 <= index1; ++index3)
                                             {
                                                 if (worksheet.Rows[index3].OutlineLevel == outlineLevel)
                                                     list.Add(worksheet.Rows[index3].Cells[columnIndex].ToString(CellReferenceMode.A1, false, true, true));
                                             }
                                             str3 = string.Join(",", list.ToArray());
                                         }
                                         else
                                             str3 = string.Format("{0}:{1}", (object)worksheet.Rows[firstDataRowIndex].Cells[columnIndex].ToString(CellReferenceMode.A1, false, true, true), (object)worksheet.Rows[index1].Cells[columnIndex].ToString(CellReferenceMode.A1, false, true, true));
                                         int num1 = format1.IndexOf("{1");
                                         string format2;
                                         if (num1 > -1)
                                         {
                                             string str4 = "\"" + format1.Substring(0, num1) + "\" & ";
                                             string str5 = format1.Substring(num1);
                                             int num2 = str5.IndexOf("}");
                                             string str6 = str5.Insert(num2 + 1, " & \"") + "\"";
                                             format2 = "=" + str4 + str6;
                                         }
                                         else
                                             format2 = "=\"" + format1 + "\"";
                                         string format3 = string.Format(format2, (object)"{0}", (object)"{1}({3})").Replace("\"\" &", "").Replace("& \"\"", "");
                                         if (summaryByOrder.SummaryType == SummaryType.Count && format3.Contains("{1"))
                                             format3 = format3.Replace("{1}({3})", "{1}({3}) + {2}({3})");
                                         string[] strArray = this.GetExcelFunctionName(summaryByOrder.SummaryType).Split(new char[1]
                 {
                   '|'
                 }, StringSplitOptions.RemoveEmptyEntries);
                                         string str7 = strArray.Length > 1 ? strArray[1] : "";
                                         string str8 = string.Format(format3, (object)behavior.GetCultureInvariantSummaryString(summaryByOrder.SummaryType, summaryByOrder.CustomSummaryName), (object)strArray[0], (object)str7, (object)str3);
                                         if (list != null && (list.Count > 30 || summaryByOrder.SummaryType == SummaryType.Count))
                                             worksheetCell.Value = (object)behavior.GetSummaryValue((GridField)summaryCell, summaryByOrder, behavior.ColumnSummaries[summaryCell.Key], sumRowSetting, false);
                                         else
                                             worksheetCell.ApplyFormula(str8);
                                     }
                                 }
                                 if (this.EnableStylesExport)
                                 {
                                     string classes = str1;
                                     if (summarySetting != null && !string.IsNullOrEmpty(summarySetting.CssClass))
                                         classes = classes + " " + summarySetting.CssClass;
                                     if (summaryByOrder != null && !string.IsNullOrEmpty(summaryByOrder.CssClass))
                                         classes = classes + " " + summaryByOrder.CssClass;
                                     CssSelector selector1 = new CssSelector();
                                     selector1.AddClasses(string.Format("{0} {1}", (object)gridCssClass, (object)classes));
                                     CssStyle styleObject1 = this._currentStyleSheet.GetStyleObject(selector1);
                                     this.ApplyCellFormatFromStyle(worksheetCell.Worksheet.Workbook, worksheetCell.CellFormat, styleObject1, grid);
                                     CssSelector selector2 = new CssSelector();
                                     selector2.AddClasses(classes);
                                     CssStyle styleObject2 = this._currentStyleSheet.GetStyleObject(selector2);
                                     this.ApplyCellBorderFromStyle(worksheetCell.CellFormat, styleObject2);
                                 }
                                 SummaryCellExportedEventArgs e4 = new SummaryCellExportedEventArgs(summaryCell, worksheet, worksheetCell, rowIndex1, columnIndex, outlineLevel, false, false, true);
                                 e4.Summary = summaryByOrder;
                                 this.OnSummaryCellExported(e4);
                                 ExcelCellExportedEventArgs e5 = new ExcelCellExportedEventArgs(worksheet, worksheetCell, rowIndex1, columnIndex, outlineLevel, false, false, true);
                                 e5.Summary = summaryByOrder;
                                 this.OnCellExported(e5);
                                 ++columnIndex;
                             }
                         }
                     }
                 }
                 ++rowIndex;
                 this.OnRowExported(new ExcelRowExportedEventArgs(worksheet, worksheetRow, rowIndex1, columnOffset, outlineLevel, false, false, true));
             }
         }
     }
 }
예제 #32
0
 /// <summary>
 /// Exports a grid record item to its corresponding worksheet cell.
 /// 
 /// </summary>
 protected virtual void ExportCell(GridRecordItem item, WorksheetRow worksheetRow, int rowIndex, int columnIndex, string gridCssClass, string itemCssClass)
 {
     WorksheetCell worksheetCell = worksheetRow.Cells[columnIndex];
     ExcelCellExportingEventArgs e1 = new ExcelCellExportingEventArgs(worksheetRow.Worksheet, worksheetCell, rowIndex, columnIndex, worksheetRow.OutlineLevel, false, false, false);
     this.OnCellExporting(e1);
     if (e1.Cancel)
         return;
     GridRecordItemExportingEventArgs e2 = new GridRecordItemExportingEventArgs(item, worksheetRow.Worksheet, worksheetCell, rowIndex, columnIndex, worksheetRow.OutlineLevel, false, false, false);
     this.OnGridRecordItemExporting(e2);
     if (e2.Cancel)
         return;
     worksheetCell.Value = !item.HasTemplate ? (!(item.Column is FormattedGridField) || this.DisableCellValueFormatting || string.IsNullOrEmpty(((FormattedGridField)item.Column).DataFormatString) ? item.Value : (object)string.Format(((FormattedGridField)item.Column).DataFormatString, item.Value)) : (object)this.RenderTemplate(item.TemplateContainer);
     if (this.EnableStylesExport)
     {
         if (!string.IsNullOrEmpty(item.CssClass))
             itemCssClass = itemCssClass + " " + item.CssClass;
         if (!string.IsNullOrEmpty(item.Column.CssClass))
             itemCssClass = itemCssClass + " " + item.Column.CssClass;
         CssSelector selector1 = new CssSelector();
         selector1.AddClasses(string.Format("{0} {1}", (object)gridCssClass, (object)itemCssClass));
         CssStyle styleObject1 = this._currentStyleSheet.GetStyleObject(selector1);
         this.ApplyCellFormatFromStyle(worksheetCell.Worksheet.Workbook, worksheetCell.CellFormat, styleObject1, (WebDataGrid)item.Row.ControlMain);
         CssSelector selector2 = new CssSelector();
         selector2.AddClasses(itemCssClass);
         CssStyle styleObject2 = this._currentStyleSheet.GetStyleObject(selector2);
         this.ApplyCellBorderFromStyle(worksheetCell.CellFormat, styleObject2);
     }
     if (worksheetCell.Value != null)
     {
         this.SetColumnWidth(worksheetRow.Worksheet.Columns[columnIndex], worksheetCell);
         if (worksheetCell.Value.ToString().Contains(Environment.NewLine))
             worksheetCell.CellFormat.WrapText = ExcelDefaultableBoolean.True;
     }
     this.OnGridRecordItemExported(new GridRecordItemExportedEventArgs(item, worksheetRow.Worksheet, worksheetCell, rowIndex, columnIndex, worksheetRow.OutlineLevel, false, false, false));
     this.OnCellExported(new ExcelCellExportedEventArgs(worksheetRow.Worksheet, worksheetCell, rowIndex, columnIndex, worksheetRow.OutlineLevel, false, false, false));
 }
예제 #33
0
 /// <summary>
 /// Exports set of grouped rows to the specified worksheet.
 /// 
 /// </summary>
 protected virtual void ExportGroupedRows(GroupedRecordCollection groupedRows, Worksheet worksheet, ref int rowIndex, int columnOffset, bool hasHiddenCols, int outlineLevel, bool hidden)
 {
     ContainerGrid owner = groupedRows.Owner;
     WebHierarchicalDataGrid mainGrid = owner.MainGrid;
     string styleClassString1 = mainGrid.RunBot.StyleBot.GetStyleClassString(0, mainGrid.ControlStyle.CssClass);
     string styleClassString2 = owner.RunBot.StyleBot.GetStyleClassString(5, owner.ItemCssClass);
     string styleClassString3 = owner.RunBot.StyleBot.GetStyleClassString(6, owner.AltItemCssClass);
     string styleClassString4 = mainGrid.RunBot.StyleBot.GetStyleClassString(11, owner.Band != null ? owner.Band.GroupingSettings.GroupedRowCssClassResolved : "");
     int count = groupedRows.Owner.Fields.Count;
     if (hasHiddenCols)
     {
         foreach (ControlDataField controlDataField in (CollectionBase)groupedRows.Owner.Fields)
         {
             if (controlDataField.Hidden || controlDataField.HiddenByParent)
                 --count;
         }
     }
     foreach (GroupedRecord groupedRecord in (CollectionBase)groupedRows)
     {
         WorksheetRow worksheetRow = worksheet.Rows[rowIndex];
         worksheetRow.OutlineLevel = outlineLevel;
         worksheetRow.Hidden = hidden;
         WorksheetMergedCellsRegion mergedCellsRegion = worksheet.MergedCellsRegions.Add(rowIndex, columnOffset, rowIndex, columnOffset + count - 1);
         mergedCellsRegion.Value = (object)groupedRecord.Text;
         if (this.EnableStylesExport)
         {
             CssSelector selector1 = new CssSelector();
             selector1.AddClasses(string.Format("{0} {1}", (object)styleClassString1, (object)styleClassString4));
             CssStyle styleObject1 = this._currentStyleSheet.GetStyleObject(selector1);
             this.ApplyCellFormatFromStyle(worksheet.Workbook, mergedCellsRegion.CellFormat, styleObject1, (WebDataGrid)owner);
             CssSelector selector2 = new CssSelector();
             selector2.AddClasses(styleClassString4);
             CssStyle styleObject2 = this._currentStyleSheet.GetStyleObject(selector2);
             this.ApplyCellBorderFromStyle(mergedCellsRegion.CellFormat, styleObject2);
         }
         ++rowIndex;
         bool hidden1 = hidden || !groupedRecord.Expanded;
         if (groupedRecord.HasChildGroupRows)
         {
             this.ExportGroupedRows(groupedRecord.ChildGroupRows, worksheet, ref rowIndex, columnOffset, hasHiddenCols, outlineLevel + 1, hidden1);
         }
         else
         {
             groupedRecord.Rows.Reset();
             while (groupedRecord.Rows.MoveNext())
             {
                 ContainerGridRecord containerGridRecord = (ContainerGridRecord)groupedRecord.Rows.Current;
                 string itemCssClass = styleClassString2;
                 if (containerGridRecord.Index % 2 == 1)
                     itemCssClass = itemCssClass + " " + styleClassString3;
                 if (!string.IsNullOrEmpty(containerGridRecord.CssClass))
                     itemCssClass = itemCssClass + " " + containerGridRecord.CssClass;
                 this.ExportRow((GridRecord)containerGridRecord, worksheet, ref rowIndex, columnOffset, hasHiddenCols, outlineLevel + 1, hidden1, styleClassString1, itemCssClass);
             }
         }
     }
 }
예제 #34
0
파일: CssParser.cs 프로젝트: carbon/Css
        public CssRule ReadRuleBlock(CssSelector selector)
        {
            var rule = new StyleRule(selector);

            ReadBlock(rule);

            return rule;
        }
		public void ContainsNotPseudoClass_ElementWithNotPseudoClass_ReturnsTrue()
		{
			var selector = new CssSelector("li:not(.ignored)");
			Assert.IsTrue(selector.HasNotPseudoClass);
		}
		public void NotPseudoClassContent_ElementWithPseudoClass_ReturnsNull()
		{
			var selector = new CssSelector("li:first-child");
			Assert.IsNull(selector.NotPseudoClassContent);
		}
		public void NotPseudoClassContent_ElementWithNotPseudoClass_ReturnsContent()
		{
			var selector = new CssSelector("li:not(.ignored)");
			Assert.AreEqual(".ignored", selector.NotPseudoClassContent);
		}
		public void StripNotPseudoClassContent_ElementWithPseudoClass_ReturnsOriginalSelector()
		{
			var expected = "li:first-child";
			var selector = new CssSelector(expected);
			Assert.AreEqual(expected, selector.StripNotPseudoClassContent().ToString());
		}
		public void StripNotPseudoClassContent_ElementWithNotPseudoClass_ReturnsSelectorWithoutNot()
		{
			var selector = new CssSelector("li:not(.ignored)");
			Assert.AreEqual("li", selector.StripNotPseudoClassContent().ToString());
		}
		public void ContainsNotPseudoClass_ElementWithPseudoClass_ReturnsFalse()
		{
			var selector = new CssSelector("li:first-child");
			Assert.IsFalse(selector.HasNotPseudoClass);
		}
예제 #41
0
파일: StyleRule.cs 프로젝트: carbon/Css
 public StyleRule(CssSelector selector)
     : base(RuleType.Style)
 {
     this.selector = selector;
 }
예제 #42
0
        /// <summary>
        /// (BNF) selector: any+;
        /// </summary>
        /// <returns></returns>
        private CssSelector ParseSelector()
        {
            CssSelector selector = new CssSelector();
            char ch;

            while (this.Read(out ch) && (Char.IsWhiteSpace(ch) || ch == ','))
            {
                // skip whitespace, and empty selectors
            }

            // consume property name
            switch (ch)
            {
                case '{':
                {
                    // no more declarations
                    return null;
                }
                //case ':':// pseudoclass
                case ';':
                case '}':
                {
                    throw new SyntaxError("Invalid chars in selector", this.reader.FilePath, this.reader.Line, this.reader.Column);
                }
            }

            int start = this.Position;// start with current char

            while (this.Read(out ch))
            {
                // continue consuming selector
                switch (ch)
                {
                    case ',':
                    case '{':
                    {
                        selector.Value = this.Copy(start);
                        if (ch == '{')
                        {
                            this.PutBack();
                        }
                        return selector;
                    }
                    //case ':':// pseudoclass
                    case ';':
                    case '}':
                    {
                        throw new SyntaxError("Invalid selector", this.reader.FilePath, this.reader.Line, this.reader.Column);
                    }
                }
            }
            throw new UnexpectedEndOfFile("Unclosed ruleset", this.reader.FilePath, this.reader.Line, this.reader.Column);
        }
예제 #43
0
파일: CssWriter.cs 프로젝트: carbon/Css
        public void WriteSelector(CssSelector selector)
        {
            if (selector.Count == 1)
            {
                writer.Write(selector.ToString());
            }
            else
            {
                var i = 0;

                foreach (var s in selector)
                {
                    if (i != 0)
                    {
                        writer.WriteLine(",");
                    }

                    writer.Write(s);

                    i++;
                }
            }
        }
예제 #44
0
 /// <summary>
 /// Exports a grid field caption (header or footer) to the specified worksheet cell.
 /// 
 /// </summary>
 protected virtual void ExportGridFieldCaption(WebDataGrid grid, GridFieldCaption caption, WorksheetRow wsRow, WorksheetCell wsCell, int rowIndex, int columnIndex, string gridCssClass, string captionRowCssClass, bool isHeader, int rowSpan, int colSpan, int colOffset)
 {
     WorksheetMergedCellsRegion mergedCellsRegion = rowSpan > 1 || colSpan > 1 ? wsRow.Worksheet.MergedCellsRegions.Add(rowIndex, columnIndex + colOffset, rowIndex + rowSpan - 1, columnIndex + colOffset + colSpan - 1) : (WorksheetMergedCellsRegion)null;
     ExcelCellExportingEventArgs e1 = new ExcelCellExportingEventArgs(wsRow.Worksheet, wsCell, rowIndex, columnIndex, wsRow.OutlineLevel, isHeader, !isHeader, false);
     this.OnCellExporting(e1);
     if (e1.Cancel)
         return;
     GridFieldCaptionExportingEventArgs e2 = new GridFieldCaptionExportingEventArgs(caption, wsRow.Worksheet, wsCell, rowIndex, columnIndex, wsRow.OutlineLevel, isHeader, !isHeader, false);
     this.OnGridFieldCaptionExporting(e2);
     if (e2.Cancel)
         return;
     if (mergedCellsRegion != null)
         mergedCellsRegion.Value = (object)caption.Text;
     else
         wsCell.Value = (object)caption.Text;
     if (this.EnableStylesExport)
     {
         string styleClassString = grid.RunBot.StyleBot.GetStyleClassString((int)caption.Role, caption.CssClassResolved);
         if (caption.OwnerField is GroupField && caption.Role == WebDataGridRoles.HeaderCaption)
             styleClassString = grid.RunBot.StyleBot.GetStyleClassString(10, styleClassString);
         CssSelector selector1 = new CssSelector();
         selector1.AddClasses(string.Format("{0} {1} {2}", (object)gridCssClass, (object)captionRowCssClass, (object)styleClassString));
         CssStyle styleObject1 = this._currentStyleSheet.GetStyleObject(selector1);
         this.ApplyCellFormatFromStyle(wsCell.Worksheet.Workbook, wsCell.CellFormat, styleObject1, grid);
         if (mergedCellsRegion != null)
             this.ApplyCellFormatFromStyle(mergedCellsRegion.Worksheet.Workbook, mergedCellsRegion.CellFormat, styleObject1, grid);
         CssSelector selector2 = new CssSelector();
         selector2.AddClasses(styleClassString);
         CssStyle styleObject2 = this._currentStyleSheet.GetStyleObject(selector2);
         this.ApplyCellBorderFromStyle(wsCell.CellFormat, styleObject2);
         if (mergedCellsRegion != null)
             this.ApplyCellBorderFromStyle(mergedCellsRegion.CellFormat, styleObject2);
     }
     if (wsCell.Value != null)
     {
         this.SetColumnWidth(wsCell.Worksheet.Columns[wsCell.ColumnIndex], wsCell);
         if (wsCell.Value.ToString().Contains(Environment.NewLine))
             wsCell.CellFormat.WrapText = ExcelDefaultableBoolean.True;
     }
     if (mergedCellsRegion != null && mergedCellsRegion.Value != null && mergedCellsRegion.Value.ToString().Contains(Environment.NewLine))
         mergedCellsRegion.CellFormat.WrapText = ExcelDefaultableBoolean.True;
     this.OnGridFieldCaptionExported(new GridFieldCaptionExportedEventArgs(caption, wsRow.Worksheet, wsCell, rowIndex, columnIndex, wsRow.OutlineLevel, isHeader, !isHeader, false));
     this.OnCellExported(new ExcelCellExportedEventArgs(wsRow.Worksheet, wsCell, rowIndex, columnIndex, wsRow.OutlineLevel, isHeader, !isHeader, false));
 }