mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-21 09:49:14 +00:00
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:
parent
4d95ee0a45
commit
2a9e312db8
@ -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);
|
||||
},
|
||||
|
||||
/**
|
||||
|
119
browser/components/places/content/advancedSearch.inc
Normal file
119
browser/components/places/content/advancedSearch.inc
Normal 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>
|
@ -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>
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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">
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
@ -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>
|
||||
|
||||
|
@ -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[
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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 & 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
|
||||
|
@ -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
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user