コード例 #1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="converter"></param>
        /// <param name="method"></param>
        /// <returns></returns>
        public override ExpressionElement Convert(IExpressionConverter converter, MethodCallExpression method)
        {
            var index = method.SkipMethodChain(0);
            var args = method.Arguments.Skip(index).Select(e => converter.Convert(e)).ToArray();
            var name = string.IsNullOrEmpty(Name) ? method.Method.Name.ToUpper() : Name;

            var hArgs = new HText(args) { Separator = Separator }.ConcatToBack(")");
            return new HText(Line(name, "("), hArgs) { IsFunctional = true };
        }
コード例 #2
0
ファイル: ElementTest.cs プロジェクト: ygrenier/HDocument
        public void TestReplaceAll()
        {
            var n1 = new HText("Content");
            var n2 = new HElement("span", n1);
            var n3 = new HElement("span", "Another content");
            var n4 = new HElement("div", n2, n3);

            var elements = new HElement[] { new HElement("p", "p 1"), null, new HElement("div", "div 2") };

            Assert.Same(elements, elements.ReplaceAll(n3, n2));
            Assert.Equal("<div><p>p 1</p><div>div 2</div><p>p 1</p><div>div 2</div></div>", n4.ToString());

            elements = null;
            Assert.Null(elements.ReplaceAll(n3, n2));
            Assert.Equal("<div><p>p 1</p><div>div 2</div><p>p 1</p><div>div 2</div></div>", n4.ToString());
        }
コード例 #3
0
ファイル: ElementTest.cs プロジェクト: ygrenier/HDocument
        public void TestReplaceWith()
        {
            var n1 = new HText("Content");
            var n2 = new HElement("span", n1);
            var n3 = new HElement("span", "Another content");
            var n4 = new HElement("div", n2, n3);

            Assert.Same(n2, n2.ReplaceWith(new HElement("div", "Div Content"), new HElement("p", "P content")));
            Assert.Equal("<div><div>Div Content</div><p>P content</p><span>Another content</span></div>", n4.ToString());

            Assert.Same(n3, n3.ReplaceWith(null));
            Assert.Equal("<div><div>Div Content</div><p>P content</p></div>", n4.ToString());

            n2 = null;
            Assert.Null(n2.ReplaceWith(new HElement("div", "Div Content"), new HElement("p", "P content")));
            Assert.Equal("<div><div>Div Content</div><p>P content</p></div>", n4.ToString());
        }
コード例 #4
0
        public void TestNextNode()
        {
            HNode n1 = new HText("test 1");

            Assert.Null(n1.NextNode);

            HElement parent = new HElement("parent");

            parent.Add(n1);
            Assert.Null(n1.NextNode);

            HNode n2 = new HText("test 2");

            parent.Add(n2);
            Assert.Same(n2, n1.NextNode);
            Assert.Null(n2.NextNode);
        }
コード例 #5
0
        public void TestPreviousNode()
        {
            HNode n1 = new HText("test 1");

            Assert.Null(n1.PreviousNode);

            HElement parent = new HElement("parent");

            parent.Add(n1);
            Assert.Null(n1.PreviousNode);

            HNode n2 = new HText("test 2");

            parent.Add(n2);
            Assert.Null(n1.PreviousNode);
            Assert.Same(n1, n2.PreviousNode);
        }
コード例 #6
0
        public void TestDocument()
        {
            HObject n = new HText("test");

            Assert.Null(n.Document);

            HObject p = new HElement("parent", n);

            Assert.Null(n.Document);
            Assert.Null(p.Document);

            HDocument doc = new HDocument(p);

            Assert.Same(doc, n.Document);
            Assert.Same(doc, p.Document);
            Assert.Same(doc, doc.Document);
        }
コード例 #7
0
 internal override void Initial(FakeStruct mod)
 {
     TextCom   = Context as HText;
     AutoColor = false;
     unsafe
     {
         var ex = mod.buffer.GetData(((TransfromData *)mod.ip)->ex) as FakeStruct;
         if (ex != null)
         {
             TextInputData *tp = (TextInputData *)ex.ip;
             PointColor     = tp->pointColor;
             SelectionColor = tp->selectColor;
         }
     }
     Text.FullString = TextCom.Text;
     GetPreferredHeight();
 }
