예제 #1
0
        public override void Render(TextWriter writer)
        {
            if (state == ControlPanelState.DragDrop)
            {
                if (ZoneName.IndexOfAny(new[] { '.', ',', ' ', '\'', '"', '\t', '\r', '\n' }) >= 0)
                {
                    throw new N2Exception("Zone '" + ZoneName + "' contains illegal characters.");
                }

                writer.Write("<div class='" + ZoneName + " dropZone'");
                writer.WriteAttribute(PartUtilities.PathAttribute, CurrentItem.Path)
                .WriteAttribute(PartUtilities.ZoneAttribute, ZoneName)
                .WriteAttribute(PartUtilities.AllowedAttribute, PartUtilities.GetAllowedNames(ZoneName, PartsAdapter.GetAllowedDefinitions(CurrentItem, ZoneName, Html.ViewContext.HttpContext.User)))
                .WriteAttribute("title", ZoneTitle ?? DroppableZone.GetToolTip(Html.ResolveService <IDefinitionManager>().GetDefinition(CurrentItem), ZoneName))
                .Write(">");

                RenderPreview(writer);

                writer.Write("</div>");
            }
            else if (state == ControlPanelState.Previewing)
            {
                RenderPreview(writer);
            }
            else
            {
                base.Render(writer);
            }
        }
예제 #2
0
        public override void Render(TextWriter writer)
        {
            if (writer == null)
            {
                throw new NullReferenceException("writer cannot be null");
            }

            if (state.IsFlagSet(ControlPanelState.DragDrop))
            {
                if (String.IsNullOrWhiteSpace(ZoneName))
                {
                    throw new N2Exception("Zone name cannot be null, empty, or consist only of whitespace.");
                }
                if (ZoneName.IndexOfAny(new[] { '.', ',', ' ', '\'', '"', '\t', '\r', '\n' }) >= 0)
                {
                    throw new N2Exception("Zone '" + ZoneName + "' contains illegal characters.");
                }
                if (CurrentItem == null)
                {
                    throw new N2Exception("CurrentItem cannot be null");
                }
                var dm = Html.ResolveService <IDefinitionManager>();
                if (dm == null)
                {
                    throw new N2Exception("Failed to resolve the definition manager.");
                }



                writer.Write("<div class=\"" + ZoneName + " dropZone\"");
                if (CurrentItem.ID != 0 && !CurrentItem.VersionOf.HasValue)
                {
                    writer.WriteAttribute("data-id", CurrentItem.ID.ToString());
                    writer.WriteAttribute(PartUtilities.PathAttribute, CurrentItem.Path);
                }
                else
                {
                    writer.WriteAttribute(PartUtilities.PathAttribute, (Find.ClosestPage(CurrentItem) ?? CurrentItem).Path);
                    writer.WriteAttribute("data-versionKey", CurrentItem.GetVersionKey());
                    writer.WriteAttribute("data-versionIndex", CurrentItem.VersionIndex.ToString());
                }
                writer.WriteAttribute(PartUtilities.ZoneAttribute, ZoneName)
                .WriteAttribute(PartUtilities.AllowedAttribute, PartUtilities.GetAllowedNames(ZoneName, PartsAdapter.GetAllowedDefinitions(CurrentItem, ZoneName, Html.ViewContext.HttpContext.User)))
                .WriteAttribute("title", ZoneTitle ?? DroppableZone.GetToolTip(dm.GetDefinition(CurrentItem), ZoneName));
                writer.Write(">");

                RenderPreview(writer);

                writer.Write("</div>");
            }
            else if (state.IsFlagSet(ControlPanelState.Previewing))
            {
                RenderPreview(writer);
            }
            else
            {
                base.Render(writer);
            }
        }
