private static void UpdateRightToLeftSetting(CollectionSettings settings, XmlElement e, string lang) { HtmlDom.RemoveRtlDir(e); if ((lang == settings.Language1Iso639Code && settings.IsLanguage1Rtl) || (lang == settings.Language2Iso639Code && settings.IsLanguage2Rtl) || (lang == settings.Language3Iso639Code && settings.IsLanguage3Rtl)) { HtmlDom.AddRtlDir(e); } }
private static void UpdateRightToLeftSetting(BookData bookData, XmlElement e, string lang) { HtmlDom.RemoveRtlDir(e); if ((lang == bookData.Language1IsoCode && bookData.Language1.IsRightToLeft) || (lang == bookData.Language2IsoCode && bookData.Language2.IsRightToLeft) || (lang == bookData.Language3IsoCode && bookData.Language3.IsRightToLeft) || (lang == bookData.MetadataLanguage1IsoCode && bookData.MetadataLanguage1.IsRightToLeft)) { HtmlDom.AddRtlDir(e); } }
/// <summary> /// We stick 'contentLanguage2' and 'contentLanguage3' classes on editable things in bilingual and trilingual books /// </summary> public static void UpdateContentLanguageClasses(XmlNode elementOrDom, CollectionSettings settings, string vernacularIso, string contentLanguageIso2, string contentLanguageIso3) { var national1Iso = settings.Language2Iso639Code; var national2Iso = settings.Language3Iso639Code; var multilingualClass = "bloom-monolingual"; var contentLanguages = new Dictionary <string, string>(); contentLanguages.Add(vernacularIso, "bloom-content1"); if (!String.IsNullOrEmpty(contentLanguageIso2) && vernacularIso != contentLanguageIso2) { multilingualClass = "bloom-bilingual"; contentLanguages.Add(contentLanguageIso2, "bloom-content2"); } if (!String.IsNullOrEmpty(contentLanguageIso3) && vernacularIso != contentLanguageIso3 && contentLanguageIso2 != contentLanguageIso3) { multilingualClass = "bloom-trilingual"; Debug.Assert(!String.IsNullOrEmpty(contentLanguageIso2), "shouldn't have a content3 lang with no content2 lang"); contentLanguages.Add(contentLanguageIso3, "bloom-content3"); } //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); } foreach (XmlElement group in elementOrDom.SafeSelectNodes(".//*[contains(@class,'bloom-translationGroup')]")) { var isXMatter = @group.SafeSelectNodes("ancestor::div[contains(@class,'bloom-frontMatter') or contains(@class,'bloom-backMatter')]").Count > 0; foreach (XmlElement e in @group.SafeSelectNodes(".//textarea | .//div")) //nb: we don't necessarily care that a div is editable or not { var lang = e.GetAttribute("lang"); HtmlDom.RemoveClassesBeginingWith(e, "bloom-content"); // they might have been a given content lang before, but not now HtmlDom.RemoveRtlDir(e); // in case this language has been changed from a Right to Left language to a Left to Right language if (isXMatter && lang == national1Iso) { HtmlDom.AddClass(e, "bloom-contentNational1"); } if (isXMatter && !String.IsNullOrEmpty(national2Iso) && lang == national2Iso) { HtmlDom.AddClass(e, "bloom-contentNational2"); } foreach (var language in contentLanguages) { if (lang == language.Key) { HtmlDom.AddClass(e, language.Value); if ((lang == vernacularIso && settings.IsLanguage1Rtl) || (lang == national1Iso && settings.IsLanguage2Rtl) || (!String.IsNullOrEmpty(national2Iso) && lang == national2Iso && settings.IsLanguage3Rtl)) { HtmlDom.AddRtlDir(e); } break; //don't check the other languages } } } } }