protected void Run(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (!args.IsPostBack) { SheerResponse.Input("Name: ", "New Prefab", "New Prefab"); args.WaitForPostBack(); } else if (args.HasResult) { var name = args.Result; var pageId = args.Parameters["id"]; var uniqueId = args.Parameters["referenceId"]; var renderingId = args.Parameters["renderingId"]; var db = Client.ContentDatabase; LayoutDefinition layoutDefinition = GetCurrentLayoutDefinition(); var deviceId = WebEditUtil.GetClientDeviceId(); if (layoutDefinition == null || ID.IsNullOrEmpty(deviceId)) { SheerResponse.Alert("Action failed. Unable to find presentation details."); return; } var deviceRenderings = layoutDefinition?.GetDevice(deviceId.ToString()); if (deviceRenderings?.Renderings == null) { SheerResponse.Alert("Action failed. Unable to find current device."); return; } var index = GetIndex(deviceRenderings, uniqueId); if (index == -1) { SheerResponse.Alert("Action failed. Unable to find selected rendering"); return; } var item = UIUtil.GetItemFromQueryString(db); // Create prefab var prefab = _prefabService.CreatePrefab(name, deviceRenderings, index, item); SheerResponse.Alert("Prefab Created"); if (Config.Sxa.IsEnabled) // reload so toolbox shows new prefab { SheerResponse.Eval("window.parent.location.reload();"); } // TODO: Go Edit Prefab? return; } }
private Item GetDatasourceItem(string referenceId, Item item) { Assert.ArgumentNotNull(referenceId, "referenceId"); Assert.ArgumentNotNull(item, "item"); string str2 = WebEditUtil.ConvertJSONLayoutToXML(WebUtil.GetFormValue("scLayout")); Assert.IsNotNull(str2, "xmlLayout"); LayoutDefinition definition = LayoutDefinition.Parse(str2); ID clientDeviceId = WebEditUtil.GetClientDeviceId(); Assert.IsNotNull(clientDeviceId, "deviceId"); RenderingDefinition renderingByUniqueId = definition.GetDevice(clientDeviceId.ToString()).GetRenderingByUniqueId(referenceId); Assert.IsNotNull(renderingByUniqueId, "rendering"); RenderingReference reference = new RenderingReference(renderingByUniqueId, item.Language, item.Database); if (!string.IsNullOrEmpty(reference.Settings.DataSource)) { return(item.Database.GetItem(reference.Settings.DataSource)); } return(null); }