mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 12:44:43 +00:00
return CSSStyleSheet from HTMLStyleElement.sheet
Per spec, connected style elements with type text/css should return a CSSStyleSheet object. Previously always returned null. The sheet is lazily created and cached on first access.
This commit is contained in:
@@ -3,7 +3,22 @@
|
|||||||
|
|
||||||
<script id="sheet">
|
<script id="sheet">
|
||||||
{
|
{
|
||||||
|
// Disconnected style element should have no sheet
|
||||||
testing.expectEqual(null, document.createElement('style').sheet);
|
testing.expectEqual(null, document.createElement('style').sheet);
|
||||||
|
|
||||||
|
// Connected style element should have a CSSStyleSheet
|
||||||
|
const style = document.createElement('style');
|
||||||
|
document.head.appendChild(style);
|
||||||
|
testing.expectEqual(true, style.sheet instanceof CSSStyleSheet);
|
||||||
|
|
||||||
|
// Same sheet instance on repeated access
|
||||||
|
testing.expectEqual(true, style.sheet === style.sheet);
|
||||||
|
|
||||||
|
// Non-CSS type should have no sheet
|
||||||
|
const lessStyle = document.createElement('style');
|
||||||
|
lessStyle.type = 'text/less';
|
||||||
|
document.head.appendChild(lessStyle);
|
||||||
|
testing.expectEqual(null, lessStyle.sheet);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
// You should have received a copy of the GNU Affero General Public License
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
const std = @import("std");
|
||||||
const js = @import("../../../js/js.zig");
|
const js = @import("../../../js/js.zig");
|
||||||
const Page = @import("../../../Page.zig");
|
const Page = @import("../../../Page.zig");
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ const HtmlElement = @import("../Html.zig");
|
|||||||
|
|
||||||
const Style = @This();
|
const Style = @This();
|
||||||
_proto: *HtmlElement,
|
_proto: *HtmlElement,
|
||||||
|
_sheet: ?*CSSStyleSheet = null,
|
||||||
|
|
||||||
pub fn asElement(self: *Style) *Element {
|
pub fn asElement(self: *Style) *Element {
|
||||||
return self._proto._proto;
|
return self._proto._proto;
|
||||||
@@ -75,9 +77,15 @@ pub fn setDisabled(self: *Style, disabled: bool, page: *Page) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const CSSStyleSheet = @import("../../css/CSSStyleSheet.zig");
|
const CSSStyleSheet = @import("../../css/CSSStyleSheet.zig");
|
||||||
pub fn getSheet(_: *const Style) ?*CSSStyleSheet {
|
pub fn getSheet(self: *Style, page: *Page) !?*CSSStyleSheet {
|
||||||
// TODO?
|
// Per spec, sheet is null for disconnected elements or non-CSS types.
|
||||||
return null;
|
if (!self.asNode().isConnected()) return null;
|
||||||
|
if (!std.mem.eql(u8, self.getType(), "text/css")) return null;
|
||||||
|
|
||||||
|
if (self._sheet) |sheet| return sheet;
|
||||||
|
const sheet = try CSSStyleSheet.init(page);
|
||||||
|
self._sheet = sheet;
|
||||||
|
return sheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const JsApi = struct {
|
pub const JsApi = struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user