329269 - more work on places organizer. menus, accessible sorting and grouping options, etc. still a work in progress. r=annie.sullivan@gmail.com

This commit is contained in:
beng%bengoodger.com 2006-03-10 23:48:40 +00:00
parent 4d95ee0a45
commit 2a9e312db8
13 changed files with 727 additions and 313 deletions

View File

@ -6377,7 +6377,7 @@ var PlacesCommandHook = {
showPlacesOrganizer: function PCH_showPlacesOrganizer(mode) {
// TODO: check for an existing one and focus it instead.
openDialog("chrome://browser/content/places/places.xul",
"", "resizable", mode);
"", "dialog=no,resizable", mode);
},
/**

View File

@ -0,0 +1,119 @@
<vbox id="advancedSearch" collapsed="true">
<grid flex="1">
<columns>
<column flex="1"/>
<column flex="1"/>
<column flex="0"/>
<column flex="0"/>
</columns>
<rows id="advancedSearchRows">
<row id="advancedSearch1Row" flex="1">
<menulist id="advancedSearch1Subject" flex="1">
<menupopup>
<menuitem value="keyword"
label="&advancedSearch.subj_keyword.label;"
selected="true"
rowid="1"
id="advancedSearch1SubjectKeyword"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._keywordSearch);"/>
<menuitem value="visited"
label="&advancedSearch.subj_visited.label;"
rowid="1"
id="advancedSearch1SubjectVisited"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="location"
label="&advancedSearch.subj_location.label;"
rowid="1"
id="advancedSearch1SubjectLocation"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._locationSearch);"/>
</menupopup>
</menulist>
<hbox flex="1" align="center">
<menulist id="advancedSearch1LocationMenulist"
oncommand="PlacesQueryBuilder.doSearch();"
hidden="true">
<menupopup>
<menuitem id="advancedSearch1LocationMenuSelected"
value="startswith"
label="&advancedSearch.location_startswith.label;"
selected="true"/>
<menuitem value="is"
label="&advancedSearch.location_is.label;"/>
<menuitem value="onsite"
label="&advancedSearch.location_onsite.label;"/>
</menupopup>
</menulist>
<menulist id="advancedSearch1TimeMenulist" hidden="true">
<menupopup>
<menuitem value="on"
id="advancedSearch1TimeDefault"
label="&advancedSearch.time_is.label;"
selected="true"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="before"
label="&advancedSearch.time_before.label;"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="after"
label="&advancedSearch.time_after.label;"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="inLast"
label="&advancedSearch.time_inlast.label;"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeInLastSearch);"/>
</menupopup>
</menulist>
<textbox type="timed"
timeout="50"
id="advancedSearch1Textbox"
flex="1"
oncommand="PlacesQueryBuilder.doSearch();"/>
<textbox type="timed"
timeout="50"
id="advancedSearch1TimePicker"
hidden="true" flex="1"
rowid="1"
oncommand="PlacesQueryBuilder.onDateTyped(event, this.getAttribute('rowid'));"
onclick="PlacesQueryBuilder.handleTimePickerClick(event, this.getAttribute('rowid'));"/>
<popup id="advancedSearch1DatePopup"
onpopupshowing="this.setAttribute('showing', true);"
onpopuphidden="this.removeAttribute('showing');">
<vbox id="advancedSearch1Calendar"
class="history-calendar"
rowid="1"
onselectionchanged="return PlacesQueryBuilder.onCalendarChanged(event, event.target.getAttribute('rowid'));"/>
</popup>
<menulist id="advancedSearch1TimeMenulist2"
oncommand="PlacesQueryBuilder.doSearch();"
hidden="true">
<menupopup>
<menuitem value="days"
label="&advancedSearch.last_days.label;"
selected="true"/>
<menuitem value="weeks"
label="&advancedSearch.last_weeks.label;"/>
<menuitem value="months"
label="&advancedSearch.last_months.label;"/>
</menupopup>
</menulist>
</hbox>
<button id="advancedSearch1Plus"
label="&advancedSearch.plus.label;"
class="no-margin-button"
oncommand="PlacesQueryBuilder.addRow();"/>
<button id="advancedSearch1Minus"
disabled="true"
label="&advancedSearch.minus.label;"
class="no-margin-button"
oncommand="PlacesQueryBuilder.removeRow();"/>
</row>
</rows>
</grid>
</vbox>

View File

@ -1,82 +1,80 @@
<commandset id="placesCommands"
commandupdater="true" events="focus,select,mousedown,click,keypress"
oncommandupdate="PlacesController.onCommandUpdate()">
<command id="placesCmd_find" label="&cmd.find.label;" accesskey="&cmd.find.accesskey;"
oncommand="PlacesSearchBox.focus();"/>
<command id="placesCmd_export" label="&cmd.export.label;" accesskey="&cmd.export.accesskey;"/>
<command id="placesCmd_import"/>
<command id="placesCmd_search:save"/>
<command id="placesCmd_search:moreCriteria"
oncommand="PlacesQueryBuilder.toggle();"/>
<command id="placesCmd_select:all"
label="&cmd.select_all.label;" accesskey="&cmd.select_all.accesskey;"
oncommand="PlacesController.selectAll();"/>
<commandset readonly="true">
<command id="placesCmd_edit:copy"
label="&cmd.edit_copy.label;" accesskey="&cmd.edit_copy.accesskey;"
oncommand="PlacesController.copy();"/>
<command id="placesCmd_show:info"
oncommand="PlacesController.showBookmarkPropertiesForSelection();"
<commandset id="placesCommands"
commandupdater="true" events="focus,select,mousedown,click,keypress"
oncommandupdate="PlacesController.onCommandUpdate()">
<command id="placesCmd_find" label="&cmd.find.label;" accesskey="&cmd.find.accesskey;"
oncommand="PlacesSearchBox.focus();"/>
<command id="placesCmd_export" label="&cmd.export.label;" accesskey="&cmd.export.accesskey;"/>
<command id="placesCmd_import" label="&cmd.import.label;" accesskey="&cmd.import.accesskey;"/>
<command id="placesCmd_search:save"/>
<command id="placesCmd_search:moreCriteria"
oncommand="PlacesQueryBuilder.toggle();"/>
<command id="placesCmd_select:all"
label="&cmd.select_all.label;" accesskey="&cmd.select_all.accesskey;"
oncommand="PlacesController.selectAll();"/>
<commandset readonly="true">
<command id="placesCmd_edit:copy"
label="&cmd.edit_copy.label;" accesskey="&cmd.edit_copy.accesskey;"
oncommand="PlacesController.copy();"/>
<command id="placesCmd_show:info"
oncommand="PlacesController.showBookmarkPropertiesForSelection();"
#ifdef XP_WIN
label="&cmd.show_infoWin.label;"
accesskey="&cmd.show_infoWin.accesskey;"/>
label="&cmd.show_infoWin.label;"
accesskey="&cmd.show_infoWin.accesskey;"/>
#else
label="&cmd.show_infoMac.label;"
accesskey="&cmd.show_infoMac.accesskey;"/>
label="&cmd.show_infoMac.label;"
accesskey="&cmd.show_infoMac.accesskey;"/>
#endif
</commandset>
<commandset>
<command id="placesCmd_edit:cut"
label="&cmd.edit_cut.label;" accesskey="&cmd.edit_cut.accesskey;"
oncommand="PlacesController.cut();"/>
<command id="placesCmd_edit:paste"
label="&cmd.edit_paste.label;" accesskey="&cmd.edit_paste.accesskey;"
oncommand="PlacesController.paste();"/>
<command id="placesCmd_edit:delete"
label="&cmd.edit_delete.label;" accesskey="&cmd.edit_delete.accesskey;"
oncommand="PlacesController.remove('Remove Selection');"/>
<command id="placesCmd_rename" label="&cmd.rename.label;" accesskey="&cmd.rename.accesskey;"/>
</commandset>
<commandset type="link" readonly="true">
<command id="placesCmd_open" label="&cmd.open.label;" accesskey="&cmd.open.accesskey;"
oncommand="PlacesController.openLinkInCurrentWindow();"/>
<command id="placesCmd_open:window" label="&cmd.open_window.label;" accesskey="&cmd.open_window.accesskey;"
oncommand="PlacesController.openLinkInNewWindow();"/>
<command id="placesCmd_open:tab" label="&cmd.open_tab.label;" accesskey="&cmd.open_tab.accesskey;"
oncommand="PlacesController.openLinkInNewTab();"/>
</commandset>
<commandset type="link">
</commandset>
<commandset type="container" readonly="true">
<!-- The open:tabs command gets enabled/disabled based on the current
selection, and is used in the context menu for a node.
The open:tabsEnabled is always enabled, and is shown in bookmarks menus. -->
<command id="placesCmd_open:tabs" label="&cmd.open_tabs.label;" accesskey="&cmd.open_tabs.accesskey;"
oncommand="PlacesController.openLinksInTabs();"/>
<command id="placesCmd_open:tabsEnabled" label="&cmd.open_tabs.label;" accesskey="&cmd.open_tabs.accesskey;"
oncommand="PlacesController.openLinksInTabs();"/>
<command id="placesCmd_groupby:site"
label="&cmd.groupby_site.label;" accesskey="&cmd.groupby_site.accesskey;"
oncommand="PlacesController.groupBySite();"/>
<command id="placesCmd_groupby:page"
label="&cmd.groupby_page.label;" accesskey="&cmd.groupby_page.accesskey;"
oncommand="PlacesController.groupByPage();"/>
<command id="placesCmd_groupby:feed"
label="&cmd.groupby_feed.label;" accesskey="&cmd.groupby_feed.accesskey;"
oncommand="PlacesPage.groupByFeed();"/>
<command id="placesCmd_groupby:post"
label="&cmd.groupby_post.label;" accesskey="&cmd.groupby_post.accesskey;"
oncommand="PlacesPage.groupByPost();"/>
</commandset>
<commandset type="container">
<command id="placesCmd_sortby:name" label="&cmd.sortby_name.label;" accesskey="&cmd.sortby_name.accesskey;"/>
<command id="placesCmd_new:folder"
label="&cmd.new_folder.label;" accesskey="&cmd.new_folder.accesskey;"
oncommand="PlacesController.newFolder()"/>
<command id="placesCmd_new:separator" label="&cmd.new_separator.label;" accesskey="&cmd.new_separator.accesskey;"
oncommand="PlacesController.newSeparator()"/>
</commandset>
<commandset type="container|feed" readonly="true">
<command id="placesCmd_reload" label="&cmd.reload.label;" accesskey="&cmd.reload.accesskey;"/>
</commandset>
</commandset>
<commandset>
<command id="placesCmd_edit:cut"
label="&cmd.edit_cut.label;" accesskey="&cmd.edit_cut.accesskey;"
oncommand="PlacesController.cut();"/>
<command id="placesCmd_edit:paste"
label="&cmd.edit_paste.label;" accesskey="&cmd.edit_paste.accesskey;"
oncommand="PlacesController.paste();"/>
<command id="placesCmd_edit:delete"
label="&cmd.edit_delete.label;" accesskey="&cmd.edit_delete.accesskey;"
oncommand="PlacesController.remove('Remove Selection');"/>
<command id="placesCmd_rename" label="&cmd.rename.label;" accesskey="&cmd.rename.accesskey;"/>
</commandset>
<commandset type="link" readonly="true">
<command id="placesCmd_open" label="&cmd.open.label;" accesskey="&cmd.open.accesskey;"
oncommand="PlacesController.openLinkInCurrentWindow();"/>
<command id="placesCmd_open:window" label="&cmd.open_window.label;" accesskey="&cmd.open_window.accesskey;"
oncommand="PlacesController.openLinkInNewWindow();"/>
<command id="placesCmd_open:tab" label="&cmd.open_tab.label;" accesskey="&cmd.open_tab.accesskey;"
oncommand="PlacesController.openLinkInNewTab();"/>
</commandset>
<commandset type="link">
</commandset>
<commandset type="container" readonly="true">
<!-- The open:tabs command gets enabled/disabled based on the current
selection, and is used in the context menu for a node.
The open:tabsEnabled is always enabled, and is shown in bookmarks menus. -->
<command id="placesCmd_open:tabs" label="&cmd.open_tabs.label;" accesskey="&cmd.open_tabs.accesskey;"
oncommand="PlacesController.openLinksInTabs();"/>
<command id="placesCmd_open:tabsEnabled" label="&cmd.open_tabs.label;" accesskey="&cmd.open_tabs.accesskey;"
oncommand="PlacesController.openLinksInTabs();"/>
</commandset>
<commandset type="container">
<command id="placesCmd_sortby:name" label="&cmd.sortby_name.label;" accesskey="&cmd.sortby_name.accesskey;"/>
<command id="placesCmd_new:bookmark"
label="&cmd.new_bookmark.label;" accesskey="&cmd.new_bookmark.accesskey;"
oncommand="PlacesController.newBookmark()"/>
<command id="placesCmd_new:folder"
label="&cmd.new_folder.label;" accesskey="&cmd.new_folder.accesskey;"
oncommand="PlacesController.newFolder()"/>
<command id="placesCmd_new:separator" label="&cmd.new_separator.label;" accesskey="&cmd.new_separator.accesskey;"
oncommand="PlacesController.newSeparator()"/>
</commandset>
<commandset type="container|feed" readonly="true">
<command id="placesCmd_reload" label="&cmd.reload.label;" accesskey="&cmd.reload.accesskey;"/>
</commandset>
</commandset>
<broadcasterset id="placesGroupingBroadcasters">
<broadcaster id="placesBC_grouping:off"/>
<broadcaster id="placesBC_grouping:on"/>
<broadcaster id="placesBC_grouping:separator"/>
</broadcasterset>

View File

@ -1,5 +1,8 @@
<popup id="placesContext"
onpopupshowing="return PlacesController.buildContextMenu(this);">
<!-- the rules defined in the selection attribute control whether or not
the menu item is _visible_ regardless of whether or not the command
is enabled. -->
<menuitem id="placesContext_open" command="placesCmd_open" default="true"
selection="link"/>
<menuitem id="placesContext_open:tabs" command="placesCmd_open:tabs"

View File

@ -732,7 +732,7 @@ var PlacesController = {
node.type != Ci.nsINavHistoryResultNode.RESULT_TYPE_REMOTE_CONTAINER)
metadata["mutable"] = true;
}
if (this._activeView.getAttribute("seltype") != "single")
if (this._activeView.selType != "single")
metadata["multiselect"] = true;
if (!foundNonLeaf && nodes.length > 1)
metadata["links"] = true;
@ -807,7 +807,7 @@ var PlacesController = {
mouseLoadURI: function PC_mouseLoadURI(event) {
var node = this._activeView.selectedURINode;
if (node)
this._activeView.browserWindow.openUILink(node.uri, event, false, false);
this.browserWindow.openUILink(node.uri, event, false, false);
},
/**
@ -895,6 +895,13 @@ var PlacesController = {
this.bookmarks.endUpdateBatch();
},
get browserWindow() {
var wm =
Cc["@mozilla.org/appshell/window-mediator;1"].
getService(Ci.nsIWindowMediator);
return wm.getMostRecentWindow("navigator:browser");
},
/**
* Loads the selected URL in a new tab.
@ -902,7 +909,7 @@ var PlacesController = {
openLinkInNewTab: function PC_openLinkInNewTab() {
var node = this._activeView.selectedURINode;
if (node)
this._activeView.browserWindow.openNewTabWith(node.uri, null, null);
this.browserWindow.openNewTabWith(node.uri, null, null);
},
/**
@ -911,7 +918,7 @@ var PlacesController = {
openLinkInNewWindow: function PC_openLinkInNewWindow() {
var node = this._activeView.selectedURINode;
if (node)
this._activeView.browserWindow.openNewWindowWith(node.uri, null, null);
this.browserWindow.openNewWindowWith(node.uri, null, null);
},
/**
@ -920,7 +927,7 @@ var PlacesController = {
openLinkInCurrentWindow: function PC_openLinkInCurrentWindow() {
var node = this._activeView.selectedURINode;
if (node)
this._activeView.browserWindow.loadURI(node.uri, null, null);
this.browserWindow.loadURI(node.uri, null, null);
},
/**
@ -936,7 +943,7 @@ var PlacesController = {
for (var i = 0; i < cc; ++i) {
var childNode = node.getChild(i);
if (this.nodeIsURI(childNode))
this._activeView.browserWindow.openNewTabWith(childNode.uri,
this.browserWindow.openNewTabWith(childNode.uri,
null, null);
}
node.containerOpen = wasOpen;
@ -945,7 +952,7 @@ var PlacesController = {
var nodes = this._activeView.getSelectionNodes();
for (var i = 0; i < nodes.length; ++i) {
if (this.nodeIsURI(nodes[i]))
this._activeView.browserWindow.openNewTabWith(nodes[i].uri,
this.browserWindow.openNewTabWith(nodes[i].uri,
null, null);
}
}

View File

@ -15,7 +15,7 @@
<destructor><![CDATA[
]]></destructor>
<method name="init">
<body><![CDATA[
if (!this.hasAttribute("place"))
@ -329,8 +329,6 @@
]]></getter>
</property>
<property name="browserWindow" onget="return window;"/>
<field name="filterTransactions">false</field>
<field name="supportedDropTypes">
@ -647,6 +645,8 @@
]]></body>
</method>
<property name="selType" onget="return 'single';"/>
</implementation>
<handlers>
<handler event="popupshowing">

View File

@ -38,10 +38,23 @@
const PREF_PLACES_GROUPING_GENERIC = "browser.places.grouping.generic";
const PREF_PLACES_GROUPING_BOOKMARK = "browser.places.grouping.bookmark";
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
// Default Search Queries
const INDEX_HISTORY = 0;
const INDEX_BOOKMARKS = 1;
function GroupingConfig(substr, onLabel, onAccesskey, offLabel, offAccesskey,
onOncommand, offOncommand) {
this.substr = substr;
this.onLabel = onLabel;
this.onAccesskey = onAccesskey;
this.offLabel = offLabel;
this.offAccesskey = offAccesskey;
this.onOncommand = onOncommand;
this.offOncommand = offOncommand;
}
var PlacesOrganizer = {
_content: null,
_places: null,
@ -61,21 +74,8 @@ var PlacesOrganizer = {
false, false, 0, true));
PlacesController.groupableView = this._content;
var GroupingSerializer = {
serialize: function GS_serialize(raw) {
return raw.join(",");
},
deserialize: function GS_deserialize(str) {
return str === "" ? [] : str.split(",");
}
};
PlacesController.groupers.generic =
new PrefHandler(PREF_PLACES_GROUPING_GENERIC,
[Ci.nsINavHistoryQueryOptions.GROUP_BY_DOMAIN], GroupingSerializer);
PlacesController.groupers.bookmark =
new PrefHandler(PREF_PLACES_GROUPING_BOOKMARK,
[Ci.nsINavHistoryQueryOptions.GROUP_BY_FOLDER], GroupingSerializer);
Groupers.init();
// Attach the Places model to the Place View
// XXXben - move this to an attribute/property on the tree view
@ -83,7 +83,7 @@ var PlacesOrganizer = {
// Now load the appropriate folder in the Content View, and select the
// corresponding entry in the Places View. This is a little fragile.
var params = window.arguments[0];
var params = "arguments" in window ? window.arguments[0] : "history";
var index = params == "history" ? INDEX_HISTORY : INDEX_BOOKMARKS;
this._places.view.selection.select(index);
@ -93,7 +93,7 @@ var PlacesOrganizer = {
// Set up the advanced query builder UI
PlacesQueryBuilder.init();
},
/**
* A range has been selected from the calendar picker. Update the view
* to show only those results within the selected range.
@ -187,12 +187,14 @@ var PlacesOrganizer = {
return;
var sortingMode = node.queryOptions.sortingMode;
var groupings = PlacesController.groupers.generic;
var groupings = [Ci.nsINavHistoryQueryOptions.GROUP_BY_DOMAIN];
if (PlacesController.nodeIsFolder(node))
groupings = PlacesController.groupers.bookmark;
groupings = [Ci.nsINavHistoryQueryOptions.GROUP_BY_FOLDER];
PlacesController.loadNodeIntoView(this._content, node, groupings,
sortingMode);
Groupers.setGroupingOptions(this._content.getResult(), true);
this._setHeader("showing", node.title);
},
@ -291,19 +293,7 @@ var PlacesOrganizer = {
* Update the Places UI when the content of the right tree changes.
*/
onContentChanged: function PP_onContentChanged() {
var panelID = "commands_history";
var isBookmarks = this._content.isBookmarks;
var node = asQuery(this._content.getResult().root);
var queries = node.getQueries({});
if (queries[0].annotation.indexOf("livemark/") > -1)
panelID = "commands_feed";
else if (isBookmarks)
panelID = "commands_bookmark";
var commandBar = document.getElementById("commandBar");
commandBar.selectedPanel = document.getElementById(panelID);
// Hide the Calendar for Bookmark queries.
document.getElementById("historyCalendar").setAttribute("hidden", isBookmarks);
@ -786,3 +776,313 @@ var PlacesQueryBuilder = {
PlacesOrganizer._content.load(queries, options);
}
};
/**
* Population and commands for the View Menu.
*/
var ViewMenu = {
/**
* Removes content generated previously from a menupopup.
* @param popup
* The popup that contains the previously generated content.
* @param startID
* The id attribute of an element that is the start of the
* dynamically generated region - remove elements after this
* item only.
* Must be contained by popup. Can be null (in which case the
* contents of popup are removed).
* @param endID
* The id attribute of an element that is the end of the
* dynamically generated region - remove elements up to this
* item only.
* Must be contained by popup. Can be null (in which case all
* items until the end of the popup will be removed). Ignored
* if startID is null.
* @returns The element for the caller to insert new items before,
* null if the caller should just append to the popup.
*/
_clean: function VM__clean(popup, startID, endID) {
if (endID)
ASSERT(startID, "meaningless to have valid endID and null startID");
if (startID) {
var startElement = document.getElementById(startID);
ASSERT(startElement.parentNode == popup, "startElement is not in popup");
ASSERT(startElement,
"startID does not correspond to an existing element");
var endElement = null;
if (endID) {
endElement = document.getElementById(endID);
ASSERT(endElement.parentNode == popup, "endElement is not in popup");
ASSERT(endElement,
"endID does not correspond to an existing element");
}
while (startElement.nextSibling != endElement)
popup.removeChild(startElement.nextSibling);
return endElement;
}
else {
while(popup.hasChildNodes())
popup.removeChild(popup.firstChild);
}
return null;
},
/**
* Fills a menupopup with a list of columns
* @param event
* The popupshowing event that invoked this function.
* @param startID
* see _clean
* @param endID
* see _clean
* @param type
* the type of the menuitem, e.g. "radio" or "checkbox".
* Can be null (no-type).
* Checkboxes are checked if the column is visible.
*/
fillWithColumns: function VM_fillWithColumns(event, startID, endID, type) {
var popup = event.target;
var pivot = this._clean(popup, startID, endID);
// If no column is "sort-active", the "Unsorted" item needs to be checked,
// so track whether or not we find a column that is sort-active.
var isSorted = false;
var content = document.getElementById("placeContent");
var columns = content.columns;
for (var i = 0; i < columns.count; ++i) {
var column = columns.getColumnAt(i).element;
var menuitem = document.createElementNS(XUL_NS, "menuitem");
menuitem.id = "menucol_" + column.id;
menuitem.setAttribute("label", column.getAttribute("label"));
if (type == "radio") {
menuitem.setAttribute("type", "radio");
menuitem.setAttribute("name", "columns");
// This column is the sort key. Its item is checked.
if (column.hasAttribute("sortDirection")) {
menuitem.setAttribute("checked", "true");
isSorted = true;
}
}
else if (type == "checkbox") {
menuitem.setAttribute("type", "checkbox");
// Cannot uncheck the primary column.
if (column.getAttribute("primary") == "true")
menuitem.setAttribute("disabled", "true");
// Items for visible columns are checked.
if (column.getAttribute("hidden") != "true")
menuitem.setAttribute("checked", "true");
}
if (pivot)
popup.insertBefore(menuitem, pivot);
else
popup.appendChild(menuitem);
}
event.preventBubble();
},
/**
* Set up the content of the view menu.
*/
populate: function VM_populate(event) {
this.fillWithColumns(event, "viewUnsorted", "directionSeparator", "radio");
var sortColumn = this._getSortColumn();
var viewSortAscending = document.getElementById("viewSortAscending");
var viewSortDescending = document.getElementById("viewSortDescending");
// We need to remove an existing checked attribute because the unsorted
// menu item is not rebuilt every time we open the menu like the others.
var viewUnsorted = document.getElementById("viewUnsorted");
if (!sortColumn) {
viewSortAscending.removeAttribute("checked");
viewSortDescending.removeAttribute("checked");
viewUnsorted.setAttribute("checked", "true");
}
else if (sortColumn.getAttribute("sortDirection") == "ascending") {
viewSortAscending.setAttribute("checked", "true");
viewSortDescending.removeAttribute("checked");
viewUnsorted.removeAttribute("checked");
}
else if (sortColumn.getAttribute("sortDirection") == "descending") {
viewSortDescending.setAttribute("checked", "true");
viewSortAscending.removeAttribute("checked");
viewUnsorted.removeAttribute("checked");
}
},
/**
* Shows/Hides a tree column.
* @param element
* The menuitem element for the column
*/
showHideColumn: function VM_showHideColumn(element) {
const PREFIX = "menucol_";
var columnID = element.id.substr(PREFIX.length, element.id.length);
var column = document.getElementById(columnID);
ASSERT(column, "menu item for column that doesn't exist?! id = " + element.id);
var splitter = column.nextSibling;
if (splitter && splitter.localName != "splitter")
splitter = null;
if (element.getAttribute("checked") == "true") {
column.removeAttribute("hidden");
splitter.removeAttribute("hidden");
}
else {
column.setAttribute("hidden", "true");
splitter.setAttribute("hidden", "true");
}
},
/**
* Gets the last column that was sorted.
* @returns the currently sorted column, null if there is no sorted column.
*/
_getSortColumn: function VM__getSortColumn() {
var content = document.getElementById("placeContent");
var cols = content.columns;
for (var i = 0; i < cols.count; ++i) {
var column = cols.getColumnAt(i).element;
var sortDirection = column.getAttribute("sortDirection");
if (sortDirection == "ascending" || sortDirection == "descending")
return column;
}
return null;
},
/**
* Sorts the view by the specified key.
* @param element
* The menuitem element for the column that is the sort key.
* Can be null - the primary column will be sorted.
* @param direction
* The direction to sort - "ascending" or "descending".
* Can be null - the last direction will be used.
* If both element and direction are null, the view will be
* unsorted.
*/
setSortColumn: function VM_setSortColumn(element, direction) {
const PREFIX = "menucol_";
// Validate the click - check to see if it was on a valid sort item.
if (element &&
(element.id.substring(0, PREFIX.length) != PREFIX &&
element.id != "viewSortDescending" &&
element.id != "viewSortAscending"))
return;
// If both element and direction are null, all will be unsorted.
var unsorted = !element && !direction;
// If only the element is null, the currently sorted column will be sorted
// with the specified direction, if there is no currently sorted column,
// the primary column will be sorted with the specified direction.
if (!element && direction) {
element = this._getSortColumn();
if (!element)
element = document.getElementById("title");
}
else if (element && !direction) {
var elementID = element.id.substr(PREFIX.length, element.id.length);
element = document.getElementById(elementID);
// If direction is null, use the default (ascending)
direction = "ascending";
}
var content = document.getElementById("placeContent");
var columns = content.columns;
for (var i = 0; i < columns.count; ++i) {
var column = columns.getColumnAt(i).element;
if (unsorted) {
column.removeAttribute("sortActive");
column.removeAttribute("sortDirection");
content.getResult().sortAll(Ci.nsINavHistoryQueryOptions.SORT_BY_NONE);
}
else if (column.id == element.id) {
// We need to do this to ensure the UI updates properly next time it is built.
if (column.getAttribute("sortDirection") != direction) {
column.setAttribute("sortActive", "true");
column.setAttribute("sortDirection", direction);
}
var columnObj = content.columns.getColumnFor(column);
content.view.cycleHeader(columnObj);
break;
}
}
}
};
var Groupers = {
defaultGrouper: null,
annotationGroupers: [],
init: function G_init() {
var placeBundle = document.getElementById("placeBundle");
this.defaultGrouper =
new GroupingConfig(null, placeBundle.getString("defaultGroupOnLabel"),
placeBundle.getString("defaultGroupOnAccesskey"),
placeBundle.getString("defaultGroupOffLabel"),
placeBundle.getString("defaultGroupOffAccesskey"),
"PlacesOrganizer.groupBySite()",
"PlacesOrganizer.groupByPage()");
var subscriptionConfig =
new GroupingConfig("livemark/", placeBundle.getString("livemarkGroupOnLabel"),
placeBundle.getString("livemarkGroupOnAccesskey"),
placeBundle.getString("livemarkGroupOffLabel"),
placeBundle.getString("livemarkGroupOffAccesskey"),
"PlacesOrganizer.groupByFeed()",
"PlacesOrganizer.groupByPost()");
this.annotationGroupers.push(subscriptionConfig);
},
setGroupingOptions: function G_setGroupingOptions(result, on) {
var node = asQuery(result.root);
var separator = document.getElementById("placesBC_grouping:separator");
var groupOff = document.getElementById("placesBC_grouping:off");
var groupOn = document.getElementById("placesBC_grouping:on");
separator.removeAttribute("hidden");
groupOff.removeAttribute("hidden");
groupOn.removeAttribute("hidden");
// Walk the list of registered annotationGroupers, determining what are
// available and notifying the broadcaster
var disabled = false;
var query = node.getQueries({})[0];
var config = null;
for (var i = 0; i < this.annotationGroupers.length; ++i) {
config = this.annotationGroupers[i];
var substr = config.substr;
if (query.annotation.substr(0, substr.length) == substr) {
if (config.disabled)
disabled = true;
break;
}
config = null;
}
if (disabled || PlacesController.nodeIsFolder(node)) {
// Generic Bookmarks Folder or custom container that disables grouping.
separator.setAttribute("hidden", "true");
groupOff.setAttribute("hidden", "true");
groupOn.setAttribute("hidden", "true");
}
else {
if (!config)
config = this.defaultGrouper;
groupOn.setAttribute("label", config.onLabel);
groupOn.setAttribute("accesskey", config.onAccesskey);
groupOn.setAttribute("oncommand", config.onOncommand);
groupOff.setAttribute("label", config.offLabel);
groupOff.setAttribute("accesskey", config.offAccesskey);
groupOff.setAttribute("oncommand", config.offOncommand);
// Update the checked state of the UI
if (on) {
groupOn.setAttribute("checked", "true");
groupOff.removeAttribute("checked");
}
else {
groupOff.setAttribute("checked", "true");
groupOn.removeAttribute("checked");
}
}
}
};

