-
-
Save nelix/145095 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Derived from http://people.mozilla.org/~dietrich/ubiquity.js | |
var sources = ["history", "bookmarks", "starred", "tagged", "session"]; | |
var sorts = ["freshness", "age", "frequency", "infrequency", "recency", "staleness"] | |
var noun_type_places_datasource = new CmdUtils.NounType("datasource", sources); | |
var noun_type_places_sorts = new CmdUtils.NounType(" sort attribute", sorts); | |
var debugMode = true; | |
/* | |
The sort order to use for the results. | |
0 | |
Natural bookmark order | |
1 | |
Sort by title, A-Z | |
2 | |
Sort by title, Z-A | |
3 | |
Sort by visit date, most recent last | |
4 | |
Sort by visit date, most recent first | |
5 | |
Sort by uri, A-Z | |
6 | |
Sort by uri, Z-A | |
7 | |
Sort by visit count, ascending | |
8 | |
Sort by visit count, descending | |
Sort by date added, most recent last | |
12 | |
Sort by date added, most recent first | |
13 | |
Sort by last modified date, most recent last | |
14 | |
Sort by last modified date, most recent first | |
17 | |
Sort by tags, ascending | |
18 | |
Sort by tags, descending | |
19 | |
Sort by annotation, ascending | |
20 | |
Sort by annotation, descending | |
*/ | |
// https://developer.mozilla.org/En/Places_query_URIs | |
// command to execute places URI queries | |
CmdUtils.CreateCommand({ | |
names: "places", | |
icon: "chrome://browser/skin/places/query.png", | |
description: "Query your local history and bookmarks by keyword.", | |
arguments: [{role: "object", nountype: noun_arb_text, label: "keyword"}, {role: "format", nountype: noun_type_places_datasource, label:"source"}, {role: "source", nountype: noun_type_places_sorts, label: "sorton"} ,{ role: "instrument", nountype: noun_arb_text, label: "site"}], | |
preview: function(pblock, mods) { | |
if (!mods.object.text.length && !mods.format.text.length && !mods.instrument.text.length) { | |
pblock.innerHTML = "Enter terms or use the in modifier to get history, bookmarks, or starred. Optional sorton."; | |
return; | |
} | |
var Cc = Components.classes; | |
var Ci = Components.interfaces; | |
var hs = Cc["@mozilla.org/browser/nav-history-service;1"]. | |
getService(Ci.nsINavHistoryService); | |
var msg = '* <a href="${url}" title="${url}">${title}<br/><small> ${url}</small></a><br/>'; | |
// convert URI to queries and options | |
var options = { }; | |
var queries = { }; | |
var size = { }; | |
var sortBy = 0; | |
var queryType = 0; | |
var extras = ''; | |
if(mods.format && mods.format.text.length) { | |
if(debugMode) CmdUtils.log(mods.format.text); | |
switch(mods.format.text) { | |
case "history": | |
queryType = 0; | |
break; | |
case "bookmarks": | |
queryType = 1; | |
break; | |
case "starred": | |
extras = '&folder=UNFILED_BOOKMARKS' | |
queryType = 1; | |
break; | |
} | |
} | |
if(mods.instrument.text.length) { | |
extras+="&domain=" + mods.instrument.text; | |
} | |
if(mods.source && mods.source.text.length) { | |
switch(mods.source.text) { | |
case "freshness": | |
sortBy = 4; | |
break; | |
case "age": | |
sortBy = 3; | |
break; | |
case "frequency": | |
sortBy = 8; | |
break; | |
case "infrequency": | |
sortBy = 7; | |
break; | |
case "recency": | |
sortBy = 12; | |
break; | |
case "staleness": | |
sortBy = 11; | |
break; | |
} | |
} | |
aPlaceURI = "place:queryType=" + queryType; | |
if(extras.length) aPlaceURI += extras; | |
aPlaceURI += "&terms=" + mods.object.text; | |
aPlaceURI += "&sort=" + sortBy + "&maxResults=10"; | |
if(debugMode) CmdUtils.log(aPlaceURI); | |
hs.queryStringToQueries(aPlaceURI, queries, size, options); | |
// reasonableness | |
if (!options.value.maxResults || options.value.maxResults > 10) | |
options.value.maxResults = 10; | |
// execute query | |
var result = hs.executeQueries(queries.value, size.value, options.value); | |
var root = result.root; | |
root.containerOpen = true; | |
var count = root.childCount; | |
pblock.innerHTML = "Results (" + count + ")<br/>"; | |
if (count) { | |
for (var i = 0; i < count; i++) { | |
var node = root.getChild(i); | |
pblock.innerHTML += CmdUtils.renderTemplate( msg, {url: node.uri, title: node.title} ); | |
} | |
root.containerOpen = false; | |
} | |
} | |
}); | |
/* | |
andyed's example: | |
[10:37am] andyed: for command line, i want things like | |
[10:37am][10:37am][10:37am][10:37am][10:37am][10:37am][10:37am][10:37am][10:37am][10:37am][10:37am] | |
andyed: "yesterday afternoon I had a big google sesssion, show me all | |
my queries with clicks and the links clicked grouped by query" | |
[10:37am] andyed: sometime last week I had a session looking at media wiki extensions, show it to me with thumbnails | |
... | |
[10:38am] andyed: but i'm finding myself using starring | |
[10:38am] andyed: but with no good way to consume those links again later other than the awesome bar | |
[10:38am] andyed: so even just some good temporal queries on starred and a timeline view would rock | |
[10:38am] dietrich: {yesterday afternoon} {google.com} {visit-type=clicked}{not sure what you mean by "grouped by query"} | |
[10:39am] andyed: {ref:google.com} | |
[10:39am] andyed: listed out ordered by time grouped by query | |
[10:39am] andyed: query is a heading | |
"yesterday afternoon I had a big google session, show me all | |
my queries with clicks and the links-clicked grouped by query" | |
recomputed: show me all the visits from yesterday afternoon that have | |
a google search as the referrer, grouped by the query string of the | |
referring search. | |
summarized further: show google searches from yesterday afternoon | |
{date: yesterday afternoon} | |
{referrer: google.com} | |
{group by: referrer's queryString} | |
{visit type: clicked} | |
vocabulary: | |
"show" -> verb | |
"source" -> data type | |
"from" -> date range | |
"with" -> search terms | |
mappings: | |
"recent" maxResults=20? all in the last week? | |
"history" queryType=0 | |
"bookmarks" queryType=1 | |
"starred" queryType=1 | |
examples: | |
show starred from yesterday | |
show history from today with storks | |
andyed: show session from yesterday with amazon | |
*/ | |
var ranges = [ | |
"today", "earlier-today", /* excluding current session */ | |
"yesterday", | |
"this-week", "last-week", | |
"this-month", "last-month", | |
"long-ago"]; | |
//var noun_type_date_range = new CmdUtils.NounType("date-range", ranges); | |
var noun_type_date_range = { | |
_name: "date-range", | |
suggest: function( text, html ) { | |
var suggestions = []; | |
for ( var word in ranges) { | |
// Do the match in a non-case sensitive way | |
if ( word.indexOf( text.toLowerCase() ) > -1 ) { | |
var sugg = CmdUtils.makeSugg(word, word, word); | |
suggestions.push( sugg ); | |
} | |
} | |
return suggestions; | |
} | |
}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment