diff --git a/content/bookmarks.js b/content/bookmarks.js
index 3a4ea6e2..f69410d5 100644
--- a/content/bookmarks.js
+++ b/content/bookmarks.js
@@ -350,7 +350,8 @@ function Bookmarks() //{{{
return {
get format() ({
- keys: { text: "url", description: "title", icon: "icon" },
+ title: ["URL", "Info"],
+ keys: { text: "url", description: "title", icon: "icon", extra: "extra" },
process: [template.icon, template.bookmarkDescription]
}),
@@ -578,7 +579,7 @@ function Bookmarks() //{{{
if (openItems)
return liberator.open([i.url for each (i in items)], liberator.NEW_TAB);
- let list = template.genericTable(["", "title", "URL"], items);
+ let list = template.genericTable(items, this.format);
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
}
};
@@ -761,14 +762,14 @@ function History() //{{{
// execute the query
let root = historyService.executeQuery(query, options).root;
root.containerOpen = true;
- for (let i = 0; i < root.childCount; i++)
+ for (let i in util.range(0, root.childCount))
{
let node = root.getChild(i);
- if (node.type == node.RESULT_TYPE_URI) // just make sure it's a bookmark
- items.push({ url: node.uri,
- title: node.title,
- icon: node.icon ? node.icon.spec : DEFAULT_FAVICON,
- get xml() template.bookmarkItem(this)});
+ if (node.type == node.RESULT_TYPE_URI)
+ items.push({ url: node.uri,
+ title: node.title,
+ icon: node.icon ? node.icon.spec : DEFAULT_FAVICON
+ })
}
root.containerOpen = false; // close a container after using it!
@@ -820,7 +821,7 @@ function History() //{{{
if (openItems)
return liberator.open([i[0] for each (i in items)], liberator.NEW_TAB);
- let list = template.genericTable(["", "title", "URL"], items);
+ let list = template.genericTable(items, bookmarks.format);
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
}
};
@@ -994,12 +995,9 @@ function QuickMarks() //{{{
}
}
- let items = ({ title: String(mark),
- url: qmarks.get(mark),
- get xml()
| {this.title} | {this.url} |
- } for each (mark in marks));
+ let items = [[mark, qmarks.get(mark)] for ([k, mark] in Iterator(marks))];
- let list = template.genericTable(["QuickMark", "URL"], items);
+ let list = template.genericTable(items, { title: ["QuickMark", "URL"] });
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
}
};
diff --git a/content/completion.js b/content/completion.js
index 0b16d72a..5d132c23 100644
--- a/content/completion.js
+++ b/content/completion.js
@@ -152,13 +152,15 @@ CompletionContext.prototype = {
set filter(val) this._filter = val,
get format() ({
+ title: this.title,
keys: this.keys,
process: this.process
}),
set format(format)
{
- this.keys = format.keys;
- this.process = format.process;
+ this.title = format.title || this.title;
+ this.keys = format.keys || this.keys;
+ this.process = format.process || this.process;
},
get items()
@@ -883,7 +885,7 @@ function Completion() //{{{
return {
// FIXME
- get getKey() this._getKey || function (item, key) item[{ text: 0, description: 1, icon: 2}[key]],
+ get getKey() this._getKey || function (item, key) item[{ text: 0, description: 1, icon: 2 }[key]],
set getKey(getKey) this._getKey = getKey,
setFunctionCompleter: function setFunctionCompleter(funcs, completers)
diff --git a/content/template.js b/content/template.js
index cbd9b764..8abe74a4 100644
--- a/content/template.js
+++ b/content/template.js
@@ -54,19 +54,22 @@ const template = {
},
bookmarkDescription: function (item, text)
- <>
- {text}
- {
- !(item.item.extra.length) ? "" :
-
- }
- >,
+ {
+ let extra = this.getKey(item, "extra");
+ return <>
+ {text}
+ {
+ !(extra && extra.length) ? "" :
+
+ }
+ >
+ },
icon: function (item, text)
{
@@ -183,19 +186,20 @@ const template = {
// every item must have a .xml property which defines how to draw itself
// @param headers is an array of strings, the text for the header columns
- genericTable: function genericTable(headers, items)
+ genericTable: function genericTable(items, format)
{
+ // FIXME: Kludge.
+ let context = new CompletionContext("");
+ context.filterFunc = function (items) items;
+ if (format)
+ context.format = format;
return this.generic(
-
-
+
+ { this.completionRow(context, context.title, "hl-CompTitle") }
{
- headers.reduce(function (prev, cur) prev +
{cur} | , <>>)
+ this.map(items, function (item) template.completionRow(context, { text: context.getKey({item: item}, "text"), item: item }))
}
-
- {
- this.map(items, function (item) item.xml)
- }
-
);
+ );
},
// returns a single row for a bookmark or history item
diff --git a/skin/liberator.css b/skin/liberator.css
index a7c6354c..298910a1 100644
--- a/skin/liberator.css
+++ b/skin/liberator.css
@@ -72,7 +72,11 @@ the terms of any one of the MPL, the GPL or the LGPL.
vertical-align: middle;
}
.td-span {
- height: 1.5em; line-height: 1.5em !important;
+ display: inline-block;
+ overflow: visible;
+ width: 0px;
+ height: 1.5em;
+ line-height: 1.5em !important;
}
.td-strut {
display: inline-block;