View File

@ -6,6 +6,8 @@
<?xml-stylesheet href="chrome://global/skin/"?>
<?xml-stylesheet href="chrome://browser/skin/places/places.css"?>
<?xul-overlay href="chrome://browser/content/baseMenuOverlay.xul"?>
<!DOCTYPE window SYSTEM "chrome://browser/locale/places/places.dtd">
<window id="places" title="&places.title;"
@ -24,6 +26,7 @@
src="chrome://global/content/nsDragAndDrop.js"/>
<stringbundleset id="stringbundles">
<stringbundle id="bundle_browser" src="chrome://browser/locale/browser.properties"/>
<stringbundle id="placeBundle" src="chrome://browser/locale/places/places.properties"/>
<stringbundle id="brandBundle" src="chrome://branding/locale/brand.properties"/>
</stringbundleset>
@ -53,30 +56,108 @@
<menubar id="placesMenubar">
<menu id="fileMenu" label="&file.label;" accesskey="&file.accesskey;">
<menupopup>
<menuitem label="&fileClose.label;" accesskey="&fileClose.accesskey;"
oncommand="window.close();"/>
<menuitem id="fileNewBookmark" command="placesCmd_new:bookmark"/>
<menuitem id="fileNewFolder" command="placesCmd_new:folder"/>
<menuitem id="fileNewSeparator" command="placesCmd_new:separator"/>
<menuseparator/>
<menuitem id="fileImport" command="placesCmd_import"/>
<menuitem id="fileExport" command="placesCmd_export"/>
#ifndef XP_MACOSX
<menuseparator/>
<menuitem id="properties" command="placesCmd_show:info"/>
#endif
<menuseparator/>
<menuitem id="fileClose"
label="&file.close.label;" accesskey="&file.close.accesskey;"
oncommand="close();"/>
</menupopup>
</menu>
<menu id="editMenu" label="&edit.label;" accesskey="&edit.accesskey;">
<menupopup>
<menuitem id="editUndo" command="cmd_undo"
label="&edit.undo.label;" accesskey="&edit.undo.accesskey;"/>
<menuitem id="editRedo" command="cmd_redo"
label="&edit.redo.label;" accesskey="&edit.redo.label;"/>
<menuseparator/>
<menuitem id="editCut" command="placesCmd_edit:cut"/>
<menuitem id="editCopy" command="placesCmd_edit:copy"/>
<menuitem id="editPaste" command="placesCmd_edit:paste"/>
<menuitem id="editDelete" command="placesCmd_edit:delete"/>
<menuseparator/>
<menuitem id="editSelectAll" command="placesCmd_select:all"/>
<menuseparator/>
<menuitem id="editFind" command="placesCmd_find"/>
#ifdef XP_MACOSX
<menuseparator/>
<menuitem id="properties" command="placesCmd_show:info"/>
#endif
</menupopup>
</menu>
<menu id="viewMenu" label="&view.label;" accesskey="&view.accesskey;"
onpopupshowing="ViewMenu.populate(event);"
oncommand="ViewMenu.setSortColumn(event.target, null);">
<menupopup>
<menuitem id="viewReload" command="placesCmd_reload"/>
<menuseparator/>
<menuitem id="viewToolbar" type="checkbox"
label="&view.toolbar.label;" accesskey="&view.toolbar.accesskey;"/>
<menu id="viewColumns"
label="&view.columns.label;" accesskey="&view.columns.accesskey;">
<menupopup onpopupshowing="ViewMenu.fillWithColumns(event, null, null, 'checkbox');"
oncommand="ViewMenu.showHideColumn(event.target); event.preventBubble();"/>
</menu>
<menuseparator id="groupingSeparator" observes="placesBC_grouping:separator"/>
<menuitem id="viewGroupNone" type="radio" name="group"
observes="placesBC_grouping:off"/>
<menuitem id="viewGroupGroup" type="radio" name="group"
observes="placesBC_grouping:on"/>
<menuseparator id="columnSeparator"/>
<menuitem id="viewUnsorted" type="radio" name="columns"
label="&view.unsorted.label;" accesskey="&view.unsorted.accesskey;"
oncommand="ViewMenu.setSortColumn(null, null);"/>
<menuseparator id="directionSeparator"/>
<menuitem id="viewSortAscending" type="radio" name="direction"
label="&view.sortAscending.label;" accesskey="&view.sortAscending.accesskey;"
oncommand="ViewMenu.setSortColumn(null, 'ascending'); event.preventBubble();"/>
<menuitem id="viewSortDescending" type="radio" name="direction"
label="&view.sortDescending.label;" accesskey="&view.sortDescending.accesskey;"
oncommand="ViewMenu.setSortColumn(null, 'descending'); event.preventBubble();"/>
</menupopup>
</menu>
<menu id="helpMenu">
<menupopup id="menu_HelpPopup">
<menuitem id="helpUsingBookmarks"
label="&help.usingBookmarks.label;" accesskey="&help.usingBookmarks.accesskey;"/>
<menuitem id="helpUsingHistory"
label="&help.usingHistory.label;" accesskey="&help.usingHistory.accesskey;"/>
<menuitem id="helpAdvancedTips"
label="&help.advancedTips.label;" accesskey="&help.advancedTips.accesskey;"/>
</menupopup>
</menu>
</menubar>
<toolbar>
<textbox id="searchFilter" flex="1" style="width: 0px;" timeout="500"
oncommand="PlacesOrganizer.search(this.value);"
collection="all" persist="collection"
onfocus="PlacesSearchBox.onFocus();" onblur="PlacesSearchBox.onBlur();">
<button type="menu" class="filterList" id="filterList_history">
<menupopup>
<menuitem label="&search.all.label;" accesskey="&search.all.accesskey;"
type="radio" name="collection" value="all"
checked="true" default="true"/>
<menuitem label="&search.collection.label;" accesskey="&search.collection.accesskey;"
type="radio" name="collection" value="collection"/>
</menupopup>
</button>
</textbox>
<toolbarbutton id="toolbarNewFolder" command="placesCmd_new:folder"/>
<toolbarbutton id="toolbarDelete" command="placesCmd_edit:delete"/>
<spacer flex="1"/>
<toolbarbutton id="toolbarGroup" command="placesCmd_groupby:site" type="checkbox"/>
</toolbar>
</toolbox>
<hbox flex="1" id="placesView">
<vbox>
<hbox align="center" id="searchbar">
<textbox id="searchFilter" flex="3" style="width: 0px;" timeout="500"
oncommand="PlacesOrganizer.search(this.value);"
collection="all" persist="collection"
onfocus="PlacesSearchBox.onFocus();" onblur="PlacesSearchBox.onBlur();">
<button type="menu" class="filterList" id="filterList_history">
<menupopup>
<menuitem label="&search.all.label;" accesskey="&search.all.accesskey;"
type="radio" name="collection" value="all"
checked="true" default="true"/>
<menuitem label="&search.collection.label;" accesskey="&search.collection.accesskey;"
type="radio" name="collection" value="collection"/>
</menupopup>
</button>
</textbox>
</hbox>
<vbox id="placesListContainer" flex="1">
<tree id="placesList" class="placesTree" flex="1" type="places"
hidecolumnpicker="true" context="placesContext"
@ -91,9 +172,6 @@
<vbox id="historyCalendar"
class="history-calendar"
onselectionchanged="return PlacesOrganizer.rangeSelected()"/>
<hbox class="commands">
<button id="newFolder" view="placesList" command="placesCmd_new:folder"/>
</hbox>
</vbox>
<splitter id="splitter"/>
<vbox flex="4">
@ -124,130 +202,12 @@
command="placesCmd_search:moreCriteria"/>
</hbox>
</hbox>
<vbox id="advancedSearch" collapsed="true">
<grid flex="1">
<columns>
<column flex="1"/>
<column flex="1"/>
<column flex="0"/>
<column flex="0"/>
</columns>
<rows id="advancedSearchRows">
<row id="advancedSearch1Row" flex="1">
<menulist id="advancedSearch1Subject" flex="1">
<menupopup>
<menuitem value="keyword"
label="&advancedSearch.subj_keyword.label;"
selected="true"
rowid="1"
id="advancedSearch1SubjectKeyword"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._keywordSearch);"/>
<menuitem value="visited"
label="&advancedSearch.subj_visited.label;"
rowid="1"
id="advancedSearch1SubjectVisited"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="location"
label="&advancedSearch.subj_location.label;"
rowid="1"
id="advancedSearch1SubjectLocation"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._locationSearch);"/>
</menupopup>
</menulist>
<hbox flex="1" align="center">
<menulist id="advancedSearch1LocationMenulist"
oncommand="PlacesQueryBuilder.doSearch();"
hidden="true">
<menupopup>
<menuitem id="advancedSearch1LocationMenuSelected"
value="startswith"
label="&advancedSearch.location_startswith.label;"
selected="true"/>
<menuitem value="is"
label="&advancedSearch.location_is.label;"/>
<menuitem value="onsite"
label="&advancedSearch.location_onsite.label;"/>
</menupopup>
</menulist>
<menulist id="advancedSearch1TimeMenulist" hidden="true">
<menupopup>
<menuitem value="on"
id="advancedSearch1TimeDefault"
label="&advancedSearch.time_is.label;"
selected="true"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="before"
label="&advancedSearch.time_before.label;"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="after"
label="&advancedSearch.time_after.label;"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeSearch);"/>
<menuitem value="inLast"
label="&advancedSearch.time_inlast.label;"
rowid="1"
oncommand="PlacesQueryBuilder.showSearch(this.getAttribute('rowid'), PlacesQueryBuilder._timeInLastSearch);"/>
</menupopup>
</menulist>
<textbox type="timed"
timeout="50"
id="advancedSearch1Textbox"
flex="1"
oncommand="PlacesQueryBuilder.doSearch();"/>
<textbox type="timed"
timeout="50"
id="advancedSearch1TimePicker"
hidden="true" flex="1"
rowid="1"
oncommand="PlacesQueryBuilder.onDateTyped(event, this.getAttribute('rowid'));"
onclick="PlacesQueryBuilder.handleTimePickerClick(event, this.getAttribute('rowid'));"/>
<popup id="advancedSearch1DatePopup"
onpopupshowing="this.setAttribute('showing', true);"
onpopuphidden="this.removeAttribute('showing');">
<vbox id="advancedSearch1Calendar"
class="history-calendar"
rowid="1"
onselectionchanged="return PlacesQueryBuilder.onCalendarChanged(event, event.target.getAttribute('rowid'));"/>
</popup>
<menulist id="advancedSearch1TimeMenulist2"
oncommand="PlacesQueryBuilder.doSearch();"
hidden="true">
<menupopup>
<menuitem value="days"
label="&advancedSearch.last_days.label;"
selected="true"/>
<menuitem value="weeks"
label="&advancedSearch.last_weeks.label;"/>
<menuitem value="months"
label="&advancedSearch.last_months.label;"/>
</menupopup>
</menulist>
</hbox>
<button id="advancedSearch1Plus"
label="&advancedSearch.plus.label;"
class="no-margin-button"
oncommand="PlacesQueryBuilder.addRow();"/>
<button id="advancedSearch1Minus"
disabled="true"
label="&advancedSearch.minus.label;"
class="no-margin-button"
oncommand="PlacesQueryBuilder.removeRow();"/>
</row>
</rows>
</grid>
</vbox>
#include advancedSearch.inc
<tree id="placeContent" class="placesTree" context="placesContext"
flex="1" query="" type="places"
ondblclick="PlacesController.mouseLoadURI(event);"
onplacestreereloaded="PlacesOrganizer.onContentChanged();">
<treecols>
<treecols id="placeContentColumns">
<treecol label="&col.title.label;" id="title" flex="5" primary="true"
persist="width hidden ordinal sortActive sortDirection"/>
<splitter class="tree-splitter"/>
@ -264,35 +224,10 @@
</tree>
</vbox>
</deck>
<hbox>
<deck id="commandBar" flex="1">
<hbox class="commands" id="commands_bookmark" flex="1">
<button id="newFolder" view="placeContent" command="placesCmd_new:folder"/>
<spacer flex="1"/>
<button id="saveSearch_bookmark" command="placesCmd_saveSearch" hidden="true"/>
</hbox>
<hbox class="commands" id="commands_history" flex="1">
<button id="groupBy_site" class="commandGroupButton first"
view="placeContent" command="placesCmd_groupby:site"/>
<spacer class="groupSpacer"/>
<button id="groupBy_page" class="commandGroupButton last"
view="placeContent" command="placesCmd_groupby:page"/>
<spacer flex="1"/>
<button id="saveSearch_history" command="placesCmd_saveSearch" hidden="true"/>
</hbox>
<hbox class="commands" id="commands_feed" flex="1">
<button id="groupOption0" class="commandGroupButton first"
view="placeContent" command="placesCmd_groupby:feed"/>
<spacer class="groupSpacer"/>
<button id="groupOption1" class="commandGroupButton last"
view="placeContent" command="placesCmd_groupby:post"/>
<spacer flex="1"/>
<button id="saveSearch_feed" command="placesCmd_saveSearch" hidden="true"/>
</hbox>
</deck>
<resizer dir="bottomright"/>
</hbox>
</vbox>
</hbox>
<statusbar>
<statusbarpanel id="status" flex="1"/>
</statusbar>
</window>

