London Dev Meetup Rescheduled! Due to unavoidable reasons, the event has been moved to 21st May. Speakers remain the same—any changes will be communicated. Seats are limited—register here to secure your spot!

How to get a Page widget from itemcollectioneditor.js

Vote:
 

I am back to square one - I've managed to create a new tinymce button that adds a link to an anchor on a page.

Now, I have a new challange - I have to do the same for the linkitemcollection.

I have managed to render the dropdown in a link item using:

[EditorDescriptorRegistration(TargetType = typeof(LinkItemCollection), UIHint = SiteUiHints.ExtendedLinkCollection)]
    public class ExtendedLinkCollectionEditorDescriptor : ItemCollectionEditorDescriptor
    {
        public ExtendedLinkCollectionEditorDescriptor(
            IEnumerable<IContentRepositoryDescriptor> contentRepositoryDescriptors)
        {
            AllowedTypesFormatSuffix = "link"; 
            AllowedTypes = (from d in contentRepositoryDescriptors
                            where d.LinkableTypes != null && d.LinkableTypes.Any() 
                            select d).SelectMany(d => d.LinkableTypes).Distinct().ToArray();
        }
        public override void ModifyMetadata(ExtendedMetadata metadata, IEnumerable<Attribute> attributes)
        {
            ClientEditingClass = "myproject/editors/ExtendedItemCollectionEditor";

            base.ModifyMetadata(metadata, attributes);
            var anonymousType = new
            {
                ItemModelType = "epi-cms/contentediting/viewmodel/LinkItemModel", 
                CustomTypeIdentifier = typeof(LinkItem).FullName.ToLower()
            }; 
            
            var value = new
            {
                DialogContentParams = new
                {
                    ModelType = typeof(ExtendedEPiLinkModel).FullName.ToLower()
                }
            };

            metadata.OverlayConfiguration["modelParams"] = anonymousType;
            metadata.EditorConfiguration["itemModelType"] = anonymousType.ItemModelType;
            metadata.EditorConfiguration["customTypeIdentifier"] = anonymousType.CustomTypeIdentifier; 
            metadata.EditorConfiguration["commandOptions"] = value;
        }

I "just" need to get hold of the Page widget, so that I can connect on its onChange event. The rest I can easily reuse. Can I do that from ExtendedItemCollectionEditor (at the moment, a copy paste of ItemCollectionEditor)?

Every help appreciated.

#86086
May 13, 2014 17:21
Vote:
 

Hi!

My guess is to implement your own factory method to append the data there

  public class LinkItemSelectionFactory : ISelectionFactory

        {

            public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)

            {

                //add the onchange event to the items here

                }

                return list;

            }

        }

and then in your Custom EditorDescription add

SelectionFactoryType = typeof(LinkItemSelectionFactory);

This stuff is very trial and error, best bet is to set an breakpoint and see what you got to deal with inside the factory.

/Daniel

#86382
May 20, 2014 15:57
Vote:
 

Hi, Daniel, thx for your answer, however, this is not what I need, since it statically filles out the dropdown. I need to re-populate my dropdown when Page is selected. So, I need to change dojo code to hook to the page input widget onChanged event.

#86428
May 21, 2014 12:40
Vote:
 

After some time, I've realized I needed to take a different approach. If anyone else is wondering, I've written a blog post about it here.

#86748
May 29, 2014 14:35
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.