public IDictionary <string, Slab> GetSlabs(string[] enabledFeatureNames, LayoutType layout) { Dictionary <string, Slab> dictionary = new Dictionary <string, Slab>(); Dictionary <string, IEnumerable <string> > dictionary2 = new Dictionary <string, IEnumerable <string> >(); foreach (KeyValuePair <string, SlabDefinition> keyValuePair in this.SlabDefinitions) { string key = keyValuePair.Key; if (this.Type != SlabManifestType.SharedHoverCard || !key.Equals("editor")) { SlabDefinition value = keyValuePair.Value; string[] array = enabledFeatureNames.Where(new Func <string, bool>(value.HasBinding)).ToArray <string>(); IEnumerable <string> enumerable = null; if (array.Any <string>()) { dictionary[key] = value.GetSlab(array, layout, out enumerable); } else if (value.HasDefaultBinding()) { Slab defaultSlab = value.GetDefaultSlab(layout, out enumerable); if (this.Type == SlabManifestType.SharedHoverCard && defaultSlab.Dependencies.Contains("editor")) { IEnumerable <string> second = new string[] { "editor" }; defaultSlab.Dependencies = enumerable.Except(second).ToArray <string>(); } dictionary[key] = defaultSlab; } if (enumerable != null) { if (this.Type == SlabManifestType.SharedHoverCard && enumerable.Contains("editor")) { IEnumerable <string> second2 = new string[] { "editor" }; enumerable = enumerable.Except(second2).ToArray <string>(); } dictionary2[key] = enumerable; } } } this.IncludeSlabsDependencies(dictionary, dictionary2, enabledFeatureNames, layout); return(dictionary); }
private void IncludeSlabsDependencies(IDictionary <string, Slab> includedSlabs, Dictionary <string, IEnumerable <string> > slabNameToDependencies, string[] enabledFeatureNames, LayoutType layout) { if (!slabNameToDependencies.Any <KeyValuePair <string, IEnumerable <string> > >()) { return; } IEnumerable <string> source = from slabNameToDependency in slabNameToDependencies.Values from dependency in slabNameToDependency where !includedSlabs.ContainsKey(dependency) select dependency; ILookup <string, string> lookup = source.ToLookup((string s) => s); Dictionary <string, IEnumerable <string> > dictionary = new Dictionary <string, IEnumerable <string> >(); IEnumerable <KeyValuePair <string, SlabDefinition> > enumerable = from kv in this.SlabDefinitions where lookup.Contains(kv.Key) select kv; foreach (KeyValuePair <string, SlabDefinition> keyValuePair in enumerable) { string key = keyValuePair.Key; SlabDefinition value = keyValuePair.Value; string[] array = enabledFeatureNames.Where(new Func <string, bool>(value.HasBinding)).ToArray <string>(); IEnumerable <string> enumerable2; if (array.Any <string>()) { includedSlabs[key] = value.GetSlab(array, layout, out enumerable2); } else if (value.HasDefaultBinding()) { includedSlabs[key] = value.GetDefaultSlab(layout, out enumerable2); } else { string text = value.GetFeatures().First <string>(); includedSlabs[key] = value.GetSlab(new string[] { text }, layout, out enumerable2); } if (enumerable2 != null) { dictionary[key] = enumerable2; } } this.IncludeSlabsDependencies(includedSlabs, dictionary, enabledFeatureNames, layout); }