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) ? "" : - - ({ - template.map(item.item.extra, function (e) - <>{e[0]}: {e[1]}, - <> /* Non-breaking space */) - }) - - } - , + { + let extra = this.getKey(item, "extra"); + return <> + {text}  + { + !(extra && extra.length) ? "" : + + ({ + template.map(extra, function (e) + <>{e[0]}: {e[1]}, + <> /* Non-breaking space */) + }) + + } + + }, 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 +
, <>) + this.map(items, function (item) template.completionRow(context, { text: context.getKey({item: item}, "text"), item: item })) } - - { - this.map(items, function (item) item.xml) - } -
{cur}
); + ); }, // 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;