View File

@ -296,8 +296,6 @@
]]></getter>
</property>
<property name="browserWindow" onget="return window;"/>
<field name="filterTransactions">false</field>
<field name="supportedDropTypes">
@ -640,6 +638,8 @@
<body><![CDATA[
]]></body>
</method>
<property name="selType" onget="return 'single';"/>
</implementation>
<handlers>
<handler event="mousedown"><![CDATA[

View File

@ -12,17 +12,6 @@
this._places =
Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsINavHistoryService);
// Let's all do the happy QI/IRQ dance.
// Go from window->docshell->window.
window.QueryInterface(Ci.nsIInterfaceRequestor);
var shell = window.getInterface(Ci.nsIWebNavigation);
shell.QueryInterface(Ci.nsIDocShell);
var item = shell.QueryInterface(Ci.nsIDocShellTreeItem);
while (item.parent)
item = item.parent;
item.QueryInterface(Ci.nsIInterfaceRequestor);
this._browserWindow = window.opener; //XXX quick hack to make this work again... item.getInterface(Ci.nsIDOMWindowInternal);
]]></constructor>
<method name="init">
@ -383,9 +372,6 @@
]]></body>
</method>
<!-- AVI Method -->
<property name="browserWindow" onget="return this._browserWindow"/>
<!-- AVI Method -->
<property name="filterTransactions">true</property>

