Bug 720294 - Refactor style sheet switching code in browser.js. r=gavin

This commit is contained in:
Justin Dolske 2012-03-05 11:53:34 +01:00
parent 4c6f85dff7
commit d311d2f32e

View File

@ -6133,103 +6133,114 @@ function charsetLoadListener(event) {
} }
} }
/* Begin Page Style Functions */
function getAllStyleSheets(frameset) {
var styleSheetsArray = Array.slice(frameset.document.styleSheets);
for (let i = 0; i < frameset.frames.length; i++) {
let frameSheets = getAllStyleSheets(frameset.frames[i]);
styleSheetsArray = styleSheetsArray.concat(frameSheets);
}
return styleSheetsArray;
}
function stylesheetFillPopup(menuPopup) { var gPageStyleMenu = {
var noStyle = menuPopup.firstChild;
var persistentOnly = noStyle.nextSibling;
var sep = persistentOnly.nextSibling;
while (sep.nextSibling)
menuPopup.removeChild(sep.nextSibling);
var styleSheets = getAllStyleSheets(window.content); getAllStyleSheets: function (frameset) {
var currentStyleSheets = {}; var styleSheetsArray = Array.slice(frameset.document.styleSheets);
var styleDisabled = getMarkupDocumentViewer().authorStyleDisabled; for (let i = 0; i < frameset.frames.length; i++) {
var haveAltSheets = false; let frameSheets = this.getAllStyleSheets(frameset.frames[i]);
var altStyleSelected = false; styleSheetsArray = styleSheetsArray.concat(frameSheets);
}
return styleSheetsArray;
},
for (let i = 0; i < styleSheets.length; ++i) { stylesheetFillPopup: function (menuPopup) {
let currentStyleSheet = styleSheets[i]; var noStyle = menuPopup.firstChild;
var persistentOnly = noStyle.nextSibling;
var sep = persistentOnly.nextSibling;
while (sep.nextSibling)
menuPopup.removeChild(sep.nextSibling);
if (!currentStyleSheet.title) var styleSheets = this.getAllStyleSheets(window.content);
continue; var currentStyleSheets = {};
var styleDisabled = getMarkupDocumentViewer().authorStyleDisabled;
var haveAltSheets = false;
var altStyleSelected = false;
// Skip any stylesheets whose media attribute doesn't match. for (let i = 0; i < styleSheets.length; ++i) {
if (currentStyleSheet.media.length > 0) { let currentStyleSheet = styleSheets[i];
let mediaQueryList = currentStyleSheet.media.mediaText;
if (!window.content.matchMedia(mediaQueryList).matches) if (!currentStyleSheet.title)
continue; continue;
// Skip any stylesheets whose media attribute doesn't match.
if (currentStyleSheet.media.length > 0) {
let mediaQueryList = currentStyleSheet.media.mediaText;
if (!window.content.matchMedia(mediaQueryList).matches)
continue;
}
if (!currentStyleSheet.disabled)
altStyleSelected = true;
haveAltSheets = true;
let lastWithSameTitle = null;
if (currentStyleSheet.title in currentStyleSheets)
lastWithSameTitle = currentStyleSheets[currentStyleSheet.title];
if (!lastWithSameTitle) {
let menuItem = document.createElement("menuitem");
menuItem.setAttribute("type", "radio");
menuItem.setAttribute("label", currentStyleSheet.title);
menuItem.setAttribute("data", currentStyleSheet.title);
menuItem.setAttribute("checked", !currentStyleSheet.disabled && !styleDisabled);
menuPopup.appendChild(menuItem);
currentStyleSheets[currentStyleSheet.title] = menuItem;
} else if (currentStyleSheet.disabled) {
lastWithSameTitle.removeAttribute("checked");
}
} }
if (!currentStyleSheet.disabled) noStyle.setAttribute("checked", styleDisabled);
altStyleSelected = true; persistentOnly.setAttribute("checked", !altStyleSelected && !styleDisabled);
persistentOnly.hidden = (window.content.document.preferredStyleSheetSet) ? haveAltSheets : false;
sep.hidden = (noStyle.hidden && persistentOnly.hidden) || !haveAltSheets;
return true;
},
haveAltSheets = true; stylesheetInFrame: function (frame, title) {
return Array.some(frame.document.styleSheets,
function (stylesheet) stylesheet.title == title);
},
let lastWithSameTitle = null; stylesheetSwitchFrame: function (frame, title) {
if (currentStyleSheet.title in currentStyleSheets) var docStyleSheets = frame.document.styleSheets;
lastWithSameTitle = currentStyleSheets[currentStyleSheet.title];
if (!lastWithSameTitle) { for (let i = 0; i < docStyleSheets.length; ++i) {
let menuItem = document.createElement("menuitem"); let docStyleSheet = docStyleSheets[i];
menuItem.setAttribute("type", "radio");
menuItem.setAttribute("label", currentStyleSheet.title); if (title == "_nostyle")
menuItem.setAttribute("data", currentStyleSheet.title); docStyleSheet.disabled = true;
menuItem.setAttribute("checked", !currentStyleSheet.disabled && !styleDisabled); else if (docStyleSheet.title)
menuPopup.appendChild(menuItem); docStyleSheet.disabled = (docStyleSheet.title != title);
currentStyleSheets[currentStyleSheet.title] = menuItem; else if (docStyleSheet.disabled)
} else if (currentStyleSheet.disabled) { docStyleSheet.disabled = false;
lastWithSameTitle.removeAttribute("checked");
} }
} },
noStyle.setAttribute("checked", styleDisabled); stylesheetSwitchAll: function (frameset, title) {
persistentOnly.setAttribute("checked", !altStyleSelected && !styleDisabled); if (!title || title == "_nostyle" || this.stylesheetInFrame(frameset, title))
persistentOnly.hidden = (window.content.document.preferredStyleSheetSet) ? haveAltSheets : false; this.stylesheetSwitchFrame(frameset, title);
sep.hidden = (noStyle.hidden && persistentOnly.hidden) || !haveAltSheets;
return true;
}
function stylesheetInFrame(frame, title) { for (let i = 0; i < frameset.frames.length; i++)
return Array.some(frame.document.styleSheets, this.stylesheetSwitchAll(frameset.frames[i], title);
function (stylesheet) stylesheet.title == title); },
}
function stylesheetSwitchFrame(frame, title) { setStyleDisabled: function (disabled) {
var docStyleSheets = frame.document.styleSheets; getMarkupDocumentViewer().authorStyleDisabled = disabled;
},
};
for (let i = 0; i < docStyleSheets.length; ++i) { /* Legacy global page-style functions */
let docStyleSheet = docStyleSheets[i]; var getAllStyleSheets = gPageStyleMenu.getAllStyleSheets;
var stylesheetFillPopup = gPageStyleMenu.stylesheetFillPopup;
var stylesheetInFrame = gPageStyleMenu.stylesheetInFrame;
var stylesheetSwitchFrame = gPageStyleMenu.stylesheetSwitchFrame;
var stylesheetSwitchAll = gPageStyleMenu.stylesheetSwitchAll;
var setStyleDisabled = gPageStyleMenu.setStyleDisabled;
if (title == "_nostyle")
docStyleSheet.disabled = true;
else if (docStyleSheet.title)
docStyleSheet.disabled = (docStyleSheet.title != title);
else if (docStyleSheet.disabled)
docStyleSheet.disabled = false;
}
}
function stylesheetSwitchAll(frameset, title) {
if (!title || title == "_nostyle" || stylesheetInFrame(frameset, title))
stylesheetSwitchFrame(frameset, title);
for (let i = 0; i < frameset.frames.length; i++)
stylesheetSwitchAll(frameset.frames[i], title);
}
function setStyleDisabled(disabled) {
getMarkupDocumentViewer().authorStyleDisabled = disabled;
}
/* End of the Page Style functions */
var BrowserOffline = { var BrowserOffline = {
_inited: false, _inited: false,