gecko-dev/dom/webidl/Highlight.webidl
Jan-Niklas Jaeschke ebf3cd6240 Bug 1808565, part 1: Adapt Selection to support StaticRanges. r=webidl,saschanaz,masayuki,smaug
This change is necessary to support the [CSS Highlight API](https://drafts.csswg.org/css-highlight-api-1/),
which uses `Selection` internally.

To replace `nsRange` with `AbstractRange`, some sections needed to be
adapted since `nsRange`-specific features were used.
Therefore, some methods (such as `GetRangeAt()`) may only be called if
the `Selection` is *not* of type `SelectionType::eHighlight`,
as it (per spec) returns an `nsRange`.
These methods will now `MOZ_ASSERT` if called for a highlight selection.
Additional methods are implemented which return `AbstractRange`
instead and are safe to be called for every selection type.

This commit also improves support of highlight features:
- Invalidation of highlight ranges: adding/removing Ranges in-place instead of
  removing and re-adding the Selection object associated with the highlight.
- Ranges are only associated with the Selection that shares the same Document
- Fixed minor IDL issue

Differential Revision: https://phabricator.services.mozilla.com/D170582
2023-03-03 14:59:47 +00:00

72 lines
2.0 KiB
Plaintext

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* https://drafts.csswg.org/css-highlight-api-1/
*
* Copyright © 2021 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
* liability, trademark and document use rules apply.
*/
/**
* Enum defining the available highlight types.
* See https://drafts.csswg.org/css-highlight-api-1/#enumdef-highlighttype
*/
enum HighlightType {
"highlight",
"spelling-error",
"grammar-error"
};
/**
* Definition of a highlight object, consisting of a set of ranges,
* a priority and a highlight type.
*
* See https://drafts.csswg.org/css-highlight-api-1/#highlight
*/
[Pref="dom.customHighlightAPI.enabled", Exposed=Window]
interface Highlight {
[Throws]
constructor(AbstractRange... initialRanges);
setlike<AbstractRange>;
attribute long priority;
attribute HighlightType type;
};
partial interface Highlight {
// Setlike methods need to be overridden.
// Iterating a setlike is not possible from C++ yet.
// Therefore a separate data structure must be held and kept in sync.
[Throws]
undefined add(AbstractRange range);
[Throws]
undefined clear();
[Throws]
boolean delete(AbstractRange range);
};
/**
* Registry object that contains all Highlights associated with a Document.
*
* See https://drafts.csswg.org/css-highlight-api-1/#highlightregistry
*/
[Pref="dom.customHighlightAPI.enabled", Exposed=Window]
interface HighlightRegistry {
maplike<DOMString, Highlight>;
};
partial interface HighlightRegistry {
// Maplike interface methods need to be overridden.
// Iterating a maplike is not possible from C++ yet.
// Therefore, a separate data structure must be held and kept in sync.
[Throws]
undefined set(DOMString key, Highlight value);
[Throws]
undefined clear();
[Throws]
boolean delete(DOMString key);
};