/// <summary>
/// We stick various classes on editable things to control order and visibility
/// </summary>
public static void UpdateContentLanguageClasses(XmlNode elementOrDom, BookData bookData,
string language1IsoCode, string language2IsoCode, string language3IsoCode)
{
var multilingualClass = "bloom-monolingual";
var contentLanguages = new Dictionary <string, string>();
contentLanguages.Add(language1IsoCode, "bloom-content1");
if (!String.IsNullOrEmpty(language2IsoCode) && language1IsoCode != language2IsoCode)
{
multilingualClass = "bloom-bilingual";
contentLanguages.Add(language2IsoCode, "bloom-content2");
}
if (!String.IsNullOrEmpty(language3IsoCode) && language1IsoCode != language3IsoCode &&
language2IsoCode != language3IsoCode)
{
multilingualClass = "bloom-trilingual";
contentLanguages.Add(language3IsoCode, "bloom-content3");
Debug.Assert(!String.IsNullOrEmpty(language2IsoCode), "shouldn't have a content3 lang with no content2 lang");
}
//Stick a class in the page div telling the stylesheet how many languages we are displaying (only makes sense for content pages, in Jan 2012).
foreach (
XmlElement pageDiv in
elementOrDom.SafeSelectNodes(
"descendant-or-self::div[contains(@class,'bloom-page') and not(contains(@class,'bloom-frontMatter')) and not(contains(@class,'bloom-backMatter'))]")
)
{
HtmlDom.RemoveClassesBeginingWith(pageDiv, "bloom-monolingual");
HtmlDom.RemoveClassesBeginingWith(pageDiv, "bloom-bilingual");
HtmlDom.RemoveClassesBeginingWith(pageDiv, "bloom-trilingual");
HtmlDom.AddClassIfMissing(pageDiv, multilingualClass);
}
// This is the "code" part of the visibility system: https://goo.gl/EgnSJo
foreach (XmlElement group in GetTranslationGroups(elementOrDom))
{
var dataDefaultLanguages = HtmlDom.GetAttributeValue(@group, "data-default-languages").Split(new char[] { ',', ' ' },
StringSplitOptions.RemoveEmptyEntries);
//nb: we don't necessarily care that a div is editable or not
foreach (XmlElement e in @group.SafeSelectNodes(".//textarea | .//div"))
{
UpdateContentLanguageClassesOnElement(e, contentLanguages, bookData, language2IsoCode, language3IsoCode, dataDefaultLanguages);
}
}
// Also correct bloom-contentX fields in the bloomDataDiv, which are not listed under translation groups
foreach (XmlElement coverImageDescription in elementOrDom.SafeSelectNodes(".//*[@id='bloomDataDiv']/*[@data-book='coverImageDescription']"))
{
string[] dataDefaultLanguages = new string[] { " auto" }; // bloomDataDiv contents don't have dataDefaultLanguages on them, so just go with "auto"
//nb: we don't necessarily care that a div is editable or not
foreach (XmlElement e in coverImageDescription.SafeSelectNodes(".//textarea | .//div"))
{
UpdateContentLanguageClassesOnElement(e, contentLanguages, bookData, language2IsoCode, language3IsoCode, dataDefaultLanguages);
}
}
}