private static NavigationConfig LoadConfig(Component component)
        {
            NavigationConfig res = new NavigationConfig {
                NavType = NavigationType.Simple
            };

            if (component.Metadata != null)
            {
                ItemFields meta = new ItemFields(component.Metadata, component.MetadataSchema);
                Keyword    type = meta.GetKeywordValue("navigationType");
                switch (type.Key.ToLower())
                {
                case "localizable":
                    res.NavType = NavigationType.Localizable;
                    break;
                }
                string navTextFields = meta.GetSingleFieldValue("navigationTextFieldPaths");
                if (!String.IsNullOrEmpty(navTextFields))
                {
                    res.NavTextFieldPaths = navTextFields.Split(',').Select(s => s.Trim()).ToList();
                }
                res.ExternalUrlTemplate = meta.GetSingleFieldValue("externalLinkTemplate");
            }
            return(res);
        }
        private static NavigationConfig GetNavigationConfiguration(Component navConfigComponent)
        {
            NavigationConfig result = new NavigationConfig {
                NavType = NavigationType.Simple
            };

            if (navConfigComponent.Metadata == null)
            {
                return(result);
            }

            ItemFields navConfigComponentMetadataFields = new ItemFields(navConfigComponent.Metadata, navConfigComponent.MetadataSchema);
            Keyword    type = navConfigComponentMetadataFields.GetKeywordValue("navigationType");

            switch (type.Key.ToLower())
            {
            case "localizable":
                result.NavType = NavigationType.Localizable;
                break;
            }
            string navTextFields = navConfigComponentMetadataFields.GetSingleFieldValue("navigationTextFieldPaths");

            if (!string.IsNullOrEmpty(navTextFields))
            {
                result.NavTextFieldPaths = navTextFields.Split(',').Select(s => s.Trim()).ToList();
            }
            result.ExternalUrlTemplate = navConfigComponentMetadataFields.GetSingleFieldValue("externalLinkTemplate");
            return(result);
        }
예제 #3
0
        private void ExtractDataAttributes(ItemFields fields, StringBuilder dataAttributesBuilder)
        {
            if (fields == null)
            {
                return;
            }

            foreach (string fieldname in _dataFieldNames.Where(fn => fields.Contains(fn)))
            {
                string dataAttribute = string.Format(" data-{0}=\"{1}\"", fieldname, System.Net.WebUtility.HtmlEncode(fields.GetSingleFieldValue(fieldname)));
                dataAttributesBuilder.Append(dataAttribute);
            }

            // Flatten embedded fields
            foreach (EmbeddedSchemaField embeddedSchemaField in fields.OfType<EmbeddedSchemaField>())
            {
                ExtractDataAttributes(embeddedSchemaField.Value, dataAttributesBuilder);
            }
        }
예제 #4
0
 private void ProcessFields(ItemFields fields, XmlElement link)
 {
     if (fields!=null)
     {
         foreach (var fieldname in _metaFieldNames)
         {
             if (fields.Contains(fieldname))
             {
                 link.SetAttribute("data-" + fieldname, fields.GetSingleFieldValue(fieldname));
             }
         }
         foreach (var field in fields)
         {
             if (field is EmbeddedSchemaField)
             {
                 ProcessFields(((EmbeddedSchemaField)field).Value, link);
             }
         }
     }
 }
        protected string GetUrl(Page page)
        {
            string url;

            if (page.PageTemplate.Title.Equals(_config.ExternalUrlTemplate, StringComparison.InvariantCultureIgnoreCase) && page.Metadata != null)
            {
                // The Page is a "Redirect Page"; obtain the URL from its metadata.
                ItemFields meta = new ItemFields(page.Metadata, page.MetadataSchema);
                ItemFields link = meta.GetEmbeddedField("redirect");
                url = link.GetExternalLink("externalLink");
                if (string.IsNullOrEmpty(url))
                {
                    url = link.GetSingleFieldValue("internalLink");
                }
            }
            else
            {
                url = GetExtensionlessUrl(page.PublishLocationUrl);
            }
            return(url);
        }
예제 #6
0
        private void ProcessFields(ItemFields fields, XmlElement link)
        {
            if (fields != null)
            {
                foreach (string fieldname in _metaFieldNames)
                {
                    if (fields.Contains(fieldname))
                    {
                        link.SetAttribute("data-" + fieldname, fields.GetSingleFieldValue(fieldname));
                    }
                }

                foreach (ItemField field in fields)
                {
                    if (field is EmbeddedSchemaField)
                    {
                        ProcessFields(((EmbeddedSchemaField)field).Value, link);
                    }
                }
            }
        }