예제 #3
0
        public override void Render(ContentRenderingContext context, System.IO.TextWriter writer)
        {
            var  item = (TargetContainer)context.Content;
            var  isMatchedByTarget = engine.RequestContext.HttpContext.GetTargetingContext(engine).TargetedBy.Any(d => d.Name == item.Targets);
            bool isOrganizing      = engine.RequestContext.HttpContext.Request["edit"] == "drag";

            if (!isMatchedByTarget)
            {
                if (!isOrganizing || !engine.SecurityManager.IsEditor(engine.RequestContext.HttpContext.User))
                {
                    return;
                }
            }

            if (context.Container != null)
            {
                var zone = new DroppableZone {
                    CurrentItem = context.Content, ZoneName = "Content"
                };
                if (isOrganizing)
                {
                    var containingDiv = new HtmlGenericControl("div");
                    containingDiv.Attributes["class"] = "target-container";
                    context.Container.Controls.Add(containingDiv);

                    var detectorDescription = GetDetector(item).Description;
                    var nameSpan            = new HtmlGenericControl("span");
                    nameSpan.InnerHtml           = "<b class='" + detectorDescription.IconClass + "'></b> " + detectorDescription.Title;
                    nameSpan.Attributes["class"] = "target-name";
                    containingDiv.Controls.Add(nameSpan);

                    containingDiv.Controls.Add(zone);
                }
                else
                {
                    context.Container.Controls.Add(zone);
                }
            }
            else if (context.Html != null)
            {
                if (isOrganizing)
                {
                    var detectorDescription = GetDetector(item).Description;
                    writer.Write("<div class='target-container'><span class='target-name'><b class='" + detectorDescription.IconClass + "'></b> " + detectorDescription.Title + "</span>");
                }
                var zone = context.Html.DroppableZone(context.Content, "Content");
                zone.Render(writer);
                if (isOrganizing)
                {
                    writer.Write("</div>");
                }
            }
            else
            {
                logger.WarnFormat("Unable to render part {0}", context.Content);
            }
        }
예제 #4
0
 void OnEndDrag(PointerEventData eventData)
 {
     if (lastDraggableZone == null)
     {
         return;
     }
     if (onDropInZoneEvent != null)
     {
         onDropInZoneEvent.Invoke(lastDraggableZone.gameObject, eventData);
     }
     lastDraggableZone = null;
 }
        public void CanRenderItem_InDroppableZone_WhenDragDrop()
        {
            Zone z = new DroppableZone().AddedToFakePage(HttpContext.Current);

            z.CurrentItem = page;
            z.ZoneName    = "TheZone";

            z.EnsureChildControls();

            string html = z.RenderToString();

            Assert.That(html, Is.EqualTo("[data]"));
        }
예제 #6
0
    void OnDrag(PointerEventData eventData)
    {
        var position = eventData.position;

        if (canvas.renderMode == RenderMode.ScreenSpaceCamera ||
            canvas.renderMode == RenderMode.WorldSpace)
        {
            position = canvas.worldCamera.ScreenToWorldPoint(position);
        }
        // interactable cases
        var interactableZones = FindObjectsOfType <InteractableZone>();

        if (interactableZones.Length == 0)
        {
            return;
        }
        foreach (var interactableZone in interactableZones)
        {
            var rectInteractableZone = interactableZone.GetComponent <RectTransform>();
            if (rectInteractableZone.IsNull())
            {
                continue;
            }
            if (RectTransformUtility.RectangleContainsScreenPoint(rectInteractableZone, position))
            {
                var droppableZones = rectInteractableZone.GetComponentsInChildren <DroppableZone>(true);
                if (droppableZones.Length == 0)
                {
                    continue;
                }
                lastDraggableZone = droppableZones[0];
                foreach (var zone in droppableZones)
                {
                    var rectZone = zone.GetComponent <RectTransform>();
                    if (RectTransformUtility.RectangleContainsScreenPoint(rectZone, position))
                    {
                        lastDraggableZone = zone;
                        if (onDragInZoneEvent != null)
                        {
                            onDragInZoneEvent.Invoke(zone.gameObject, eventData);
                        }
                    }
                    rectZone = null;
                }
                droppableZones = null;
            }
            rectInteractableZone = null;
        }
    }
        public void CanRenderItem_InDroppableZone_WhenDragDrop()
        {
            N2.Context.Current.Definitions.GetDefinitions();

            Zone z = new DroppableZone().AddedToFakePage(HttpContext.Current, page);

            z.CurrentItem = page;
            z.ZoneName    = ZoneName;

            z.EnsureChildControls();

            string    html            = z.RenderToString();
            XDocument document        = XDocument.Parse(html);
            var       dropPointValues = document.Descendants("div")
                                        .Where(div => div.Attribute("class").ToString().Contains("zoneItem"))
                                        .Select(div => div.Value);

            Assert.That(dropPointValues.Count(), Is.EqualTo(1), "Expected one zone item node to be present.");
            Assert.That(dropPointValues.Single().Contains("[data]"));
        }