From 571cf6d6386303c451c92e725aef692fd5d01b8a Mon Sep 17 00:00:00 2001 From: "jaggernaut%netscape.com" Date: Thu, 14 Sep 2006 06:01:41 +0000 Subject: [PATCH] Bug 92589: View Use Stylesheet doesn't work on frames. Patch by neil@parkwaycc.co.uk, r=jag, sr=ben git-svn-id: svn://10.0.0.236/trunk@211005 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/suite/browser/navigator.js | 65 ++++++++++++++++------ mozilla/suite/browser/navigatorOverlay.xul | 5 +- 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/mozilla/suite/browser/navigator.js b/mozilla/suite/browser/navigator.js index c7d07cdf59f..01759f4b86e 100644 --- a/mozilla/suite/browser/navigator.js +++ b/mozilla/suite/browser/navigator.js @@ -1250,22 +1250,39 @@ function FillInHTMLTooltip(tipElement) /** * Use Stylesheet functions. * Written by Tim Hill (bug 6782) + * Frameset handling by Neil Rashbrook **/ -function stylesheetFillPopup(forDocument, menuPopup, itemNoOptStyles) +function getStyleSheetArray(frame) { - var children = menuPopup.childNodes; - var i; - for (i = 0; i < children.length; ++i) { - var child = children[i]; - if (child.getAttribute("class") == "authssmenuitem") - menuPopup.removeChild(child); + var styleSheets = frame.document.styleSheets; + var styleSheetsArray = new Array(styleSheets.length); + for (var i = 0; i < styleSheets.length; i++) { + styleSheetsArray[i] = styleSheets[i]; } + return styleSheetsArray; +} + +function getAllStyleSheets(frameset) +{ + var styleSheetsArray = getStyleSheetArray(frameset); + for (var i = 0; i < frameset.frames.length; i++) { + var frameSheets = getAllStyleSheets(frameset.frames[i]); + styleSheetsArray = styleSheetsArray.concat(frameSheets); + } + return styleSheetsArray; +} + +function stylesheetFillPopup(menuPopup) +{ + var itemNoOptStyles = menuPopup.firstChild; + while (itemNoOptStyles.nextSibling) + menuPopup.removeChild(itemNoOptStyles.nextSibling); var noOptionalStyles = true; - var styleSheets = forDocument.styleSheets; + var styleSheets = getAllStyleSheets(window._content); var currentStyleSheets = []; - for (i = 0; i < styleSheets.length; ++i) { + for (var i = 0; i < styleSheets.length; ++i) { var currentStyleSheet = styleSheets[i]; if (currentStyleSheet.title) { @@ -1277,14 +1294,10 @@ function stylesheetFillPopup(forDocument, menuPopup, itemNoOptStyles) lastWithSameTitle = currentStyleSheets[currentStyleSheet.title]; if (!lastWithSameTitle) { - var menuItem = document.createElement("menuitem"); + var menuItem = itemNoOptStyles.cloneNode(false); menuItem.setAttribute("label", currentStyleSheet.title); menuItem.setAttribute("data", currentStyleSheet.title); - menuItem.setAttribute("type", "radio"); menuItem.setAttribute("checked", !currentStyleSheet.disabled); - menuItem.setAttribute("class", "authssmenuitem"); - menuItem.setAttribute("name", "authorstyle"); - menuItem.setAttribute("oncommand", "stylesheetSwitch(_content.document, this.getAttribute('data'))"); menuPopup.appendChild(menuItem); currentStyleSheets[currentStyleSheet.title] = menuItem; } else { @@ -1296,9 +1309,18 @@ function stylesheetFillPopup(forDocument, menuPopup, itemNoOptStyles) itemNoOptStyles.setAttribute("checked", noOptionalStyles); } -function stylesheetSwitch(forDocument, title) -{ - var docStyleSheets = forDocument.styleSheets; +function stylesheetInFrame(frame, title) { + var docStyleSheets = frame.document.styleSheets; + + for (var i = 0; i < docStyleSheets.length; ++i) { + if (docStyleSheets[i].title == title) + return true; + } + return false; +} + +function stylesheetSwitchFrame(frame, title) { + var docStyleSheets = frame.document.styleSheets; for (var i = 0; i < docStyleSheets.length; ++i) { var docStyleSheet = docStyleSheets[i]; @@ -1310,6 +1332,15 @@ function stylesheetSwitch(forDocument, title) } } +function stylesheetSwitchAll(frameset, title) { + if (!title || stylesheetInFrame(frameset, title)) { + stylesheetSwitchFrame(frameset, title); + } + for (var i = 0; i < frameset.frames.length; i++) { + stylesheetSwitchAll(frameset.frames[i], title); + } +} + function applyTheme(themeName) { var name = themeName.getAttribute("name"); diff --git a/mozilla/suite/browser/navigatorOverlay.xul b/mozilla/suite/browser/navigatorOverlay.xul index 5a8aedc8fc3..e1dc82d044b 100644 --- a/mozilla/suite/browser/navigatorOverlay.xul +++ b/mozilla/suite/browser/navigatorOverlay.xul @@ -230,8 +230,9 @@ - - + +