예제 #7
0
        protected Dictionary <string, string> ExtractKeyValuePairs(Component component)
        {
            Dictionary <string, string> keyValuePairs = new Dictionary <string, string>();

            if (component.Content == null)
            {
                return(keyValuePairs);
            }

            ItemFields configComponentFields = new ItemFields(component.Content, component.Schema);

            ItemFields[] settingsFieldValues = configComponentFields.GetEmbeddedFields("settings").ToArray();
            if (settingsFieldValues.Any())
            {
                //either schema is a generic multival embedded name/value
                foreach (ItemFields setting in settingsFieldValues)
                {
                    string key = setting.GetTextValue("name");
                    if (!string.IsNullOrEmpty(key) && !keyValuePairs.ContainsKey(key))
                    {
                        keyValuePairs.Add(key, setting.GetTextValue("value"));
                    }
                    else
                    {
                        Logger.Warning(string.Format("Empty or duplicate key found ('{0}') in Component '{1}' ({2})",
                                                     key, component.Title, component.Id));
                    }
                }
            }
            else
            {
                //... or its a custom schema with individual fields
                foreach (ItemField field in configComponentFields)
                {
                    string key = field.Name;
                    keyValuePairs.Add(key, configComponentFields.GetSingleFieldValue(key));
                }
            }
            return(keyValuePairs);
        }
        protected Dictionary <string, string> ReadComponentData(Component comp)
        {
            Dictionary <string, string> settings = new Dictionary <string, string>();

            if (comp.Content != null)
            {
                ItemFields fields = new ItemFields(comp.Content, comp.Schema);
                IEnumerable <ItemFields> configFields = fields.GetEmbeddedFields("settings");
                if (configFields.Any())
                {
                    //either schema is a generic multival embedded name/value
                    foreach (ItemFields setting in configFields)
                    {
                        string key = setting.GetTextValue("name");
                        if (!String.IsNullOrEmpty(key) && !settings.ContainsKey(key))
                        {
                            settings.Add(key, setting.GetTextValue("value"));
                        }
                        else
                        {
                            Logger.Warning(String.Format("Duplicate key found: '{0}' when processing component {1}", key, comp.Id));
                        }
                    }
                }
                else
                {
                    //... or its a custom schema with individual fields
                    foreach (ItemField field in fields)
                    {
                        //TODO - do we need to be smarter about date/number type fields?
                        string key = field.Name;
                        settings.Add(key, fields.GetSingleFieldValue(key));
                    }
                }
            }
            return(settings);
        }
 private static NavigationConfig LoadConfig(Component component)
 {
     NavigationConfig res = new NavigationConfig {NavType = NavigationType.Simple};
     if (component.Metadata != null)
     {
         ItemFields meta = new ItemFields(component.Metadata, component.MetadataSchema);
         Keyword type = meta.GetKeywordValue("navigationType");
         switch (type.Key.ToLower())
         {
             case "localizable":
                 res.NavType = NavigationType.Localizable;
                 break;
         }
         string navTextFields = meta.GetSingleFieldValue("navigationTextFieldPaths");
         if (!String.IsNullOrEmpty(navTextFields))
         {
             res.NavTextFieldPaths = navTextFields.Split(',').Select(s => s.Trim()).ToList();
         }
         res.ExternalUrlTemplate = meta.GetSingleFieldValue("externalLinkTemplate");
     }
     return res;
 }
예제 #10
0
        private string ProcessFields(ItemFields fields)
        {
            StringBuilder attributesBuilder = new StringBuilder();

            if (fields != null)
            {
                Logger.Debug(String.Join(", ", _metaFieldNames));
                foreach (string fieldname in _metaFieldNames)
                {
                    Logger.Debug("Processing field: " + fieldname);
                    if (fields.Contains(fieldname))
                    {
                        string attribute = String.Format(" data-{0}=\"{1}\"", fieldname, System.Net.WebUtility.HtmlEncode(fields.GetSingleFieldValue(fieldname)));
                        Logger.Debug("Attribute:" + attribute);
                        // TODO: XML encode the value
                        attributesBuilder.Append(attribute);
                    }
                }

                foreach (ItemField field in fields)
                {
                    if (field is EmbeddedSchemaField)
                    {
                        attributesBuilder.Append(ProcessFields(((EmbeddedSchemaField)field).Value));
                    }
                }
            }
            Logger.Debug("attributes:" + attributesBuilder);
            return(attributesBuilder.ToString());
        }
        private string ProcessFields(ItemFields fields)
        {
            StringBuilder attributesBuilder = new StringBuilder();
            if (fields!=null)
            {
                Logger.Debug(String.Join(", ", _metaFieldNames));
                foreach (string fieldname in _metaFieldNames)
                {
                    Logger.Debug("Processing field: " + fieldname);
                    if (fields.Contains(fieldname))
                    {
                        string attribute = String.Format(" data-{0}=\"{1}\"", fieldname, System.Net.WebUtility.HtmlEncode(fields.GetSingleFieldValue(fieldname)));
                        Logger.Debug("Attribute:" + attribute);
                        // TODO: XML encode the value
                        attributesBuilder.Append(attribute);
                    }
                }

                foreach (ItemField field in fields)
                {
                    if (field is EmbeddedSchemaField)
                    {
                        attributesBuilder.Append(ProcessFields(((EmbeddedSchemaField)field).Value));
                    }
                }
            }
            Logger.Debug("attributes:" + attributesBuilder);
            return attributesBuilder.ToString();
        }
