gecko-dev/dom/l10n/DOMLocalization.h

96 строки
3.0 KiB
C++

#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<DOMLocalization> Constructor(
const GlobalObject& aGlobal,
const Optional<Sequence<nsString>>& aResourceIds,
const Optional<OwningNonNull<GenerateMessages>>& aGenerateMessages,
ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> 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<JS::Handle<JSObject*>>& aArgs,
ErrorResult& aRv);
void GetAttributes(JSContext* aCx, Element& aElement, L10nKey& aResult,
ErrorResult& aRv);
already_AddRefed<Promise> TranslateFragment(nsINode& aNode, ErrorResult& aRv);
already_AddRefed<Promise> TranslateElements(
const Sequence<OwningNonNull<Element>>& aElements, ErrorResult& aRv);
already_AddRefed<Promise> 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<OwningNonNull<Element>>& 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<nsCOMPtr<Element>>& aElements,
nsTArray<L10nMessage>& aTranslations,
ErrorResult& aRv);
protected:
virtual ~DOMLocalization();
void OnChange();
void DisconnectMutations();
void DisconnectRoots();
void ReportL10nOverlaysErrors(nsTArray<L10nOverlaysError>& aErrors);
void ConvertStringToL10nArgs(JSContext* aCx, const nsString& aInput,
intl::L10nArgs& aRetVal, ErrorResult& aRv);
RefPtr<L10nMutations> mMutations;
nsTHashtable<nsRefPtrHashKey<nsINode>> mRoots;
};
} // namespace dom
} // namespace mozilla
#endif