#ifndef mozilla_dom_l10n_DOMLocalization_h #define mozilla_dom_l10n_DOMLocalization_h #include "mozilla/intl/Localization.h" #include "mozilla/dom/DOMLocalizationBinding.h" #include "mozilla/dom/Element.h" #include "mozilla/dom/L10nMutations.h" #include "mozilla/dom/L10nOverlaysBinding.h" #include "mozilla/dom/LocalizationBinding.h" namespace mozilla { namespace dom { class DOMLocalization : public intl::Localization { public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DOMLocalization, Localization) explicit DOMLocalization(nsIGlobalObject* aGlobal); static already_AddRefed Constructor( const GlobalObject& aGlobal, const Optional>& aResourceIds, const Optional>& aGenerateMessages, ErrorResult& aRv); virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; /** * DOMLocalization API * * Methods documentation in DOMLocalization.webidl */ void ConnectRoot(nsINode& aNode, ErrorResult& aRv); void DisconnectRoot(nsINode& aNode, ErrorResult& aRv); void PauseObserving(ErrorResult& aRv); void ResumeObserving(ErrorResult& aRv); void SetAttributes(JSContext* aCx, Element& aElement, const nsAString& aId, const Optional>& aArgs, ErrorResult& aRv); void GetAttributes(JSContext* aCx, Element& aElement, L10nKey& aResult, ErrorResult& aRv); already_AddRefed TranslateFragment(nsINode& aNode, ErrorResult& aRv); already_AddRefed TranslateElements( const Sequence>& aElements, ErrorResult& aRv); already_AddRefed TranslateRoots(ErrorResult& aRv); /** * Helper methods */ /** * Accumulates all translatable elements (ones containing * a `data-l10n-id` attribute) from under a node into * a list of elements. */ static void GetTranslatables(nsINode& aNode, Sequence>& aElements, ErrorResult& aRv); /** * Sets the root information such as locale and direction. */ static void SetRootInfo(Element* aElement); /** * Applies l10n translations on translatable elements. */ void ApplyTranslations(nsTArray>& aElements, nsTArray& aTranslations, ErrorResult& aRv); protected: virtual ~DOMLocalization(); void OnChange(); void DisconnectMutations(); void DisconnectRoots(); void ReportL10nOverlaysErrors(nsTArray& aErrors); void ConvertStringToL10nArgs(JSContext* aCx, const nsString& aInput, intl::L10nArgs& aRetVal, ErrorResult& aRv); RefPtr mMutations; nsTHashtable> mRoots; }; } // namespace dom } // namespace mozilla #endif