コード例 #8
0
        public void TestClone()
        {
            HText txt = new HText("Test");

            HContainer parent = new HElement("test");

            parent.Add(txt);
            Assert.Same(txt, parent.FirstNode);
            Assert.Same(txt, parent.LastNode);

            HContainer otherParent = new HElement("test");

            // Do clone
            otherParent.Add(txt);

            Assert.IsType <HText>(otherParent.FirstNode);
            Assert.NotSame(otherParent.FirstNode, parent.FirstNode);
        }
コード例 #9
0
ファイル: ElementTest.cs プロジェクト: ygrenier/HDocument
        public void TestReplaceWithElements()
        {
            var n1 = new HText("Content");
            var n2 = new HElement("span", n1);
            var n3 = new HElement("span", "Another content");
            var n4 = new HElement("div", n2, n3);

            IEnumerable <HElement> elements = new HElement[] { n2, n3 };

            Assert.Same(elements, elements.ReplaceWith(new HElement("div", "Div Content"), new HElement("p", "P content")));
            Assert.Equal("<div><div>Div Content</div><p>P content</p><div>Div Content</div><p>P content</p></div>", n4.ToString());

            n4.Descendants("div").ReplaceWith(null, null, null);
            Assert.Equal("<div><p>P content</p><p>P content</p></div>", n4.ToString());

            elements = null;
            Assert.Null(elements.ReplaceWith(new HElement("div", "Div Content"), new HElement("p", "P content")));
            Assert.Equal("<div><p>P content</p><p>P content</p></div>", n4.ToString());
        }
コード例 #10
0
        public void TestLastNode()
        {
            HContainer container = new HElement("Test");

            Assert.Null(container.LastNode);

            var node = new HText("Content");

            container.Add(node);
            Assert.Same(node, container.LastNode);

            container.Add(new HText("Other content"));
            Assert.NotSame(node, container.LastNode);

            // If content is an empty string, LastNode returns null
            container = new HElement("Test");
            container.Add("");
            Assert.Null(container.LastNode);
        }
コード例 #11
0
        private HElement GetDebugResponse(SessionData sessionData)
        {
            HMultipleElements ret = new HMultipleElements();

            ret += new HText($"Currently Enqueued tasks: {TaskCount}");
            ret += new HText($"Worker Count: {WorkerCount}");

            if (TaskCount > 0)
            {
                using (_writeLock.LockRead())
                {
                    ret += new HTable((from x in _tasks select new object[] { x.Task.Method?.Name, x.Task.Target?.GetType().Name, x.Parameters.ToSeparatedValueString(), x.State, x.ExceptionThrown?.GetType().Name, x.ReturnedValue?.GetType().Name }).ToList())
                    {
                        TableHeader = new string[] { "Method Name", "Target Type", "Parameters", "State", "Thrown Exception", "Returned Value" }
                    };
                }
            }

            return(ret);
        }
コード例 #12
0
        public override void Initial(FakeStruct mod, UIElement script, UIInitializer initializer)
        {
            base.Initial(mod, script, initializer);
            Label          = Enity.Find("Label") as HText;
            callBack       = Enity.RegEvent <UserEvent>();
            callBack.Click = Show;
            var scroll = Enity.Find("Scroll");

            if (scroll != null)
            {
                scroll.activeSelf = false;
                m_scroll          = scroll.composite as ScrollY;
                if (m_scroll != null)
                {
                    m_scroll.SetItemUpdate <PopItemMod, object>(ItemUpdate);
                    m_scroll.eventCall.LostFocus   = LostFocus;
                    m_scroll.eventCall.DataContext = this;
                }
            }
        }
コード例 #13
0
        public override void Initial(FakeStruct mod, UIElement element, Initializer initializer)
        {
            base.Initial(mod, element, initializer);
            var txt = TextCom = element.GetComponentInChildren <HText>();

            textColor = txt.m_color;
            unsafe
            {
                if (mod != null)
                {
                    var ex = UITransfromLoader.GetEventData(mod);
                    if (ex != null)
                    {
                        TextInputData *tp = (TextInputData *)ex.ip;
                        textColor      = tp->inputColor;
                        m_tipColor     = tp->tipColor;
                        PointColor     = tp->pointColor;
                        SelectionColor = tp->selectColor;
                        CharacterLimit = tp->CharacterLimit;
                        ReadOnly       = tp->ReadyOnly;
                        contentType    = tp->contentType;
                        lineType       = tp->lineType;
                        m_TipString    = mod.buffer.GetData(tp->tipString) as string;
                        m_InputString  = mod.buffer.GetData(tp->inputString) as string;
                    }
                    else
                    {
                        m_InputString = txt.Text;
                    }
                }
                else
                {
                    m_InputString = txt.Text;
                }
            }
            FullString.FullString = m_InputString;
            InputEvent            = txt.RegEvent <InputBoxEvent>();
            InputEvent.Initial(null);
            InputEvent.input = this;
            Caret            = txt.GetComponentInChildren <HImage>();
        }
