home *** CD-ROM | disk | FTP | other *** search
- /* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Places
- *
- * The Initial Developer of the Original Code is Google Inc.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Brett Wilson <brettw@gmail.com> (original author)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
- window.addEventListener("load", BW_startup, false);
-
- var BW_frame;
- var BW_historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"].
- getService(Components.interfaces.nsINavHistoryService);
- var BW_result;
-
- var loadedIframe = false;
- var loadedBretts = false;
-
- function BW_startup() {
- BW_frame = document.getElementById("theframe");
-
- var options = BW_historyService.getNewQueryOptions();
- options.sortingMode = options.SORT_BY_DATE_DESCENDING;
- options.resultType = options.RESULTS_AS_VISIT;
- options.maxResults = 200;
- var query = BW_historyService.getNewQuery();
- BW_result = BW_historyService.executeQuery(query, options);
- BW_result.root.containerOpen = true;
-
- BW_frame.contentWindow.addEventListener("load", BW_fill, true);
- loadedBretts = true;
- if (loadedIframe && loadedBretts)
- BW_fill();
- //BW_frame.onload = BW_fill;
- //BW_frame.contentDocument.onLoad = BW_fill;
- //BW_fill();
- }
-
- function BW_loadiframe() {
- loadedIframe = true;
- if (loadedIframe && loadedBretts)
- BW_fill();
- }
-
-
- function BW_getTLD(host) {
- var count = 0;
- for (var i = host.length - 2; i > 0; i --) {
- if (host[i] == '.') {
- count ++;
- if (count == 2) {
- return host.substr(i + 1);
- }
- }
- }
- return host;
- }
-
- var BW_filled = false;
-
- function BW_fill() {
- if (BW_filled)
- return;
- BW_filled = true;
-
- BW_frame.setAttribute('onload', '');
-
- var container = BW_result.root;
- var length = container.childCount;
- dump("doc = " + BW_frame.contentDocument + "\n");
- var doc = BW_frame.contentDocument;
-
- var ios = Components.classes["@mozilla.org/network/io-service;1"].
- getService(Components.interfaces.nsIIOService);
- var dateformat = Components.classes["@mozilla.org/intl/scriptabledateformat;1"]
- .getService(Components.interfaces.nsIScriptableDateFormat);
-
- var table = doc.createElement('table');
- doc.body.appendChild(table);
-
- var counts = new Array(240);
- for (var i = 0; i < counts.length; i ++) {
- counts[i] = 0;
- }
-
- var now = new Date();
- now.setHours(0);
- now.setMinutes(0);
- now.setSeconds(0);
- now.setMilliseconds(0);
- now.setDate(now.getDate()+1);
- var tonightUS = now.getTime() * 1000;
- var usPerHour = 3600000000;
-
- var previousSession = -1;
- var previousMS = 18437736874454810627;
- var previousHost = "";
- for (var i = 0; i < length; i ++) {
- var child = container.getChild(i);
- child.QueryInterface(Components.interfaces.nsINavHistoryVisitResultNode);
- var session = child.sessionId;
-
- var thisBin = Math.floor((tonightUS - child.time) / usPerHour);
- if (thisBin >= 0 && thisBin < counts.length) {
- counts[thisBin] = counts[thisBin] + 1;
- }
-
- var ms = child.time / 1000;
- var addedTime = false;
- if (previousMS - ms > 600000) {
- addedTime = true;
- var t = new Date(ms);
- var tr = doc.createElement('tr');
- table.appendChild(tr);
- var td = doc.createElement('td');
- td.setAttribute('colspan', '2');
- td.setAttribute('class', 'time');
- tr.appendChild(td);
-
- var timestring = dateformat.FormatDateTime("",
- dateformat.dateFormatShort,
- dateformat.timeFormatNoSeconds,
- t.getFullYear(),
- t.getMonth(),
- t.getDate(),
- t.getHours(),
- t.getMinutes(),
- 0);
- var timetext = doc.createTextNode(timestring);
- td.appendChild(timetext);
- }
- previousMS = ms;
-
- var tr = doc.createElement('tr');
- table.appendChild(tr);
-
- // URL
- var spec;
- var uri;
- try {
- spec = child.uri;
- uri = ios.newURI(spec, null, null);
- } catch(e) {
- spec = null;
- uri = null;
- }
-
- // host name if needed on left
- var td = doc.createElement('td');
- td.setAttribute('valign', 'top');
- td.setAttribute('align', 'right');
- td.setAttribute('class', 'host');
- tr.appendChild(td);
- var host = BW_getTLD(uri.host);
- if (addedTime || host != previousHost) {
- // add host name
- var hosttext = doc.createTextNode(host);
- td.appendChild(hosttext);
- }
- previousHost = host;
-
- // right section
- var td = doc.createElement('td');
- td.setAttribute('valign', 'top');
- tr.appendChild(td);
-
- if (! addedTime && (i == 0 || child.sessionId != previousSession))
- td.setAttribute('class', 'itemnew');
- else
- td.setAttribute('class', 'item');
- previousSession = session;
-
- // title div and text
- var titlediv = doc.createElement('div');
- titlediv.setAttribute('class', 'title');
-
- var imgelt = doc.createElement('img');
- if (child.icon)
- imgelt.setAttribute('src', child.icon.spec);
- else
- imgelt.setAttribute('src', 'chrome://browser/skin/places/defaultFavicon.png');
- imgelt.setAttribute('width', 16);
- imgelt.setAttribute('height', 16);
- imgelt.setAttribute('class', 'favicon');
- titlediv.appendChild(imgelt);
-
- var titletext = doc.createTextNode(child.title);
- titlediv.appendChild(titletext);
- td.appendChild(titlediv);
-
- // URL
- if (spec) {
- /* // this does bold host names
- var host = uri.host;
- var hostStart = spec.indexOf(host);
- if (hostStart >= 0) {
- var prehost = spec.substring(0, hostStart);
- var prehosttext = doc.createTextNode(prehost);
- var posthost = spec.substring(hostStart + host.length, spec.length);
- var posthosttext = doc.createTextNode(posthost);
- var hosttext = doc.createTextNode(host);
-
- var boldElement = doc.createElement('b');
- boldElement.appendChild(hosttext);
-
- var urldiv = doc.createElement('div');
- urldiv.setAttribute('class', 'url');
- urldiv.appendChild(prehosttext);
- urldiv.appendChild(boldElement);
- urldiv.appendChild(posthosttext);
- td.appendChild(urldiv);
- }
- */
- var urldiv = doc.createElement('div');
- urldiv.setAttribute('class', 'url');
- var urltext = doc.createTextNode(spec);
- urldiv.appendChild(urltext);
- td.appendChild(urldiv);
- }
- }
-
- // smooth the counts
- var counts2 = new Array(counts.length);
- for (var i = 0; i < counts.length; i ++) {
- var ttl = 0;
- var acc = 0;
- for (var j = -2; j <= 2; j ++) {
- if (i + j < 0) continue;
- if (i + j >= counts.length) continue;
- var scale;
- if (j == -2 || j == 2) scale = 0.33;
- else if (j == -1 || j == 1) scale = 0.66;
- else scale = 1.0;
- acc += counts[i+j] * scale;
- ttl += scale;
- }
- counts2[i] = Math.round(acc);
- }
-
- // fill in the day bargraphs
- var daylist = document.getElementById("daylist");
- for (var i = 0; i < counts2.length / 24; i ++) {
- var day = document.createElement('hbox');
- day.setAttribute('align', 'center');
- if (i % 2)
- day.setAttribute('class', 'day2');
- else
- day.setAttribute('class', 'day1');
- daylist.appendChild(day);
-
- var text = document.createTextNode("Today - " + i );
- var description = document.createElement('description');
- description.setAttribute('flex', '1');
- description.appendChild(text);
- day.appendChild(description);
-
- var bars = document.createElement('vbox');
- bars.setAttribute('align', 'end');
- day.appendChild(bars);
-
- for (var b = 0; b < 24; b++) {
- var box = document.createElement('hbox');
- box.setAttribute('width', '' + counts2[i*24 + b]);
- box.setAttribute('height', '1');
- box.setAttribute('class', 'green');
- bars.appendChild(box);
- }
- }
- }
-