80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
/* 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/. */
|
|
|
|
"use strict";
|
|
|
|
module.metadata = {
|
|
"stability": "experimental"
|
|
};
|
|
|
|
const { Cc, Ci } = require("chrome");
|
|
|
|
const io = Cc['@mozilla.org/network/io-service;1'].
|
|
getService(Ci.nsIIOService);
|
|
|
|
const SHEET_TYPE = {
|
|
"agent": "AGENT_SHEET",
|
|
"user": "USER_SHEET",
|
|
"author": "AUTHOR_SHEET"
|
|
};
|
|
|
|
function getDOMWindowUtils(window) {
|
|
return window.QueryInterface(Ci.nsIInterfaceRequestor).
|
|
getInterface(Ci.nsIDOMWindowUtils);
|
|
};
|
|
|
|
/**
|
|
* Synchronously loads a style sheet from `uri` and adds it to the list of
|
|
* additional style sheets of the document.
|
|
* The sheets added takes effect immediately, and only on the document of the
|
|
* `window` given.
|
|
*/
|
|
function loadSheet(window, url, type) {
|
|
if (!(type && type in SHEET_TYPE))
|
|
type = "author";
|
|
|
|
type = SHEET_TYPE[type];
|
|
|
|
if (!(url instanceof Ci.nsIURI))
|
|
url = io.newURI(url, null, null);
|
|
|
|
let winUtils = getDOMWindowUtils(window);
|
|
try {
|
|
winUtils.loadSheet(url, winUtils[type]);
|
|
}
|
|
catch (e) {};
|
|
};
|
|
exports.loadSheet = loadSheet;
|
|
|
|
/**
|
|
* Remove the document style sheet at `sheetURI` from the list of additional
|
|
* style sheets of the document. The removal takes effect immediately.
|
|
*/
|
|
function removeSheet(window, url, type) {
|
|
if (!(type && type in SHEET_TYPE))
|
|
type = "author";
|
|
|
|
type = SHEET_TYPE[type];
|
|
|
|
if (!(url instanceof Ci.nsIURI))
|
|
url = io.newURI(url, null, null);
|
|
|
|
let winUtils = getDOMWindowUtils(window);
|
|
|
|
try {
|
|
winUtils.removeSheet(url, winUtils[type]);
|
|
}
|
|
catch (e) {};
|
|
};
|
|
exports.removeSheet = removeSheet;
|
|
|
|
/**
|
|
* Returns `true` if the `type` given is valid, otherwise `false`.
|
|
* The values currently accepted are: "agent", "user" and "author".
|
|
*/
|
|
function isTypeValid(type) {
|
|
return type in SHEET_TYPE;
|
|
}
|
|
exports.isTypeValid = isTypeValid;
|