コード例 #14
0
    static public UIElement AddTreeView(UIElement parent)
    {
        var ss = new HImage();//new GameObject("TreeView");

        ss.name          = "TreeView";
        ss.SizeDelta     = new Vector2(400, 400);
        ss.Mask          = true;
        ss.compositeType = CompositeType.TreeView;
        ss.SetParent(parent);

        var Item = new UIElement();//new GameObject("Item");

        Item.SetParent(ss);
        Item.SizeDelta = new Vector2(200, 40);

        var txt = new HText();//new GameObject("Text");

        txt.SetParent(Item);
        txt.SizeDelta  = new Vector2(200, 40);
        txt.TextAnchor = TextAnchor.MiddleLeft;
        txt.FontSize   = 24;
        return(ss);
    }
コード例 #15
0
ファイル: ElementTest.cs プロジェクト: ygrenier/HDocument
        public void TestReplaceWithElementsByCallback()
        {
            var n1 = new HText("Content");
            var n2 = new HElement("span", n1);
            var n3 = new HElement("span", "Another content");
            var n4 = new HElement("div", n2, n3);

            var elements = new HElement[] { n2, n3 };

            Assert.Same(elements, elements.ReplaceWith((e, i) => {
                return(new HNode[] { new HElement("div", "Div Content " + i.ToString()), new HElement("span", "Span Content " + i.ToString()) });
            }));
            Assert.Equal("<div><div>Div Content 0</div><span>Span Content 0</span><div>Div Content 1</div><span>Span Content 1</span></div>", n4.ToString());

            n4.Descendants("div").ReplaceWith((e, i) => null);
            Assert.Equal("<div><span>Span Content 0</span><span>Span Content 1</span></div>", n4.ToString());

            elements = null;
            Assert.Null(elements.ReplaceWith((e, i) => {
                return(new HNode[] { new HElement("div", "Div Content " + i.ToString()), new HElement("span", "Span Content " + i.ToString()) });
            }));
            Assert.Equal("<div><span>Span Content 0</span><span>Span Content 1</span></div>", n4.ToString());
        }
コード例 #16
0
ファイル: HTextEditor.cs プロジェクト: pkwzsqsdly/HGUI
    public override void OnSceneGUI()
    {
        base.OnSceneGUI();
        HText txt = target as HText;

        if (txt != null)
        {
            bool changed = false;
            if (pos != txt.transform.localPosition)
            {
                changed = true;
            }
            else if (scale != txt.transform.localScale)
            {
                changed = true;
            }
            else if (angle != txt.transform.localEulerAngles)
            {
                changed = true;
            }
            pos   = txt.transform.localPosition;
            scale = txt.transform.localScale;
            angle = txt.transform.localEulerAngles;
            if (changed)
            {
                var can = FindHCanvas(txt.transform);
                if (can != null)
                {
                    can.Refresh();
                }
            }
            if (GUI.changed)
            {
                txt.Text = txt.Text;
            }
        }
    }
コード例 #17
0
        public void TestRemove()
        {
            var node = new HText("node");

            // Create parent
            var elm = new HElement("test", node);

            Assert.Same(node, elm.FirstNode);
            Assert.Same(node, elm.LastNode);
            Assert.Same(elm, node.Parent);
            Assert.Equal(1, elm.Nodes().Count());

            // Remove attribute
            node.Remove();
            Assert.Null(elm.FirstNode);
            Assert.Null(elm.LastNode);
            Assert.Null(node.Parent);
            Assert.Equal(0, elm.Nodes().Count());

            // Fail to remove a detached node
            var ioe = Assert.Throws <InvalidOperationException>(() => node.Remove());

            Assert.Equal("No parent found.", ioe.Message);
        }
