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); } }
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); } }
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); } }
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]")); }
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]")); }