예제 #12
0
        private static NavigationConfig GetNavigationConfiguration(Component navConfigComponent)
        {
            NavigationConfig result = new NavigationConfig { NavType = NavigationType.Simple };
            if (navConfigComponent.Metadata == null)
            {
                return result;
            }

            ItemFields navConfigComponentMetadataFields = new ItemFields(navConfigComponent.Metadata, navConfigComponent.MetadataSchema);
            Keyword type = navConfigComponentMetadataFields.GetKeywordValue("navigationType");
            switch (type.Key.ToLower())
            {
                case "localizable":
                    result.NavType = NavigationType.Localizable;
                    break;
            }
            string navTextFields = navConfigComponentMetadataFields.GetSingleFieldValue("navigationTextFieldPaths");
            if (!string.IsNullOrEmpty(navTextFields))
            {
                result.NavTextFieldPaths = navTextFields.Split(',').Select(s => s.Trim()).ToList();
            }
            result.ExternalUrlTemplate = navConfigComponentMetadataFields.GetSingleFieldValue("externalLinkTemplate");
            return result;
        }
예제 #13
0
        private void ExtractDataAttributes(ItemFields fields, StringBuilder dataAttributesBuilder)
        {
            if (fields == null)
            {
                return;
            }

            foreach (string fieldname in _dataFieldNames.Where(fn => fields.Contains(fn)))
            {
                string dataAttribute = string.Format(" data-{0}=\"{1}\"", fieldname, System.Net.WebUtility.HtmlEncode(fields.GetSingleFieldValue(fieldname)));
                dataAttributesBuilder.Append(dataAttribute);
            }

            // Flatten embedded fields
            foreach (EmbeddedSchemaField embeddedSchemaField in fields.OfType <EmbeddedSchemaField>())
            {
                ExtractDataAttributes(embeddedSchemaField.Value, dataAttributesBuilder);
            }
        }
 protected Dictionary<string, string> ReadComponentData(Component comp)
 {
     Dictionary<string, string> settings = new Dictionary<string, string>();
     if (comp.Content!=null)
     {
         ItemFields fields = new ItemFields(comp.Content, comp.Schema);
         IEnumerable<ItemFields> configFields = fields.GetEmbeddedFields("settings");
         if (configFields.Any())
         {
             //either schema is a generic multival embedded name/value
             foreach (ItemFields setting in configFields)
             {
                 string key = setting.GetTextValue("name");
                 if (!String.IsNullOrEmpty(key) && !settings.ContainsKey(key))
                 {
                     settings.Add(key, setting.GetTextValue("value"));
                 }
                 else
                 {
                     Logger.Warning(String.Format("Duplicate key found: '{0}' when processing component {1}", key, comp.Id));
                 }
             }
         }
         else
         {
             //... or its a custom schema with individual fields
             foreach (ItemField field in fields)
             {
                 //TODO - do we need to be smarter about date/number type fields?
                 string key = field.Name;
                 settings.Add(key, fields.GetSingleFieldValue(key));
             }
         }
     }
     return settings;
 }
예제 #15
0
        protected Dictionary<string, string> ExtractKeyValuePairs(Component component)
        {
            Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
            if (component.Content == null)
            {
                return keyValuePairs;
            }

            ItemFields configComponentFields = new ItemFields(component.Content, component.Schema);
            ItemFields[] settingsFieldValues = configComponentFields.GetEmbeddedFields("settings").ToArray();
            if (settingsFieldValues.Any())
            {
                //either schema is a generic multival embedded name/value
                foreach (ItemFields setting in settingsFieldValues)
                {
                    string key = setting.GetTextValue("name");
                    if (!string.IsNullOrEmpty(key) && !keyValuePairs.ContainsKey(key))
                    {
                        keyValuePairs.Add(key, setting.GetTextValue("value"));
                    }
                    else
                    {
                        Logger.Warning(string.Format("Empty or duplicate key found ('{0}') in Component '{1}' ({2})",
                            key, component.Title, component.Id));
                    }
                }
            }
            else
            {
                //... or its a custom schema with individual fields
                foreach (ItemField field in configComponentFields)
                {
                    string key = field.Name;
                    keyValuePairs.Add(key, configComponentFields.GetSingleFieldValue(key));
                }
            }
            return keyValuePairs;
        }