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;
            }
        }
        protected void PrefabCreate(ClientPipelineArgs args)
        {
            Assert.ArgumentNotNull(args, "args");
            int selectedIndex = this.SelectedIndex;

            if (selectedIndex < 0)
            {
                return;
            }
            LayoutDefinition layoutDefinition = GetLayoutDefinition_exposed();
            var deviceRenderings = layoutDefinition.GetDevice(this.DeviceID);

            if (deviceRenderings?.Renderings == null)
            {
                return;
            }
            if (selectedIndex < 0 || selectedIndex >= deviceRenderings.Renderings.Count)
            {
                return;
            }

            if (!args.IsPostBack)
            {
                SheerResponse.Input("Name: ", "New Prefab", "New Prefab");
                args.WaitForPostBack();
            }
            else if (args.HasResult)
            {
                var name = args.Result;

                var item = UIUtil.GetItemFromQueryString(Client.ContentDatabase);

                // manipulate layoutDefinition via device reference
                var prefab = _prefabService.CreatePrefab(name, deviceRenderings, this.SelectedIndex, item);

                SheerResponse.Alert("Prefab Created");

                // TODO: Go Edit Prefab?
                return;
            }
        }