Ejemplo n.º 1
0
        /// <summary>
        /// Static factory method to return a named shortcode instance from a shortcode provider.
        /// </summary>
        /// <typeparam name="TElement"></typeparam>
        /// <param name="provider"></param>
        /// <param name="tagName"></param>
        /// <returns></returns>
        private static TElement GetLavaShortcodeInstanceFromProvider <TElement>(ILavaShortcodeProvider provider, string tagName, ILavaEngine engine)
            where TElement : class, IRockLavaElement
        {
            var instance = provider.GetShortcodeInstance(tagName, engine) as TElement;

            if (instance == null)
            {
                throw new Exception($"Shortcode provider could not provide a valid instance for \"{tagName}\" .");
            }

            return(instance);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Register a shortcode that is defined and implemented by a provider component.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="shortcodeFactoryMethod"></param>
        public void RegisterShortcode(string name, ILavaShortcodeProvider provider)
        {
            // Get a decorated name for the shortcode that will not collide with a regular tag name.
            var registrationKey = LavaUtilityHelper.GetLiquidElementNameFromShortcodeName(name);

            var info = provider.GetShortcodeDefinition(name);

            if (info == null)
            {
                throw new Exception($"Shortcode provider could not provide a valid instance for \"{name}\" .");
            }

            if (info.ElementType == LavaShortcodeTypeSpecifier.Inline)
            {
                RegisterTag(registrationKey, (tagName) => { return(GetLavaShortcodeInstanceFromProvider <ILavaTag>(provider, tagName, this)); });
            }
            else
            {
                RegisterBlock(registrationKey, (blockName) => { return(GetLavaShortcodeInstanceFromProvider <ILavaBlock>(provider, blockName, this)); });
            }
        }