View File

@ -4,10 +4,59 @@
"File">
<!ENTITY file.accesskey
"F">
<!ENTITY fileClose.label
<!ENTITY file.close.label
"Close">
<!ENTITY fileClose.accesskey
<!ENTITY file.close.accesskey
"C">
<!ENTITY edit.label
"Edit">
<!ENTITY edit.accesskey
"E">
<!ENTITY edit.undo.label
"Undo">
<!ENTITY edit.undo.accesskey
"U">
<!ENTITY edit.redo.label
"Redo">
<!ENTITY edit.redo.accesskey
"R">
<!ENTITY view.label
"View">
<!ENTITY view.accesskey
"V">
<!ENTITY view.toolbar.label
"Toolbar">
<!ENTITY view.toolbar.accesskey
"T">
<!ENTITY view.columns.label
"Show Columns">
<!ENTITY view.columns.accesskey
"S">
<!ENTITY view.unsorted.label
"Unsorted">
<!ENTITY view.unsorted.accesskey
"U">
<!ENTITY view.sortAscending.label
"A > Z Sort Order">
<!ENTITY view.sortAscending.accesskey
"A">
<!ENTITY view.sortDescending.label
"Z > A Sort Order">
<!ENTITY view.sortDescending.accesskey
"Z">
<!ENTITY help.usingBookmarks.label
"Using Bookmarks">
<!ENTITY help.usingBookmarks.accesskey
"B">
<!ENTITY help.usingHistory.label
"Using History">
<!ENTITY help.usingHistory.accesskey
"H">
<!ENTITY help.advancedTips.label
"Advanced Tips &amp; Tricks">
<!ENTITY help.advancedTips.accesskey
"T">
<!ENTITY cmd.find.label
"Find in Bookmarks/History...">
<!ENTITY cmd.find.accesskey
@ -15,7 +64,11 @@
<!ENTITY cmd.export.label
"Export...">
<!ENTITY cmd.export.accesskey
"x">
"E">
<!ENTITY cmd.import.label
"Import...">
<!ENTITY cmd.import.accesskey
"I">
<!ENTITY cmd.select_all.label
"Select All">
<!ENTITY cmd.select_all.accesskey
@ -78,6 +131,10 @@
"Sort By Name">
<!ENTITY cmd.sortby_name.accesskey
"S">
<!ENTITY cmd.new_bookmark.label
"New Bookmark...">
<!ENTITY cmd.new_bookmark.accesskey
"B">
<!ENTITY cmd.new_folder.label
"New Folder...">
<!ENTITY cmd.new_folder.accesskey

View File

@ -41,3 +41,13 @@ locationStatusBookmarked=Star (On)
menuOpenInTabs.label=Open in Tabs
menuOpenInTabs.accesskey=o
defaultGroupOnLabel=Group by Site
defaultGroupOnAccesskey=S
defaultGroupOffLabel=No Grouping
defaultGroupOffAccesskey=N
livemarkGroupOnLabel=Group By Feed
livemarkGroupOnAccesskey=F
livemarkGroupOffLabel=No Grouping
livemarkGroupOffAccesskey=N

View File

@ -1,12 +1,11 @@
/* Root View */
#placesView {
padding: 8px 6px 6px 8px;
-moz-user-focus: ignore;
background-color: Window;
}
#splitter {
border: 0px;
width: 10px;
width: 3px;
background-color: transparent;
}
@ -24,7 +23,7 @@
#placesListContainer {
-moz-appearance: listbox;
margin: 7px 0px 7px 6px;
margin: 6px 0px 7px 6px;
}
#placeContent {
@ -33,7 +32,7 @@
}
#content {
margin: 7px 6px 7px 0px;
margin: 6px 6px 7px 0px;
-moz-appearance: listbox;
}