コード例 #18
0
 static HText Func(TextPartsBase func, string separator, params TextPartsBase[] args)
 {
     var hArgs = new HText(args) { Separator = separator }.ConcatToBack(")");
     return new HText(Line(func, "("), hArgs) { IsFunctional = true };
 }
コード例 #19
0
ファイル: HElementTest.cs プロジェクト: ygrenier/HDocument
        public void TestRemoveNode()
        {
            HNode node1 = new HText("node 1");
            HNode node2 = new HElement("node2", "value2");
            HNode node3 = new HText("node 3");
            HNode node4 = new HElement("node4", "value4");

            // Create parent
            var elm = new HElement("test", node1, node2, node3, node4);

            Assert.Same(node1, elm.FirstNode);
            Assert.Same(node4, elm.LastNode);

            Assert.Same(elm, node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Same(node2, node1.NextNode);

            Assert.Same(elm, node2.Parent);
            Assert.Same(node1, node2.PreviousNode);
            Assert.Same(node3, node2.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Same(node2, node3.PreviousNode);
            Assert.Same(node4, node3.NextNode);

            Assert.Same(elm, node4.Parent);
            Assert.Same(node3, node4.PreviousNode);
            Assert.Null(node4.NextNode);

            // Remove node2
            node2.Remove();
            Assert.Same(node1, elm.FirstNode);
            Assert.Same(node4, elm.LastNode);

            Assert.Same(elm, node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Same(node3, node1.NextNode);

            Assert.Null(node2.Parent);
            Assert.Null(node2.PreviousNode);
            Assert.Null(node2.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Same(node1, node3.PreviousNode);
            Assert.Same(node4, node3.NextNode);

            Assert.Same(elm, node4.Parent);
            Assert.Same(node3, node4.PreviousNode);
            Assert.Null(node4.NextNode);

            var attrs = elm.Nodes().ToArray();

            Assert.Equal(new HNode[] { node1, node3, node4 }, attrs);

            // Remove node4
            node4.Remove();
            Assert.Same(node1, elm.FirstNode);
            Assert.Same(node3, elm.LastNode);

            Assert.Same(elm, node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Same(node3, node1.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Same(node1, node3.PreviousNode);
            Assert.Null(node3.NextNode);

            Assert.Null(node4.Parent);
            Assert.Null(node4.PreviousNode);
            Assert.Null(node4.NextNode);

            attrs = elm.Nodes().ToArray();
            Assert.Equal(new HNode[] { node1, node3 }, attrs);

            // Remove node1
            node1.Remove();
            Assert.Same(node3, elm.FirstNode);
            Assert.Same(node3, elm.LastNode);

            Assert.Null(node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Null(node1.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Null(node3.PreviousNode);
            Assert.Null(node3.NextNode);

            attrs = elm.Nodes().ToArray();
            Assert.Equal(new HNode[] { node3 }, attrs);

            // Remove node3
            node3.Remove();
            Assert.Null(elm.FirstNode);
            Assert.Null(elm.LastNode);

            Assert.Null(node3.Parent);
            Assert.Null(node3.PreviousNode);
            Assert.Null(node3.NextNode);

            attrs = elm.Nodes().ToArray();
            Assert.Equal(new HNode[] { }, attrs);

            // Fail to remove a detached attribute
            var ioe = Assert.Throws <InvalidOperationException>(() => node1.Remove());

            Assert.Equal("No parent found.", ioe.Message);
        }
コード例 #20
0
    static public UIElement AddDate(UIElement parent)
    {
        var date = new UIElement();//new GameObject("Date");

        date.SizeDelta     = new Vector2(400, 200);
        date.eventType     = HEventType.UserEvent;
        date.compositeType = CompositeType.UIDate;
        date.SetParent(parent);

        var label = new HText();//new GameObject("YearLabel", typeof(HText));

        label.name = "YearLabel";
        //var ht = label.GetComponent<HText>();
        label.SizeDelta  = new Vector2(80, 40);
        label.FontSize   = 24;
        label.TextAnchor = TextAnchor.MiddleCenter;
        label.Text       = "Year";
        label.SetParent(date);
        label.localPosition = new Vector3(-80, 0, 0);

        label            = new HText();//new GameObject("MonthLabel", typeof(HText));
        label.name       = "MonthLabel";
        label.SizeDelta  = new Vector2(80, 40);
        label.FontSize   = 24;
        label.TextAnchor = TextAnchor.MiddleCenter;
        label.Text       = "Month";
        label.SetParent(date);
        label.localPosition = new Vector3(40, 0, 0);

        label            = new HText();//new GameObject("DayLabel", typeof(HText));
        label.name       = "DayLabel";
        label.SizeDelta  = new Vector2(80, 40);
        label.FontSize   = 24;
        label.TextAnchor = TextAnchor.MiddleCenter;
        label.Text       = "Year";
        label.SetParent(date);
        label.localPosition = new Vector3(160, 0, 0);

        var now  = DateTime.Now;
        var Year = new UIElement(); //new GameObject("Year", typeof(UIElement));

        Year.name          = "Year";
        Year.SizeDelta     = new Vector2(80, 400);
        Year.eventType     = HEventType.UserEvent;
        Year.compositeType = CompositeType.ScrollY;
        Year.SetParent(date);
        Year.localPosition = new Vector3(-147, 0, 0);

        var Item = new HText();//new GameObject("Item");

        Item.name = "Item";
        Item.SetParent(Year);
        Item.SizeDelta  = new Vector2(60, 40);
        Item.TextAnchor = TextAnchor.MiddleCenter;
        Item.Text       = now.Year.ToString();
        Item.FontSize   = 24;

        var Month = new UIElement();//new GameObject("Month",typeof(UIElement));

        Month.name          = "Month";
        Month.SizeDelta     = new Vector2(80, 400);
        Month.eventType     = HEventType.UserEvent;
        Month.compositeType = CompositeType.ScrollY;
        Month.SetParent(date);
        Month.localPosition = new Vector3(-22, 0, 0);
        Month.localScale    = Vector3.one;
        Month.localRotation = Quaternion.identity;

        Item      = new HText();//new GameObject("Item");
        Item.name = "Item";
        Item.SetParent(Month);
        Item.SizeDelta  = new Vector2(60, 40);
        Item.TextAnchor = TextAnchor.MiddleCenter;
        Item.Text       = now.Month.ToString();
        Item.FontSize   = 24;

        var Day = new UIElement();//new GameObject("Day", typeof(UIElement));

        Day.name          = "Day";
        Day.SizeDelta     = new Vector2(80, 400);
        Day.eventType     = HEventType.UserEvent;
        Day.compositeType = CompositeType.ScrollY;
        Day.SetParent(date);
        Day.localPosition = new Vector3(107, 0, 0);

        Item      = new HText();//new GameObject("Item");
        Item.name = "Item";
        Item.SetParent(Day);
        Item.SizeDelta  = new Vector2(60, 40);
        Item.TextAnchor = TextAnchor.MiddleCenter;
        Item.Text       = now.Day.ToString();
        Item.FontSize   = 24;
        return(date);
    }
コード例 #21
0
        public void TestRemoveNodes()
        {
            HNode node1 = new HText("node 1");
            HNode node2 = new HElement("node2", "value2");
            HNode node3 = new HText("node 3");
            HNode node4 = new HElement("node4", "value4");

            // Create parent
            var elm = new HElement("test", node1, node2, node3, node4);

            Assert.Same(node1, elm.FirstNode);
            Assert.Same(node4, elm.LastNode);

            Assert.Same(elm, node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Same(node2, node1.NextNode);

            Assert.Same(elm, node2.Parent);
            Assert.Same(node1, node2.PreviousNode);
            Assert.Same(node3, node2.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Same(node2, node3.PreviousNode);
            Assert.Same(node4, node3.NextNode);

            Assert.Same(elm, node4.Parent);
            Assert.Same(node3, node4.PreviousNode);
            Assert.Null(node4.NextNode);

            // Remove all nodes
            elm.RemoveNodes();

            Assert.Null(elm.FirstNode);
            Assert.Null(elm.LastNode);

            Assert.Null(node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Null(node1.NextNode);

            Assert.Null(node2.Parent);
            Assert.Null(node2.PreviousNode);
            Assert.Null(node2.NextNode);

            Assert.Null(node3.Parent);
            Assert.Null(node3.PreviousNode);
            Assert.Null(node3.NextNode);

            Assert.Null(node4.Parent);
            Assert.Null(node4.PreviousNode);
            Assert.Null(node4.NextNode);

            Assert.Equal(0, elm.Nodes().Count());

            // Create new element with string content
            elm = new HElement("test", "content");
            elm.RemoveNodes();
            Assert.Null(elm.FirstNode);
            Assert.Null(elm.LastNode);
            Assert.Equal(0, elm.Nodes().Count());

            // Check no exception
            elm.RemoveNodes();
            Assert.Equal(0, elm.Nodes().Count());
        }
コード例 #22
0
        public void TestDescendants()
        {
            var t1 = new HText("text 1");

            var doc = new HDocument(
                new HElement(
                    "html",
                    new HElement(
                        "body",
                        new HElement(
                            "div",
                            new HAttribute("id", "div1"),
                            new HElement(
                                "p",
                                new HAttribute("id", "p1"),
                                new HElement(
                                    "div",
                                    new HAttribute("id", "div3"),
                                    new HElement(
                                        "p",
                                        new HAttribute("id", "p2"),
                                        new HText("text 1"),
                                        new HText("text 2")
                                        )
                                    )
                                )
                            ),
                        new HElement(
                            "div",
                            new HAttribute("id", "div2"),
                            new HElement(
                                "p",
                                new HText("text 3")
                                )
                            )
                        )
                    )
                );

            // Get all document elements
            Assert.Equal(new String[] {
                "<html>", "<body>", "<div@div1>", "<p@p1>", "<div@div3>", "<p@p2>", "<div@div2>", "<p>"
            }, doc.Descendants().Select(n => {
                var attr = n.Attribute("id");
                if (attr != null)
                {
                    return(String.Format("<{0}@{1}>", ((HElement)n).Name, attr.Value));
                }
                else
                {
                    return(String.Format("<{0}>", ((HElement)n).Name));
                }
            }).ToArray());

            // Get document div
            Assert.Equal(new String[] {
                "<div@div1>", "<div@div3>", "<div@div2>"
            }, doc.Descendants("Div").Select(n => {
                var attr = n.Attribute("id");
                if (attr != null)
                {
                    return(String.Format("<{0}@{1}>", ((HElement)n).Name, attr.Value));
                }
                else
                {
                    return(String.Format("<{0}>", ((HElement)n).Name));
                }
            }).ToArray());
        }
コード例 #23
0
        private HElement GetDebugResponse(SessionData sessionData)
        {
            HMultipleElements ret = new HMultipleElements();

            ret += new HText($"Current Response Count: {StringResponses.Count} ({CurrentStringResponseCacheSize * sizeof(char)} bytes).");

            if (MaximumStringResponseCacheSize > 0)
            {
                ret += new HText($"Cache Fillrate: {CurrentStringResponseCacheSize} / {MaximumStringResponseCacheSize} = {((CurrentStringResponseCacheSize / MaximumStringResponseCacheSize) * 100f):0.000}%.");

                string request;

                using (StringResponseLock.LockRead())
                {
                    if (sessionData.HttpHeadVariables.TryGetValue("key", out request))
                    {
                        ret += new HButton("Back to all entries", "?all=true");

                        ResponseCacheEntry <string> response;

                        if (StringResponses.TryGetValue(request, out response))
                        {
                            ret += new HHeadline($"Entry '{request}'", 2);
                            ret += new HText("Requested Times: " + response.Count);
                            ret += new HText("Response Length: " + response.Response.Length);
                            ret += new HText("Last Requested: " + response.LastRequestedDateTime);
                            ret += new HText("Last Updated Times: " + response.LastUpdatedDateTime);
                            ret += new HText("Lifetime: " + response.RefreshTime);

                            ret += new HLine();
                            ret += new HText("Contents:");

                            ret += new HText(response.Response)
                            {
                                Class = "code"
                            };
                        }
                        else
                        {
                            ret += new HText($"The requested entry '{request}' could not be found.")
                            {
                                Class = "error"
                            };
                        }
                    }
                    else if (sessionData.HttpHeadVariables.ContainsKey("all"))
                    {
                        ret += new HTable((from e in StringResponses
                                           select new object[] { e.Key, e.Value.Count, e.Value.Response.Length, e.Value.LastRequestedDateTime, e.Value.LastUpdatedDateTime, e.Value.RefreshTime, new HLink("Show Contents", "?key=" + e.Key.EncodeUrl()) }
                                           ).OrderByDescending(e => (int)(ulong)e[1] * (int)e[2]))
                        {
                            TableHeader = new string[] { "Key", "Request Count", "Response Length", "Last Request Time", "Last Updated Time", "Lifetime", "Contents" }
                        };
                    }
                    else
                    {
                        ret += new HButton("Show all entries (might take a long time to load)", HButton.EButtonType.button, "?all=true");
                    }
                }
            }

            return(ret);
        }
コード例 #24
0
 /// <summary>
 /// 初始化
 /// </summary>
 /// <param name="mod">数据缓存</param>
 internal override void Initial(FakeStruct mod)
 {
     AutoColor = false;
     text      = Context as HText;
 }
コード例 #25
0
        private IEnumerable <HElement> GetElements(SessionData sessionData)
        {
            if (!sessionData.KnownUser || !sessionData.HttpHeadVariables.ContainsKey("id"))
            {
                yield return(new HScript(ScriptCollection.GetPageReferalToX, "/"));

                yield break;
            }

            User    user    = sessionData.GetUserVariable <User>(nameof(User));
            Project project = Project.Projects[sessionData.HttpHeadVariables["id"]];

            if (project == null || !project.IsAccessible(user))
            {
                yield return(new HString("Invalid Project ID"));

                yield return(new HButton("Back", "/"));

                yield break;
            }

            if (user.IsAdmin)
            {
                yield return(new HButton("Update Tasks",
                                         InstantPageResponse.AddOneTimeRedirectWithCode(nameof(ViewProject) + "?id=" + sessionData.HttpHeadVariables["id"], true, sessData => new Thread(() =>
                {
                    try
                    {
                        Project.Projects[sessionData.HttpHeadVariables["id"]].UpdateRepository();
                        Project.Projects[sessionData.HttpHeadVariables["id"]].UpdateTasks();
                    }
                    catch (Exception e)
                    {
                        Logger.LogError(e.Message);
                    }
                }).Start())));
            }

            yield return(new HButton("Back", "/"));

            foreach (var l in project.Tasks)
            {
                if (l.TaskState == ETaskState.Closed || l.TaskState == ETaskState.Resolved || l.TaskState == ETaskState.Dummy)
                {
                    continue;
                }

                string hash = Hash.GetComplexHash();

                switch (l.TaskState)
                {
                case ETaskState.MaybeResolved:
                {
                    HMultipleElements start = new HMultipleElements(new HText("Resolved?")
                        {
                            Class = "mayberesolved"
                        });

                    if (l.AssignedTo != null && l.AssignedTo == user.UserName)
                    {
                        start += new HText("This task is assigned to you!")
                        {
                            Class = "assigned"
                        }
                    }
                    ;

                    yield return(new HContainer()
                        {
                            Elements =
                            {
                                start,
                                new HText(l.Text),
                                new HText(l.Region)
                                {
                                    Class = "region"
                                },
                                new HText(l.File + " Line: " + l.Line)
                                {
                                    Class = "file"
                                },
                                new HText(l.Version)
                                {
                                    Class = "version"
                                },
                                new JSButton("Show Context")
                                {
                                    ID = hash + "button",
                                    DescriptionTags = $"onclick=\"document.getElementById(document.getElementById('{hash}').id).style.display =         'block';document.getElementById(document.getElementById('{hash}button').id).style.display = 'none';\"",
                                    Class = "showcontext"
                                },
                                new HPlainText($"<p id='{hash}' class='source'>{project.GetLines(l.File, l.Line)}</p>")
                            },
                            Class = "task"
                        });

                    break;
                }

                default:
                    yield return(new HContainer()
                    {
                        Elements =
                        {
                            new HText(l.Text),
                            new HText(l.Region)
                            {
                                Class = "region"
                            },
                            new HText(l.File + " Line: " + l.Line)
                            {
                                Class = "file"
                            },
                            new HText(l.Version)
                            {
                                Class = "version"
                            },
                            new JSButton("Show Context")
                            {
                                ID = hash + "button",
                                DescriptionTags = $"onclick=\"document.getElementById(document.getElementById('{hash}').id).style.display =       'block';document.getElementById(document.getElementById('{hash}button').id).style.display = 'none';\"",
                                Class = "showcontext"
                            },
                            new HPlainText($"<p id='{hash}' class='source'>{project.GetLines(l.File, l.Line)}</p>")
                        },
                        Class = "task"
                    });

                    break;
                }
            }
        }