Bug 1288406 - Part 4: Explicitly observe broadcasters' localizable attributes. r=Pike
Before this change the <broadcaster> elements would broadcast their
data-l10n-ids to the obervers and the L20n's mutation observer would kick in
and localize both the broadcaster and the observer. After having their
localizable attributes like `label` localized the broadcasters would boadcast
them to the observes again.
By using the <observes> elements inside of <menuitem> elements we can be
specific about which attributes are observed.
By not broadcasting data-l10n-ids it will be possible in the future to add them
specifically to the observing elements to define their own accesskeys not tied
to the global broadcaster.
MozReview-Commit-ID: D2tcO80nt6o
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -167,25 +167,38 @@
data-l10n-id="view-customize-toolbar-menuitem"
command="cmd_CustomizeToolbars"/>
</menupopup>
</menu>
<menu id="viewSidebarMenuMenu"
data-l10n-id="view-sidebar-menu">
<menupopup id="viewSidebarMenu">
<menuitem id="menu_bookmarksSidebar"
- key="viewBookmarksSidebarKb"
- observes="viewBookmarksSidebar"/>
+ key="viewBookmarksSidebarKb">
+ <observes element="viewBookmarksSidebar" attribute="label"/>
+ <observes element="viewBookmarksSidebar" attribute="checked"/>
+ <observes element="viewBookmarksSidebar" attribute="autoCheck"/>
+ <observes element="viewBookmarksSidebar" attribute="type"/>
+ <observes element="viewBookmarksSidebar" attribute="oncommand"/>
+ </menuitem>
<menuitem id="menu_historySidebar"
- data-l10n-id="view-history-menuitem"
- key="key_gotoHistory"
- observes="viewHistorySidebar"/>
- <menuitem id="menu_tabsSidebar"
- data-l10n-id="view-synced-tabs-menuitem"
- observes="viewTabsSidebar"/>
+ key="key_gotoHistory">
+ <observes element="viewHistorySidebar" attribute="label"/>
+ <observes element="viewHistorySidebar" attribute="checked"/>
+ <observes element="viewHistorySidebar" attribute="autoCheck"/>
+ <observes element="viewHistorySidebar" attribute="type"/>
+ <observes element="viewHistorySidebar" attribute="oncommand"/>
+ </menuitem>
+ <menuitem id="menu_tabsSidebar">
+ <observes element="viewTabsSidebar" attribute="label"/>
+ <observes element="viewTabsSidebar" attribute="checked"/>
+ <observes element="viewTabsSidebar" attribute="autoCheck"/>
+ <observes element="viewTabsSidebar" attribute="type"/>
+ <observes element="viewTabsSidebar" attribute="oncommand"/>
+ </menuitem>
<!-- Service providers with sidebars are inserted between these two menuseperators -->
<menuseparator hidden="true"/>
<menuseparator class="social-provider-menu" hidden="true"/>
</menupopup>
</menu>
<menuseparator/>
<menu id="viewFullZoomMenu" data-l10n-id="full-zoom-menu"
onpopupshowing="FullZoom.updateMenu();">
@@ -341,18 +354,19 @@
tooltip="bhTooltip" popupsinherittooltip="true">
<menuitem id="bookmarksShowAll"
data-l10n-id="show-all-bookmarks-menuitem"
command="Browser:ShowAllBookmarks"
key="manBookmarkKb"/>
<menuseparator id="organizeBookmarksSeparator"/>
<menuitem id="menu_bookmarkThisPage"
command="Browser:AddBookmarkAs"
- observes="bookmarkThisPageBroadcaster"
- key="addBookmarkAsKb"/>
+ key="addBookmarkAsKb">
+ <observes element="bookmarkThisPageBroadcaster" attribute="label"/>
+ </menuitem>
<menuitem id="subscribeToPageMenuitem"
data-l10n-id="subscribe-to-page-menuitem"
#ifndef XP_MACOSX
class="menuitem-iconic"
#endif
oncommand="return FeedHandler.subscribeToFeed(null, event);"
onclick="checkForMiddleClick(this, event);"
observes="singleFeedMenuitemState"/>
@@ -436,19 +450,22 @@
<menuitem id="sync-reauthitem"
data-l10n-id="sync-re-auth-menuitem"
observes="sync-reauth-state"
oncommand="gSyncUI.openSignInAgainPage('menubar');"/>
<menuseparator id="devToolsSeparator"/>
<menu id="webDeveloperMenu"
data-l10n-id="web-developer-menu">
<menupopup id="menuWebDeveloperPopup">
- <menuitem id="menu_pageSource"
- data-l10n-id="page-source-menuitem"
- observes="devtoolsMenuBroadcaster_PageSource"/>
+ <menuitem id="menu_pageSource">
+ <observes element="devtoolsMenuBroadcaster_PageSource" attribute="label"/>
+ <observes element="devtoolsMenuBroadcaster_PageSource" attribute="accesskey"/>
+ <observes element="devtoolsMenuBroadcaster_PageSource" attribute="key"/>
+ <observes element="devtoolsMenuBroadcaster_PageSource" attribute="command"/>
+ </menuitem>
</menupopup>
</menu>
<menuitem id="menu_pageInfo"
data-l10n-id="page-info-menuitem"
#ifndef XP_WIN
key="key_viewInfo"
#endif
command="View:PageInfo"/>
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -1661,17 +1661,17 @@ var BookmarkingUI = {
/**
* forceReset is passed when we're destroyed and the label should go back
* to the default (Bookmark This Page) for OS X.
*/
_updateBookmarkPageMenuItem: function BUI__updateBookmarkPageMenuItem(forceReset) {
let isStarred = !forceReset && this._itemIds.length > 0;
let l10nId = isStarred ?
- "edit-this-page-menuitem" : "bookmark-this-page-menuitem";
+ "edit-this-page-broadcaster" : "bookmark-this-page-broadcaster";
if (this.broadcaster) {
this.broadcaster.setAttribute("data-l10n-id", l10nId);
}
},
onMainMenuPopupShowing: function BUI_onMainMenuPopupShowing(event) {
// Don't handle events for submenus.
if (event.target != event.currentTarget)
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -117,34 +117,36 @@
<command id="Browser:ShowAllBookmarks"
oncommand="PlacesCommandHook.showPlacesOrganizer('UnfiledBookmarks');"/>
<command id="Browser:ShowAllHistory"
oncommand="PlacesCommandHook.showPlacesOrganizer('History');"/>
</commandset>
<broadcasterset id="mainBroadcasterSet">
<broadcaster id="Social:PageShareOrMark" disabled="true"/>
- <broadcaster id="viewBookmarksSidebar" autoCheck="false" data-l10n-id="bookmarks-button"
+ <broadcaster id="viewBookmarksSidebar" autoCheck="false"
+ data-l10n-id="view-bookmarks-broadcaster"
type="checkbox" group="sidebar" sidebarurl="chrome://browser/content/bookmarks/bookmarksPanel.xul"
oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/>
<!-- for both places and non-places, the sidebar lives at
chrome://browser/content/history/history-panel.xul so there are no
problems when switching between versions -->
- <broadcaster id="viewHistorySidebar" autoCheck="false" data-l10n-id="view-history-menuitem"
+ <broadcaster id="viewHistorySidebar" autoCheck="false"
+ data-l10n-id="view-history-broadcaster"
type="checkbox" group="sidebar"
sidebarurl="chrome://browser/content/history/history-panel.xul"
oncommand="SidebarUI.toggle('viewHistorySidebar');"/>
<broadcaster id="viewWebPanelsSidebar" autoCheck="false"
type="checkbox" group="sidebar" sidebarurl="chrome://browser/content/web-panels.xul"
oncommand="SidebarUI.toggle('viewWebPanelsSidebar');"/>
<broadcaster id="bookmarkThisPageBroadcaster"
- data-l10n-id="bookmark-this-page-menuitem"/>
+ data-l10n-id="bookmark-this-page-broadcaster"/>
<!-- popup blocking menu items -->
<broadcaster id="blockedPopupAllowSite"
accesskey="&allowPopups.accesskey;"
oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
<broadcaster id="blockedPopupEditSettings"
#ifdef XP_WIN
label="&editPopupSettings.label;"
@@ -169,25 +171,26 @@
A 'syncstatus' attribute is set while actively syncing, and the label
attribute which changes from "sync now" to "syncing" etc. -->
<broadcaster id="sync-status"/>
<!-- broadcasters of the "hidden" attribute to reflect setup state for
menus -->
<broadcaster id="sync-setup-state"/>
<broadcaster id="sync-syncnow-state" hidden="true"/>
<broadcaster id="sync-reauth-state" hidden="true"/>
- <broadcaster id="viewTabsSidebar" autoCheck="false" data-l10n-id="view-synced-tabs-menuitem"
+ <broadcaster id="viewTabsSidebar" autoCheck="false"
+ data-l10n-id="view-tabs-broadcaster"
type="checkbox" group="sidebar"
sidebarurl="chrome://browser/content/syncedtabs/sidebar.xhtml"
oncommand="SidebarUI.toggle('viewTabsSidebar');"/>
<broadcaster id="workOfflineMenuitemState"/>
<broadcaster id="socialSidebarBroadcaster" hidden="true"/>
<broadcaster id="devtoolsMenuBroadcaster_PageSource"
- data-l10n-id="page-source-menuitem"
+ data-l10n-id="page-source-broadcaster"
key="key_viewSource"
command="View:PageSource">
<observes element="canViewSource" attribute="disabled"/>
</broadcaster>
</broadcasterset>
<keyset id="mainKeyset">
<key id="key_newNavigator" data-l10n-id="new-navigator-key" command="cmd_newNavigator" modifiers="accel"/>
@@ -284,25 +287,23 @@
#endif
<key data-l10n-id="find-again-key2" command="cmd_findAgain"/>
<key data-l10n-id="find-again-key2" command="cmd_findPrevious" modifiers="shift"/>
<key id="addBookmarkAsKb" data-l10n-id="bookmark-this-page-key" command="Browser:AddBookmarkAs" modifiers="accel"/>
# Accel+Shift+A-F are reserved on GTK
#ifndef MOZ_WIDGET_GTK
<key id="bookmarkAllTabsKb" data-l10n-id="bookmark-this-page-key" oncommand="PlacesCommandHook.bookmarkCurrentPages();" modifiers="accel,shift"/>
- <key id="manBookmarkKb" data-l10n-id="bookmarks-key" command="Browser:ShowAllBookmarks" modifiers="accel,shift"/>
-#else
- <key id="manBookmarkKb" data-l10n-id="bookmarks-key" command="Browser:ShowAllBookmarks" modifiers="accel,shift"/>
#endif
- <key id="viewBookmarksSidebarKb" data-l10n-id="bookmarks-key" command="viewBookmarksSidebar" modifiers="accel"/>
+ <key id="manBookmarkKb" data-l10n-id="show-all-bookmarks-key" command="Browser:ShowAllBookmarks" modifiers="accel,shift"/>
+ <key id="viewBookmarksSidebarKb" data-l10n-id="view-bookmarks-key" command="viewBookmarksSidebar" modifiers="accel"/>
#ifdef XP_WIN
# Cmd+I is conventially mapped to Info on MacOS X, thus it should not be
# overridden for other purposes there.
- <key id="viewBookmarksSidebarWinKb" data-l10n-id="bookmarks-key" command="viewBookmarksSidebar" modifiers="accel"/>
+ <key id="viewBookmarksSidebarWinKb" data-l10n-id="view-bookmarks-key-win" command="viewBookmarksSidebar" modifiers="accel"/>
#endif
<!--<key id="markPage" key="&markPageCmd.commandkey;" command="Social:TogglePageMark" modifiers="accel,shift"/>-->
<key id="focusChatBar" key="&social.chatBar.commandkey;" command="Chat:Focus"
#ifdef XP_MACOSX
# Sadly the devtools uses shift-accel-c on non-mac and alt-accel-c everywhere else
# So we just use the other
modifiers="accel,shift"
@@ -313,17 +314,17 @@
<key id="key_stop" keycode="VK_ESCAPE" command="Browser:Stop"/>
#ifdef XP_MACOSX
<key id="key_stop_mac" modifiers="accel" key="&stopCmd.macCommandKey;" command="Browser:Stop"/>
#endif
<key id="key_gotoHistory"
- data-l10n-id="history-key"
+ data-l10n-id="view-history-key"
#ifdef XP_MACOSX
modifiers="accel,shift"
#else
modifiers="accel"
#endif
command="viewHistorySidebar"/>
<key id="key_fullZoomReduce" data-l10n-id="full-zoom-reduce-key1" command="cmd_fullZoomReduce" modifiers="accel"/>
--- a/browser/locales/en-US/browser/menubar.ftl
+++ b/browser/locales/en-US/browser/menubar.ftl
@@ -171,21 +171,16 @@ view-toolbars-menu =
[xul/accesskey] T
view-sidebar-menu =
[xul/label] Sidebar
[xul/accesskey] e
view-customize-toolbar-menuitem =
[xul/label] Customize…
[xul/accesskey] C
-view-history-menuitem =
- [xul/label] History
-view-synced-tabs-menuitem =
- [xul/label] Synced Tabs
-
full-zoom-menu =
[xul/label] Zoom
[xul/accesskey] Z
full-zoom-enlarge-menuitem =
[xul/label] Zoom In
[xul/accesskey] I
full-zoom-enlarge-key1 =
[xul/key] +
@@ -267,19 +262,26 @@ history-undo-window-menu =
[[ Bookmarks menu ]]
bookmarks-menu =
[xul/label] Bookmarks
[xul/accesskey] B
show-all-bookmarks-menuitem =
[xul/label] Show All Bookmarks
-bookmark-this-page-menuitem =
+# The command key for [lin] should not contain the letters A-F since they
+# are reserved shortcut keys on Linux.
+show-all-bookmarks-key =
+ [xul/key] { OS() ->
+ [lin] o
+ *[other] b
+ }
+bookmark-this-page-broadcaster =
[xul/label] Bookmark This Page
-edit-this-page-menuitem =
+edit-this-page-broadcaster =
[xul/label] Edit This Page
bookmark-this-page-key =
[xul/key] d
subscribe-to-page-menuitem =
[xul/label] Subscribe to This Page…
subscribe-to-page-menupopup =
[xul/label] Subscribe to This Page…
add-cur-pages-menuitem =
@@ -327,17 +329,17 @@ sync-re-auth-menuitem =
[xul/accesskey] R
sync-toolbar-button =
[xul/label] Sync
web-developer-menu =
[xul/label] Web Developer
[xul/accesskey] W
-page-source-menuitem =
+page-source-broadcaster =
[xul/label] Page Source
[xul/accesskey] o
page-source-key =
[xul/key] u
page-info-menuitem =
[xul/label] Page Info
[xul/accesskey] I
page-info-key =
--- a/browser/locales/en-US/browser/toolbar.ftl
+++ b/browser/locales/en-US/browser/toolbar.ftl
@@ -4,23 +4,21 @@
urlbar-textbox =
[xul/placeholder] Search or enter address
[xul/accesskey] d
[[ Toolbar items ]]
-bookmarks-button =
+view-bookmarks-broadcaster =
[xul/label] Bookmarks
-# The command key for [lin] should not contain the letters A-F since they
-# are reserved shortcut keys on Linux.
-bookmarks-key =
- [xul/key] { OS() ->
- [win] o
- [mac] b
- *[lin] i
- }
+view-bookmarks-key =
+ [xul/key] b
+view-bookmarks-key-win =
+ [xul/key] i
-history-button =
+view-history-broadcaster =
[xul/label] History
-history-key =
+view-history-key =
[xul/key] h
+view-tabs-broadcaster =
+ [xul/label] Synced Tabs
--- a/toolkit/content/l20n-chrome-xul.js
+++ b/toolkit/content/l20n-chrome-xul.js
@@ -575,25 +575,22 @@ function getIndexOfType(element) {
}
return index;
}
const ns = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
const allowed = {
attributes: {
- global: ['aria-label', 'aria-valuetext', 'aria-moz-hint'],
- broadcaster: ['label'],
- button: ['accesskey'],
+ global: [
+ 'accesskey', 'aria-label', 'aria-valuetext', 'aria-moz-hint', 'label'
+ ],
key: ['key', 'keycode'],
- menu: ['label', 'accesskey'],
- menuitem: ['label', 'accesskey'],
- tab: ['label'],
textbox: ['placeholder'],
- toolbarbutton: ['label', 'tooltiptext'],
+ toolbarbutton: ['tooltiptext'],
}
};
class XULLocalization extends Localization {
overlayElement(element, translation) {
return overlayElement(this, element, translation);
}
--- a/toolkit/modules/IntlMessageContext.jsm
+++ b/toolkit/modules/IntlMessageContext.jsm
@@ -1233,9 +1233,9 @@ this.EXPORTED_SYMBOLS = ['MessageContext
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(Intl, "ListFormat",
"resource://gre/modules/IntlListFormat.jsm");
XPCOMUtils.defineLazyModuleGetter(Intl, "PluralRules",
"resource://gre/modules/IntlPluralRules.jsm");
-this.MessageContext = MessageContext;
+this.MessageContext = MessageContext;
\ No newline at end of file