PK
5 chrome/PK
5!&99 9 chrome.manifestoverlay chrome://browser/content/browser.xul chrome://google-bookmarks-button/content/google-bookmarks-button.xul
content google-bookmarks-button jar:chrome/google-bookmarks-button.jar!/content/google-bookmarks-button/
skin google-bookmarks-button classic jar:chrome/google-bookmarks-button.jar!/skin/classic/google-bookmarks-button/
locale google-bookmarks-button en-US jar:chrome/google-bookmarks-button.jar!/locale/google-bookmarks-button/en-US/
locale google-bookmarks-button ca-AD jar:chrome/google-bookmarks-button.jar!/locale/google-bookmarks-button/ca-AD/
PK
5\' " chrome/google-bookmarks-button.jarPK
5 content/PK
5 content/google-bookmarks-button/PK
5gm ) content/google-bookmarks-button/about.xul
PK
F4-ƭ , content/google-bookmarks-button/contents.rdf
PK
5lh h , content/google-bookmarks-button/dragndrop.jsvar boardObserver = {
id : '',
showMenuPopupTimer : null,
hideMenuPopupTimer : null,
aTarget : null,
getSupportedFlavours : function () {
var flavours = new FlavourSet();
flavours.appendFlavour("application/x-moz-url");
flavours.appendFlavour("text/unicode");
return flavours;
},
onDragCloseMenu : function (node) {
var children = node.childNodes;
for (var i = 0; i < children.length; i++) {
if (children[i].id.indexOf('m_') > -1) {
this.onDragCloseMenu(children[i].firstChild);
children[i].firstChild.hidePopup();
}
}
node.hidePopup();
},
onDragStart: function (evt, transferData){
var url = evt.target.getAttribute('gbb-url');
var title = evt.target.getAttribute('label');
this.id = evt.target.getAttribute('id')
data = url+"\n"+title;
transferData.data = new TransferData();
transferData.data.addDataForFlavour("text/unicode",data);
},
onDragOver: function (evt,session) {
var now = new Date().getTime();
target = evt.target;
switch (target.nodeName) {
case "menuitem":
if (this.showMenuPopupTimer && now - 350 > this.showMenuPopupTimer){
var menuitems = evt.target.parentNode.childNodes;
for (var i=0; i < menuitems.length; i++) {
var mi = menuitems[i];
if(mi.id.indexOf('m_') > -1)
if (mi.id != target.id){
this.onDragCloseMenu(mi.firstChild);
}}
this.aTarget.firstChild.showPopup();
this.showMenuPopupTimer = null; }
else{ }
break;
case "menu":
if (this.showMenuPopupTimer && now - 350 > this.showMenuPopupTimer){
var menuitems = evt.target.parentNode.childNodes;
for (var i=0; i < menuitems.length; i++) {
var mi = menuitems[i];
if(mi.id.indexOf('m_') > -1)
if (mi.id != target.id){
this.onDragCloseMenu(mi.firstChild);
}}
this.aTarget.firstChild.showPopup();
this.showMenuPopupTimer = null; }
else{ }
break;
case "toolbarbutton":
if (this.showMenuPopupTimer && now - 350 > this.showMenuPopupTimer){
this.aTarget.firstChild.showPopup();
this.showMenuPopupTimer = null;
document.getElementById('GBB_bookmark_menupopup').showPopup(); }
else{ }
break;
}
},
onDragEnter: function (evt,session){
target = evt.target;
switch (target.nodeName) {
case "toolbarbutton":
var now = new Date().getTime();
this.showMenuPopupTimer = now;
this.aTarget = target;
//document.getElementById('GBB_add_to_new_folder').style.display = 'block';
break;
case "menu":
//document.getElementById('GBB_add_to_new_folder').style.display = 'block';
//target.style.borderBottom = "1px solid #000000";
var menuitems = document.getElementById('GBB_bookmark_menupopup').childNodes;
var now = new Date().getTime();
this.showMenuPopupTimer = now;
this.aTarget = target;
break;
case "menuitem":
//document.getElementById('GBB_add_to_new_folder').style.display = 'block';
if (target.parentNode.id == "GBB_bookmark_menupopup") {
var now = new Date().getTime();
this.showMenuPopupTimer = now;
this.aTarget = target;
break;}
default:
window.dump("in: "+target.nodeName+"\n");
}
},
onDragExit: function (evt) {
target = evt.target;
switch (target.nodeName) {
case "menu": {
//target.firstChild.hidePopup();
break; }
}
},
onDrop: function (evt,dropdata){
if (dropdata.data != "") {
target = evt.target;
var data = dropdata.data.split("\n");
var notes = gbb_BookmarkArray.getBookmarkById(this.id).notes;
if (data[1]) {
switch (target.nodeName) {
case "toolbarbutton": {
if (evt.ctrlKey)
GBB.GBB_onAddBookmark(data[1], data[0], evt);
else
GBB.GBB_onQuickAddBookmark(evt, data[1], data[0], '', notes);
break; }
case "menuitem": {
var labels = '';
if (target.id == 'GBB_add_to_new_folder') {
newLabelDialog = new GBB_newLabelDialog();
newLabelDialog.onOpen(data[0], data[1]); }
else if(target.parentNode.id.indexOf('mp_') > -1) {
labels = target.parentNode.parentNode.getAttribute('gbb-label');//id.substr(3,target.parentNode.id.length)
if (evt.ctrlKey)
GBB.GBB_onQuickAddBookmark(evt, data[1], data[0], labels+','+gbb_BookmarkArray.getLabelsByUrl(data[0]), notes);
else
GBB.GBB_onQuickAddBookmark(evt, data[1], data[0], labels);
target.parentNode.hidePopup(); }
else {
GBB.GBB_onQuickAddBookmark(evt, data[1], data[0], '', notes); }
break; }
case "menu": {
var labels = '';
if(target.id.indexOf('m_') > -1) {
labels = target.getAttribute('gbb-label');//id.substr(2,target.id.length)
if (evt.ctrlKey)
GBB.GBB_onQuickAddBookmark(evt, data[1], data[0], labels+','+gbb_BookmarkArray.getLabelsByUrl(data[0]), notes);
else
GBB.GBB_onQuickAddBookmark(evt, data[1], data[0], labels, notes);
target.parentNode.hidePopup(); }
else
GBB.GBB_onQuickAddBookmark(evt, data[1], data[0], '', notes);
break; }
}
}
closeMenus(target); }
}
};
PK
ؑ5Ɯ4 . content/google-bookmarks-button/gbb-objects.jsfunction inArray (array, value) {
var i;
for (i=0; i < array.length; i++) {
if (array[i] === value) {
return true;
}
}
return false;
};
function gbb_Bookmark (id, url, title, labels, notes) {
this.id = id;
this.url = url;
this.title = title;
this.labels = labels;
this.notes = notes;
}
function BookmarkArray() {}
BookmarkArray.prototype = [];
BookmarkArray.prototype.getBookmarkById = function(id){
var i;
for (i=0; i < this.length; i++)
if (this[i].id == id)
return this[i];
return false; }
BookmarkArray.prototype.getBookmarksByLabel = function(label) {
var i, j;
var ret = new Array();
var label = label;
for (i=0; i < this.length; i++)
for (j=0; j < this[i].labels.length; j++)
if (this[i].labels[j] == label)
ret.push(this[i]);
return ret;}
BookmarkArray.prototype.getLabelsByUrl = function(url, f) {
var i;
var func = f ? f : function(a) { ret = a; }
ret = new Array;
for (i=0; i < this.length; i++)
if (this[i].url == url)
func(this[i].labels);
return ret;}
BookmarkArray.prototype.getNotesByUrl = function(url) {
var i;
var ret = '';
for (i=0; i < this.length; i++)
if (this[i].url == url)
ret = this[i].notes;
return ret;}
BookmarkArray.prototype.getLabels = function(str, f) {
var i, j;
var func = f ? f : function(a) { ret.push(a); }
var str = str ? str : '';
ret = new Array();
for (i=0; i < this.length; i++)
for (j=0; j < this[i].labels.length; j++)
if (this[i].labels[j].indexOf('^') == -1 && !inArray(ret, this[i].labels[j])) {
var aux_str = this[i].labels[j].toUpperCase();
if (aux_str.indexOf(str.toUpperCase()) == 0)
func(this[i].labels[j]);
}
return ret;}
BookmarkArray.prototype.isBookmarked = function(url) {
var i;
for (i=0; i < this.length; i++)
if (this[i].url == url)
return this[i].id;
return false;}
BookmarkArray.prototype.renameLabel = function(label, newlabel) {
var i, j;
var label = label;
for (i=0; i < this.length; i++)
for (j=0; j < this[i].labels.length; j++)
if (this[i].labels[j] == label)
if (newlabel == '')
this[i].labels.splice(j, 1);
else
this[i].labels[j] = newlabel;
}
PK
g5 g9 9 A content/google-bookmarks-button/google-bookmarks-add-bookmark.xul
PK
C5JC*S S C content/google-bookmarks-button/google-bookmarks-button-settings.jsvar gbbPrefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefService).getBranch("gbb.");
var gbbSettings = {
onLoad: function() {
this.orderby = document.getElementById("orderby");
this.orderby.value = gbbPrefs.getCharPref("orderby");
this.enableExperimentalFeatures = document.getElementById("enableExperimentalFeatures");
this.enableExperimentalFeatures.checked = gbbPrefs.getBoolPref("enableExperimentalFeatures");
if (this.enableExperimentalFeatures.checked)
window.document.getElementById('test').style.display='';
else
window.document.getElementById('test').style.display='none';
sizeToContent();
this.labelHierarchySeparator = document.getElementById("labelHierarchySeparator");
this.labelHierarchySeparator.value = gbbPrefs.getCharPref("labelHierarchySeparator");
this.enableFavicons = document.getElementById("enableFavicons");
this.enableFavicons.checked = gbbPrefs.getBoolPref("enableFavicons");
this.enableFavicons = document.getElementById("enableLabelHierarchy");
this.enableFavicons.checked = gbbPrefs.getBoolPref("enableLabelHierarchy");
window.document.getElementById('labelHierarchySeparator').disabled = !this.enableFavicons.checked;
},
onAccept: function() {
this.orderby = document.getElementById("orderby").value;
this.enableExperimentalFeatures = document.getElementById("enableExperimentalFeatures").checked;
this.labelHierarchySeparator = document.getElementById("labelHierarchySeparator").value;
this.enableFavicons = document.getElementById("enableFavicons").checked;
this.enableLabelHierarchy = document.getElementById("enableLabelHierarchy").checked;
gbbPrefs.setCharPref("orderby",this.orderby);
gbbPrefs.setBoolPref("enableExperimentalFeatures",this.enableExperimentalFeatures);
gbbPrefs.setCharPref("labelHierarchySeparator",this.labelHierarchySeparator);
gbbPrefs.setBoolPref("enableFavicons",this.enableFavicons);
gbbPrefs.setBoolPref("enableLabelHierarchy",this.enableLabelHierarchy);
Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefService).savePrefFile(null);
},
onCancel: function() {},
}
PK
5{GC5
5
D content/google-bookmarks-button/google-bookmarks-button-settings.xul
PK
"5P@O : content/google-bookmarks-button/google-bookmarks-button.js// Popup: http://www.google.com/bookmarks/mark?output=popup&bkmk={URL}&title={TITULO}&labels={ETIQUETAS SEPARADAS POR COMAS}&annotation={NOTAS}&q=is:bookmarked&btnA=Save&s=c93LAhmgsTmfnyWR5BJxNg
// Bookmark: http://www.google.com/bookmarks/mark?q={URL}&title={TITULO}&{ETIQUETAS SEPARADAS POR COMAS}&annotation={NOTAS}&sig={KEY}
// Unbookmark: http://www.google.com/bookmarks/mark?dlq={IDENTIFICADOR}&sig={KEY}
var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
.getService(Components.interfaces.nsICookieManager);
var gbb_menu_isset = false;
var gbb_dom = null;
var gbb_isSigned = false;
var req;
var addBookmarkDialog;
var renameLabelDialog;
var newLabelDialog;
var GBB_refreshInterval = null;
//var gbb_BookmarkArray;
function dumpDebug(str) {
var enableWindowDump = GBB.gbbPrefs.getBoolPref("enableWindowDump");
if (enableWindowDump)
window.dump(str);
}
// XXX This code was taken from http://www.worldtimzone.com/res/encode/
function utf8(wide) {
var c, s;
var enc = "";
var i = 0;
while(i=0xDC00 && c<0xE000) continue;
if (c>=0xD800 && c<0xDC00) {
if (i>=wide.length) continue;
s= wide.charCodeAt(i++);
if (s<0xDC00 || c>=0xDE00) continue;
c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
}
// output value
if (c<0x80) enc += String.fromCharCode(c);
else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
}
return enc;
}
function unescapeHTML(s) {
if (s) {
s = s.replace(/"/g, "\"");
s = s.replace(/&/g, "&");
s = s.replace(/'/g, "'");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
}
return s; }
function escapeHTML(s) {
s = s.replace(/\\/g, """);
s = s.replace(/&/g, "&");
s = s.replace(/\'/g, "'");
s = s.replace(//g, ">");
return s; }
function GBB_checkSignedCookie() {
var i = cookieManager.enumerator;
//dumpDebug("Checking cookie... ")
while (i.hasMoreElements()){
var cookie = i.getNext();
if (cookie instanceof Components.interfaces.nsICookie){
if (cookie.host == ".google.com")
if (cookie.name == "SID") {
//dumpDebug("signed in\n")
return true;
}
}
}
//dumpDebug("not signed in\n")
return false;
}
function faviconURIChecker (img, id) {
this.img = img;
this.id = id;
}
faviconURIChecker.prototype = {
onStartRequest: function(request, context) {},
onStopRequest: function(request, context, status) {
var GBB_item = document.getElementById(this.id);
if (status == 0 && GBB_item) {
GBB_item.setAttribute('image', this.img.spec);
}
}
}
var GBB = {
gbbPrefs : null,
locale_strings : null,
GBB_onLoad : function() {
this.locale_strings = document.getElementById('gbb_locale_strings');
this.gbbPrefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefService).getBranch("gbb.");
this.gbbPrefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
this.gbbPrefs.addObserver('', this, false);
if (!this.gbbPrefs.prefHasUserValue("orderby")) this.gbbPrefs.setCharPref("orderby", "date");
if (!this.gbbPrefs.prefHasUserValue("enableExperimentalFeatures")) this.gbbPrefs.setBoolPref("enableExperimentalFeatures", false);
if (!this.gbbPrefs.prefHasUserValue("labelHierarchySeparator")) this.gbbPrefs.setCharPref("labelHierarchySeparator","/");
if (!this.gbbPrefs.prefHasUserValue("enableWindowDump")) this.gbbPrefs.setBoolPref("enableWindowDump", false);
if (!this.gbbPrefs.prefHasUserValue("refreshIntervalMinutes")) this.gbbPrefs.setIntPref("refreshIntervalMinutes", 10);
if (!this.gbbPrefs.prefHasUserValue("enableFavicons")) this.gbbPrefs.setBoolPref("enableFavicons", false);
if (!this.gbbPrefs.prefHasUserValue("enableLabelHierarchy")) this.gbbPrefs.setBoolPref("enableLabelHierarchy", false);
document.getElementById('contentAreaContextMenu').addEventListener('popupshowing', function(e) { GBB.GBB_onContextMenuShowing() }, false);
document.getElementById('GBB_bookmark_menupopup').setAttribute('gbb-hidden', 'true');
this.GBB_getBookmarksFeed();
var gbb_tabbox = getBrowser().mTabBox;
gbb_tabbox.addEventListener("load", this.GBB_checkIfPageIsBookmarked, true);
gbb_tabbox.addEventListener("select", this.GBB_checkIfPageIsBookmarked, true);
gbb_tabbox.addEventListener("pageshow", this.GBB_checkIfPageIsBookmarked, true);
// Sets an interval (defined by refreshIntervalMinutes) for refreshing the feed
var refreshIntervalMinutes = this.gbbPrefs.getIntPref("refreshIntervalMinutes");
if (refreshIntervalMinutes < 5) refreshIntervalMinutes = 5;
GBB_refreshInterval = window.setTimeout('GBB.GBB_onRefresh()', refreshIntervalMinutes*60000);
// Here we localize the description on startup
var GBB_LocalizationPrefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefService).getBranch("extensions.{0dad0080-ca5a-11da-a94d-0800200c9a66}.");
var str = Components.classes[ "@mozilla.org/supports-string;1" ].createInstance( Components.interfaces.nsISupportsString );
str.data = this.locale_strings.getString('GBB_description');
GBB_LocalizationPrefs.setComplexValue( "description", Components.interfaces.nsISupportsString, str );
},
observe : function (subject, topic, data) {
if (topic != "nsPref:changed")
return;
this.GBB_onRefresh(false);
},
GBB_onContextMenuShowing : function (e) {
var popupnode = document.popupNode;
var nodeLocalName = popupnode.localName.toLowerCase();
dumpDebug(nodeLocalName+"\n");
if (nodeLocalName != "a") {
document.getElementById('contextGBBbookmarkpage').hidden = true;
}else{
document.getElementById('contextGBBbookmarkpage').hidden = false;
}
},
GBB_getBookmarksFeed : function () {
gbb_isSigned = GBB_checkSignedCookie();
if (!gbb_dom && gbb_isSigned && !req) {
req = new XMLHttpRequest();
var orderby = this.gbbPrefs.getCharPref("orderby");
/* Since Bookmark annotations are only in the RSS feed and not in the XML one,
and Bookmark IDs are only in the XML feed I need to get the two files
and merge them into one big bookmark array with all the data.
Dear Google guys, please add annotations to the XML feed or IDs to the RSS one
*/
req.open("GET", "http://www.google.com/bookmarks/lookup?output=xml&num=10000", true);
req.send(null);
dumpDebug("XML: Connecting... \n");
req.onerror = function(ev) { dumpDebug("Error!\n"); }
req.onreadystatechange = function(ev) {
dumpDebug("XML: Status: "+req.readyState+"\n");
if(req.readyState == 4) {
var status = -1;
try { status = req.status }
catch(e) { dumpDebug(e+"\n"); }
if(status == 200) {
dumpDebug("XML: Connection worked! ("+req.status+")\n")
if (gbb_dom = req.responseXML) {
var gbb_items = gbb_dom.documentElement.getElementsByTagName('bookmark');
for (var i = 0; i < gbb_items.length; i++) {
var gbb_auxBookmark = new gbb_Bookmark();
gbb_auxBookmark.labels = [];
gbb_auxBookmark.id = gbb_items[i].getElementsByTagName('id')[0].childNodes[0].nodeValue;
gbb_auxBookmark.url = gbb_items[i].getElementsByTagName('url')[0].childNodes[0].nodeValue;
gbb_auxBookmark.title = gbb_items[i].getElementsByTagName('title')[0] ? gbb_items[i].getElementsByTagName('title')[0].childNodes[0].nodeValue : gbb_auxBookmark.url;
//gbb_auxBookmark.notes = '';
var auxLabelsArray = gbb_items[i].getElementsByTagName('label');
for (var j = 0; j < auxLabelsArray.length; j++)
if (auxLabelsArray[j].childNodes[0].nodeValue.indexOf('^') == -1){
//dumpDebug("Adding label '"+auxLabelsArray[j].childNodes[0].nodeValue+"' to '"+gbb_auxBookmark.title+"'\n");
gbb_auxBookmark.labels.push(auxLabelsArray[j].childNodes[0].nodeValue);}
gbb_BookmarkArray.push(gbb_auxBookmark);
}
req.open("GET", "http://www.google.com/bookmarks/lookup?output=rss&num=10000", true);
req.send(null);
dumpDebug("RSS: Connecting... \n");
req.onreadystatechange = function(ev) {
dumpDebug("RSS: Status: "+req.readyState+"\n");
if(req.readyState == 4) {
var status = -1;
try { status = req.status }
catch(e) { dumpDebug(e); }
if(status == 200) {
dumpDebug("RSS: Connection worked! ("+req.status+")\n")
if (gbb_dom2 = req.responseXML) {
var gbb_items = gbb_dom2.documentElement.getElementsByTagName('item');
for (var i = 0; i < gbb_items.length; i++) {
try { gbb_BookmarkArray[i].notes = gbb_items[i].getElementsByTagName('bkmk_annotation')[0].childNodes[0].nodeValue; }
catch(e){ gbb_BookmarkArray[i].notes = ''; };
}
GBB.GBB_generateBookmarkMenuPopup();
GBB.GBB_checkIfPageIsBookmarked();
}else{
dumpDebug("RSS: Error while getting the bookmark feed\n"); }
}else{
dumpDebug("RSS: Connection with the server failed ("+req.status+")\n"); }
}
}
}else{
dumpDebug("XML: Error while getting the bookmark feed\n");
}
}else{
dumpDebug("XML: Connection with the server failed ("+req.status+")\n")
}
}
}
}
},
GBB_onRefresh : function(getDataFeed) {
var getDataFeed = getDataFeed != null ? getDataFeed : true;
var bookmarkMenuPopup = document.getElementById('GBB_bookmark_menupopup');
var separator = null;
bookmarkMenuPopup.hidePopup();
dumpDebug("Refresh!\n");
if (separator = document.getElementById('GBB_menu_separator')) {
var aux = separator.nextSibling;
while (aux.id != 'GBB_menu_separator_end') {
bookmarkMenuPopup.removeChild(aux);
aux = separator.nextSibling; }
bookmarkMenuPopup.removeChild(document.getElementById('GBB_menu_separator'));
bookmarkMenuPopup.removeChild(document.getElementById('GBB_menu_separator_end'));
}
gbb_menu_isset = false;
if (getDataFeed) {
gbb_BookmarkArray = new BookmarkArray();
gbb_dom = null;
gbb_dom2 = null;
req = null;
var refreshIntervalMinutes = this.gbbPrefs.getIntPref("refreshIntervalMinutes");
if (refreshIntervalMinutes < 5) refreshIntervalMinutes = 5;
window.clearTimeout(GBB_refreshInterval);
GBB_refreshInterval = window.setTimeout('GBB.GBB_onRefresh()', refreshIntervalMinutes*60000);
GBB.GBB_getBookmarksFeed();
}else{
GBB.GBB_generateBookmarkMenuPopup();
}
},
GBB_checkIfPageIsBookmarked : function(event) {
if (window.content.location.href == 'http://toolbar.google.com/command?close_browser')
window.close();
var bookmarkButton = document.getElementById('GBB_bookmark_button');
var bookmarkThisPageMenu = document.getElementById('GBB_bookmark_this_page')
var removeThisBookmarkMenu = document.getElementById('GBB_remove_bookmark');
var bookmarkId;
//if (event) dumpDebug("Event: "+event.type+"\n");
if (gbb_isSigned != GBB_checkSignedCookie()) GBB.GBB_onRefresh();
if (gbb_isSigned) {
theUrl = window.content.location.href;
if (bookmarkId = gbb_BookmarkArray.isBookmarked(theUrl)) {
//dumpDebug("Is a bookmark\n");
bookmarkButton.setAttribute('image', 'chrome://google-bookmarks-button/skin/book_on.gif');
bookmarkButton.setAttribute('tooltiptext', GBB.locale_strings.getString('GBB_bookmark_button_remove.label'));
bookmarkThisPageMenu.setAttribute('label', GBB.locale_strings.getString('GBB_bookmark_button_edit.label'));
bookmarkThisPageMenu.setAttribute('tooltiptext', GBB.locale_strings.getString('GBB_bookmark_button_edit.tooltip'));
removeThisBookmarkMenu.style.display = 'block';
removeThisBookmarkMenu.setAttribute('oncommand', 'GBB.GBB_onRemoveBookmark("'+bookmarkId+'")'); }
else {
//dumpDebug("Is not a bookmark\n");
bookmarkButton.setAttribute('image', 'chrome://google-bookmarks-button/skin/book_off.gif');
bookmarkButton.setAttribute('tooltiptext', GBB.locale_strings.getString('GBB_bookmark_button.tooltip'));
bookmarkThisPageMenu.setAttribute('label', GBB.locale_strings.getString('GBB_bookmark_button.label'));
bookmarkThisPageMenu.setAttribute('tooltiptext', GBB.locale_strings.getString('GBB_bookmark_button.tooltip'));
removeThisBookmarkMenu.style.display = 'none'; }
}else{
bookmarkButton.setAttribute('image', 'chrome://google-bookmarks-button/skin/book_off.gif');
bookmarkButton.setAttribute('tooltiptext', GBB.locale_strings.getString('GBB_bookmark_button.tooltip'));
}
},
GBB_onStarClicked : function(e) {
var bookmarkId;
var theUrl = window.content.location.href;
if (!gbb_isSigned)
GBB.GBB_onSignIn(e);
else if (e.ctrlKey)
if (bookmarkId = gbb_BookmarkArray.isBookmarked(theUrl))
GBB.GBB_onEditBookmark(e, bookmarkId);
else
GBB.GBB_onAddBookmark();
else if (bookmarkId = gbb_BookmarkArray.isBookmarked(theUrl))
GBB.GBB_onRemoveBookmark(bookmarkId);
else
GBB.GBB_onQuickAddBookmark(e); },
GBB_onLinkContext : function(e) {
var bookmarkId;
var url = 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL() : gContextMenu.linkURL();
var title = gContextMenu.linkText();
if (!gbb_isSigned)
GBB.GBB_onSignIn(e);
else if (bookmarkId = gbb_BookmarkArray.isBookmarked(url))
GBB.GBB_onEditBookmark(e, bookmarkId);
else
GBB.GBB_onAddBookmark(title, url);
},
GBB_onAddBookmark : function(title, url) {
var theUrl = url ? url : window.content.location.href;
var docTitle = title ? title : window.content.document.title;
document.getElementById('GBB_bookmark_menupopup').hidePopup();
addBookmarkDialog = new GBB_addBookmarkDialog();
addBookmarkDialog.onOpen(theUrl, docTitle);
/*
var a = window, b=document;
var c = encodeURIComponent;
var theUrl = url ? url : window.content.location.href;
var docTitle = title ? title : window.content.document.title;
var width = 550;
var height = 420;
var left = Math.floor( (screen.width - width) / 2);
var top = Math.floor( (screen.height - height) / 2);
window.open('http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk='+c(theUrl)+'&title='+c(docTitle),'bkmk_popup','left='+left+',top='+top+',height='+height+'px,width='+width+'px,resizable=1');
*/
},
GBB_onQuickAddBookmark : function(event, title, url, labels, notes) {
var theUrl = url ? url : window.content.location.href;
var docTitle = title ? title : window.content.document.title;
var labels = labels ? labels : '';
var notes = notes ? notes : '';
var req = new XMLHttpRequest();
req.open("POST", 'http://www.google.com/bookmarks/mark', true);
req.send('q='+encodeURIComponent(theUrl)+'&title='+encodeURIComponent(docTitle)+'&labels='+labels+'&annotation='+encodeURIComponent(notes));
// Asyncronous connection with the Google Bookmarks server
dumpDebug("Sending request to add bookmark... \n");
req.onreadystatechange = function(ev) {
dumpDebug("Status: "+req.readyState+"\n");
if(req.readyState == 4) {
var status = -1;
try { status = req.status }
catch(e) { alert(e); }
if(status == 200) {
dumpDebug("Bookmark added! ("+req.status+")\n")
GBB.GBB_onRefresh(); }
else{
alert("An error occurred while adding the bookmark"); }
}
}
},
GBB_onRemoveBookmark : function(id) {
document.getElementById('GBB_bookmark_menupopup').hidePopup();
// XXX String not localized
if(!confirm(this.locale_strings.getString('GBB_bookmark_remove_bookmark.confirm_box.before')+" \""+ gbb_BookmarkArray.getBookmarkById(id).title +"\""+this.locale_strings.getString('GBB_bookmark_remove_bookmark.confirm_box.after')))
return;
var req = new XMLHttpRequest();
// Asyncronous connection with the Google Bookmarks server
req.open("POST", 'http://www.google.com/bookmarks/mark', true);
req.send('dlq='+id);
dumpDebug("Sending request to remove bookmark... \n");
req.onreadystatechange = function(ev) {
dumpDebug("Status: "+req.readyState+"\n");
if(req.readyState == 4) {
var status = -1;
try { status = req.status }
catch(e) { alert(e); }
if(status == 200) {
dumpDebug("Bookmark removed! ("+req.status+")\n")
GBB.GBB_onRefresh(); }
else {
alert("An error occurred while removing the bookmark"); }
}
}
GBB.GBB_onRefresh();
},
GBB_onOpenRenameLabelDialog : function (label, event) {
document.getElementById('GBB_bookmark_menupopup').hidePopup();
renameLabelDialog = new GBB_renameLabelDialog();
renameLabelDialog.onOpen(label);
},
GBB_onAcceptRenameLabel : function(labelName, newLabelName, event) {
document.getElementById('GBB_bookmark_menupopup').hidePopup();
var labelName = labelName;
var labelNewName = newLabelName;
if (newLabelName == '')
if(!confirm(this.locale_strings.getString('GBB_bookmark_remove_label.confirm_box.before')+" \""+labelName+"\""+this.locale_strings.getString('GBB_bookmark_remove_label.confirm_box.after')))
return;
var req = new XMLHttpRequest();
// Asyncronous connection with the Google Bookmarks server
req.open("POST", 'http://www.google.com/bookmarks/mark', true);
req.send('op=modlabel&labels='+labelName+','+labelNewName);
dumpDebug("Sending request to rename label... \n");
req.onreadystatechange = function(ev) {
dumpDebug("Status: "+req.readyState+"\n");
if(req.readyState == 4) {
var status = -1;
try { status = req.status }
catch(e) { dumpDebug(e); }
if(status == 200) {
gbb_BookmarkArray.renameLabel(labelName, newLabelName);
dumpDebug("Label renamed! ("+req.status+")\n")
GBB.GBB_onRefresh(false); }
else{
alert("An error occurred while adding the bookmark ("+req.status+")"); }
}
}
},
GBB_onImport : function(event) {
try {
var bkmkService = Components.classes["@mozilla.org/browser/bookmarks-service;1"].getService();
var xmlBody = "";
bkmkService.QueryInterface(Components.interfaces.nsIBookmarksService);
bkmkResources = bkmkService.GetAllResources();
var i = 0;
while (bkmkResources.hasMoreElements()) {
var urlRes = bkmkResources.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
var dataParent = RDF.GetDataSource("rdf:bookmarks").getParent(urlRes);
if (dataParent) {
var parentName = BookmarksUtils.getProperty(dataParent.Value, "http://home.netscape.com/NC-rdf#Name");
var parentType = BookmarksUtils.resolveType(dataParent);
}
var targetUrl = RDF.GetDataSource("rdf:bookmarks").GetTarget(urlRes, RDF.GetResource("http://home.netscape.com/NC-rdf#URL"), true);
var targetName = RDF.GetDataSource("rdf:bookmarks").GetTarget(urlRes, RDF.GetResource("http://home.netscape.com/NC-rdf#Name"), true);
if (targetUrl && targetName) {
var url = targetUrl.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
var name = targetName.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
if (parentType == "Folder") {
i++;
dumpDebug("+-"+i+" "+escapeHTML(utf8(name))+" ("+escapeHTML(utf8(url))+")"+"\n");
dumpDebug(" \\--"+i+" "+parentType+" ("+parentName+")"+"\n");
xmlBody += ''
xmlBody += ''+escapeHTML(utf8(url))+''+escapeHTML(utf8(name))+'';
xmlBody += '';
xmlBody += '';
}
}
}
}catch (e) { dumpDebug('!'+e); }
var req = new XMLHttpRequest();
var xml = ''+xmlBody+'';
s = "\r\n"+xml;
var cLength = parseInt(xml.length);
h = "Content-length: "+cLength+"\r\nCache-Control: no-cache\r\nContent-Type: application/xml\r\nPragma: no-cache\r\n";
j = h+s;
dumpDebug(j);
var obj, a, b, postdata, headerdata;
obj = Components.classes["@mozilla.org/io/string-input-stream;1"];
a = Components.interfaces.nsIStringInputStream;
b = Components.interfaces.nsIStringInputStream;
postdata = obj.createInstance(a);
postdata.setData(j, j.length);
headerdata = obj.createInstance(a);
headerdata.setData(h, h.length);
try {
var nav = getWebNavigation();
nav.loadURI("http://www.google.com/bookmarks/mark?op=upload", 0, null, postdata, null);
} catch (e) {
alert('error!');
}
// Asyncronous connection with the Google Bookmarks server
/*
req.open("POST", 'http://www.google.com/bookmarks/mark?op=upload', true);
req.send(xml);
dumpDebug("Sending request to import bookmarks... \n");
req.onreadystatechange = function(ev) {
dumpDebug("Status: "+req.readyState+"\n");
if(req.readyState == 4) {
var status = -1;
try {
status = req.status }
catch(e) {
}
if(status == 200) {
window.content.document.write(req.responseText);
dumpDebug("Text: "+req.getAllResponseHeaders()+"\n");
dumpDebug("Text: "+req.responseText+"\n");
dumpDebug("Bookmarks imported! ("+req.status+")\n") }
else {
alert("An error occurred while importing the bookmark"); }
}
} */
},
GBB_onSignIn : function(event) {
var a = window, b=document;
var c = encodeURIComponent;
var width = 340;
var height = 305;
var left = Math.floor( (screen.width - width) / 2);
var top = Math.floor( (screen.height - height) / 2);
//window.open('https://www.google.com/accounts/ServiceLogin?service=toolbar&nui=1&rm=hide&fpc=1&hl=en&continue=http%3A%2F%2Ftoolbar.google.com%2Fcommand%3Fclose_browser','bkmk_popup','left='+left+',top='+top+',height='+height+'px,width='+width+'px,resizable=1');
window.open('https://www.google.com/accounts/ServiceLogin?service=toolbar&nui=1&hl=en&continue=http%3A%2F%2Ftoolbar.google.com%2Fcommand%3Fclose_browser','bkmk_popup','left='+left+',top='+top+',height='+height+'px,width='+width+'px,resizable=1');
},
GBB_onEditBookmark : function(event, id) {
// var theUrl = url;
// var docTitle = title ? title : window.content.document.title;
var bookmark = gbb_BookmarkArray.getBookmarkById(id)
var target = event.target;
document.getElementById('GBB_bookmark_menupopup').hidePopup();
addBookmarkDialog = new GBB_addBookmarkDialog('edit');
addBookmarkDialog.onOpen(bookmark.url, bookmark.title);
/*
var width = 550;
var height = 420;
var left = Math.floor( (screen.width - width) / 2);
var top = Math.floor( (screen.height - height) / 2);
document.getElementById('GBB_bookmark_menupopup').hidePopup();
window.open('http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk='+encodeURIComponent(theUrl),'bkmk_popup','left='+left+',top='+top+',height='+height+'px,width='+width+'px,resizable=1');
*/
},
GBB_onManageBookmarks : function (event) {
var url = "http://www.google.com/bookmarks/";
event.preventBubble();
openUILink(url, event, false, true);
closeMenus(event.target); },
GBB_onCommandBookmark : function (url, event) {
var btnCode = event.button;
var contextMenu = document.getElementById('gbb-bookmarks-context-menu');
dumpDebug("Button: "+event.button+"\n");
dumpDebug("Button: "+url+"\n");
if (btnCode == 2) {
contextMenu.childNodes[0].setAttribute('oncommand', "openUILinkIn('"+url+"', 'current'); document.getElementById('GBB_bookmark_menupopup').hidePopup();");
contextMenu.childNodes[1].setAttribute('oncommand', "openUILinkIn('"+url+"', 'window'); document.getElementById('GBB_bookmark_menupopup').hidePopup();");
contextMenu.childNodes[2].setAttribute('oncommand', "openUILinkIn('"+url+"', 'tab'); document.getElementById('GBB_bookmark_menupopup').hidePopup();");
//contextMenu.childNodes[4].setAttribute('oncommand', "GBB.GBB_onEditBookmark(event, '"+url+"')");
contextMenu.childNodes[4].setAttribute('oncommand', "GBB.GBB_onEditBookmark(event, '"+event.currentTarget.getAttribute('id')+"')");
contextMenu.childNodes[5].setAttribute('oncommand', "GBB.GBB_onRemoveBookmark('"+event.currentTarget.getAttribute('id')+"')"); }
else{
openUILink(url, event, false, true);
closeMenus(event.target); }
},
GBB_onCommandLabel : function (event) {
btnCode = event.button;
var label = event.target.getAttribute('gbb-label');
switch (btnCode) {
case 1:
GBB.GBB_onOpenInTabs(label, event);
break;
case 2:
document.getElementById('gbb-labels-context-menu').childNodes[0].setAttribute('oncommand', "GBB.GBB_onOpenInTabs('"+label+"', event);");
document.getElementById('gbb-labels-context-menu').childNodes[2].setAttribute('oncommand', "GBB.GBB_onOpenRenameLabelDialog('"+label+"', event);");
document.getElementById('gbb-labels-context-menu').childNodes[3].setAttribute('oncommand', "GBB.GBB_onAcceptRenameLabel('"+label+"', '', event);");
break;
}
},
GBB_onOpenInTabs : function (label, event) {
var labelArray = new Array();
var btnCode = event.button;
dumpDebug("Button: "+event.button+"\n");
labelArray = gbb_BookmarkArray.getBookmarksByLabel(label);
for (var i = 0; i < labelArray.length; i++)
openUILinkIn(labelArray[i].url, "tabshifted");
document.getElementById('GBB_bookmark_menupopup').hidePopup();
},
GBB_generateMenuItems : function () {
// XXX Thanks to Dustin Crockett for the hierarchy code
//dumpDebug("Made to generate Menu Items\n");
var orderby = this.gbbPrefs.getCharPref("orderby");
var enableExperimentalFeatures = this.gbbPrefs.getBoolPref("enableExperimentalFeatures");
var enableLabelHierarchy = this.gbbPrefs.getBoolPref("enableLabelHierarchy");
var labelHierarchySeparator = this.gbbPrefs.getCharPref("labelHierarchySeparator");
var labelsArray = gbb_BookmarkArray.getLabels();
var gbb_labels = gbb_dom.documentElement.getElementsByTagName('label');
var s1 = document.createElement('menuseparator');
var s2 = document.createElement('menuseparator');
var r = document.getElementById('GBB_refresh')
function create_menu(b) {
var root_menu;
// XXX To disable the hierarchy use a comma or null as the separator character
if (enableLabelHierarchy)
var separator = labelHierarchySeparator;
else
var separator = ',';
var parent_label = b.substr(0,b.lastIndexOf(separator));
//dumpDebug("checking to make sure --"+parent_label+"-- has been created for --"+b+"--\n");
if ((!document.getElementById('mp_'+parent_label)) && (parent_label != '') && (parent_label != b)) {
//dumpDebug("Creating_menu "+parent_label+"\n");
create_menu(parent_label);
//dumpDebug("created_menu "+parent_label+"\n");
}
if (parent_label == '' || parent_label == b) {
root_menu = 'true';
//dumpDebug("parent is null or equal to b\n");
var current_label = b;
} else {
root_menu = 'false';
//dumpDebug("parent is not null and not equal to b\n");
var current_label = b.substr(b.lastIndexOf(separator)+1);
}
//dumpDebug("getting ready to create element\n");
if (!document.getElementById('mp_'+b)) {
var m = document.createElement('menu');
var mp = document.createElement('menupopup');
m.setAttribute('label', unescapeHTML(current_label));
m.setAttribute('context', 'gbb-labels-context-menu');
m.setAttribute('container', 'true');
m.setAttribute('class', 'menu-iconic bookmark-item');
m.setAttribute('id', 'm_'+b);
m.setAttribute('gbb-label', b);
m.setAttribute('onclick', 'GBB.GBB_onCommandLabel(event);');
m.setAttribute('oncommand', ' GBB.GBB_onCommandLabel(event);');
mp.setAttribute('id', 'mp_'+b);
m.appendChild(mp);
if (root_menu == 'true') {
//dumpDebug("Creating menu '"+b+"'\n");
document.getElementById('GBB_bookmark_menupopup').insertBefore(m, document.getElementById('GBB_menu_separator_end'));
//dumpDebug("inserted element on root\n");
} else {
dumpDebug("getting ready to insert element --mp_"+parent_label+"--\n");
document.getElementById('mp_'+parent_label).appendChild (m);
//dumpDebug("inserted element --mp_"+parent_label+"--\n");
}
}
//document.getElementById('GBB_bookmark_menupopup').appendChild(m); }
//document.getElementById('GBB_bookmark_menupopup').insertBefore(m, document.getElementById('GBB_menu_separator_end')); }
}
s1.id = 'GBB_menu_separator';
s2.id = 'GBB_menu_separator_end';
document.getElementById('GBB_bookmark_menupopup').insertBefore(s1, r);
document.getElementById('GBB_bookmark_menupopup').insertBefore(s2, r);
function sortstr(a,b) {
aa = a.toLowerCase();
bb = b.toLowerCase();
if (aa==bb) return 0;
if (aa -1)
if (mi.id != target.id){
mi.childNodes[0].hidePopup();
}}
}
}
}
function GBB_renameLabelDialog() {
this.dialogId = null;
this.newLabelName = null;
};
GBB_renameLabelDialog.prototype.onOpen = function(label) {
var url = "chrome://google-bookmarks-button/content/google-bookmarks-rename-label.xul";
window.openDialog(url, "gbbOptions", "modal,centerscreen,chrome,resizable=no", label);
// I don't like how this is done but calling the XMLHttpRequest on dialog.ondialogaccept fails
// when the dialog is closed because the request variables are deleted
if (this.newLabelName != null)
GBB.GBB_onAcceptRenameLabel(label, this.newLabelName);
};
GBB_renameLabelDialog.prototype.onAccept = function(newLabelName, event) {
this.newLabelName = newLabelName;
};
function GBB_newLabelDialog() {
this.bkmk_url = null;
this.bkmk_title = null;
this.newLabelName = null;
this.notes = null;
};
GBB_newLabelDialog.prototype.onOpen = function(bkmk_url, bkmk_title) {
var url = "chrome://google-bookmarks-button/content/google-bookmarks-new-label.xul";
window.openDialog(url, "gbbOptions", "modal,centerscreen,chrome,resizable=no", bkmk_url, bkmk_title);
// I don't like how this is done but calling the XMLHttpRequest on dialog.ondialogaccept fails
// when the dialog is closed because the request variables are deleted
if (this.newLabelName != null)
GBB.GBB_onQuickAddBookmark(null, this.bkmk_title, this.bkmk_url, this.newLabelName+','+gbb_BookmarkArray.getLabelsByUrl(this.bkmk_url), this.notes);
};
GBB_newLabelDialog.prototype.onAccept = function(bkmk_url, bkmk_title, newLabelName, notes, event) {
this.bkmk_url = bkmk_url;
this.bkmk_title = bkmk_title;
this.newLabelName = newLabelName;
this.notes = notes;
};
function GBB_addBookmarkDialog(action) {
this.dialog_action = action;
this.bkmk_url = null;
this.bkmk_title = null;
this.newLabelName = null;
this.bkmk_notes = null;
this.updated = null;
};
GBB_addBookmarkDialog.prototype.onOpen = function(bkmk_url, bkmk_title) {
var url = "chrome://google-bookmarks-button/content/google-bookmarks-add-bookmark.xul";
//bkmk_labels = gbb_BookmarkArray.getLabelsByUrl(bkmk_url, function(a) { for (var i=0; i < a.length; i++) { ret += a[i]+', '; } });
bkmk_labels = gbb_BookmarkArray.getLabelsByUrl(bkmk_url);
bkmk_notes = gbb_BookmarkArray.getNotesByUrl(bkmk_url);
window.openDialog(url, "gbbAddBookmarkDialog", "modal,centerscreen,chrome,resizable=no", bkmk_url, bkmk_title, bkmk_labels.join(', '), unescapeHTML(bkmk_notes), this.dialog_action);
// I don't like how this is done but calling the XMLHttpRequest on dialog.ondialogaccept fails
// when the dialog is closed because the request variables are deleted
if (this.updated)
GBB.GBB_onQuickAddBookmark(null, this.bkmk_title, this.bkmk_url, this.bkmk_labels, this.bkmk_notes);
};
GBB_addBookmarkDialog.prototype.onAccept = function(bkmk_url, bkmk_title, bkmk_labels, bkmk_notes, event) {
this.bkmk_url = bkmk_url;
this.bkmk_title = bkmk_title;
this.bkmk_labels = bkmk_labels;
this.bkmk_notes = bkmk_notes;
this.updated = true;
};
function GBB_onOptions(event) {
var url = "chrome://google-bookmarks-button/content/google-bookmarks-button-settings.xul";
event.preventBubble();
document.getElementById('GBB_bookmark_menupopup').hidePopup();
window.openDialog(url, "gbbOptions", "modal,centerscreen,chrome,resizable=no"); };
function updateLabelsMenuList(str) {
var str = str;// ? str : '';
bookmarkLabelsPopup = document.getElementById('bookmarkLabelsPopup');
bookmarkLabelsCaption = document.getElementById('bookmarkLabels');
var preString = str.substring(0, str.lastIndexOf(','))+',';
var needle = str.substring(str.lastIndexOf(',')+1, str.length).replace(/^\s+|\s+$/, '');
var labelArray = window.opener.gbb_BookmarkArray.getLabels(needle);
bookmarkLabelsCaption.removeAllItems();
for (var i = 0; i < labelArray.length; i++) {
if (preString.indexOf(labelArray[i]+',') > -1) {
continue;
}else{
if (preString.length > 1)
var label = preString+' '+labelArray[i];
else
var label = labelArray[i];
bookmarkLabelsCaption.appendItem(label, '');
}
}
//bookmarkLabelsCaption.menupopup.ignorekeys = "true";
//bookmarkLabelsCaption.menupopup.onpopuphidden = "alert('!')";
//bookmarkLabelsPopup.showPopup();
//bookmarkLabelsPopup.blur();
//bookmarkLabelsCaption.setAttribute('open', 'true');
//bookmarkLabelsCaption.focused == "true";
//bookmarkLabelsCaption.menupopup.showPopup();
//bookmarkLabelsCaption.inputField.focus();
/*
var str = str;// ? str : '';
bookmarkLabelsPopup = document.getElementById('bookmarkLabelsPopup');
bookmarkLabelsCaption = document.getElementById('bookmarkLabels');
var preString = str.substring(0, str.lastIndexOf(','))+',';
var needle = str.substring(str.lastIndexOf(',')+1, str.length).replace(/^\s+|\s+$/, '');
var labelArray = window.opener.gbb_BookmarkArray.getLabels(needle);
var bookmarkLabelsChilds = bookmarkLabelsPopup.childNodes;
var blcLength = bookmarkLabelsChilds.length;
for (var i = 0; i < blcLength; i++)
bookmarkLabelsPopup.removeChild(bookmarkLabelsChilds[0]);
for (var i = 0; i < labelArray.length; i++) {
if (preString.indexOf(labelArray[i]+',') > -1) {
continue;
}else{
var mi = document.createElement('menuitem');
if (preString.length > 1)
mi.setAttribute('label', preString+' '+labelArray[i]);
else
mi.setAttribute('label', labelArray[i]);
bookmarkLabelsPopup.appendChild(mi);
}
}
//bookmarkLabelsPopup.showPopup();
//bookmarkLabelsPopup.blur();
//bookmarkLabelsCaption.focus();
*/
}
PK
"5#@ @ ; content/google-bookmarks-button/google-bookmarks-button.xul
PK
5O E content/google-bookmarks-button/google-bookmarks-button_localized.xul
PK
4< < > content/google-bookmarks-button/google-bookmarks-new-label.xul
PK
04aH A content/google-bookmarks-button/google-bookmarks-rename-label.xul
PK
5 locale/PK
5 locale/google-bookmarks-button/PK
5 % locale/google-bookmarks-button/ca-AD/PK
F4HPCK K 1 locale/google-bookmarks-button/ca-AD/contents.rdf
PK
L5H;v v @ locale/google-bookmarks-button/ca-AD/google-bookmarks-button.dtd
PK
5X}9 9 G locale/google-bookmarks-button/ca-AD/google-bookmarks-button.propertiesGBB_description = Afegeix un nou botó a la barra d'eines del Firefox per gestionar les Adreces d'interès del Google
GBB_bookmark_button.label = Afegeix aquesta pàgina a les Adreces d'interès...
GBB_bookmark_button_edit.label = Modifica aquesta Adreça d'interès
GBB_bookmark_button.tooltip = Afegeix aquesta pàgina a les Adreces d'interès
GBB_bookmark_button_edit.tooltip = Modifica aquesta adreça d'interès
GBB_bookmark_button_remove.label = Suprimeix aquesta adreça d'interès
GBB_bookmark_remove_bookmark.confirm_box.before = Estàs segur de suprimir l'adreça d'interès
GBB_bookmark_remove_bookmark.confirm_box.after = ?
GBB_bookmark_remove_label.confirm_box.before = Suprimir l'etiqueta
GBB_bookmark_remove_label.confirm_box.after = ?
GBB_edit_bookmark_dialog.title = Modificar Adreça d'interès
PK
5 % locale/google-bookmarks-button/en-US/PK
F4HPCK K 1 locale/google-bookmarks-button/en-US/contents.rdf
PK
!5/hS @ locale/google-bookmarks-button/en-US/google-bookmarks-button.dtd
PK
75 G locale/google-bookmarks-button/en-US/google-bookmarks-button.propertiesGBB_description = Adds a new button in the Firefox toolbar to manage the Google Bookmarks
GBB_bookmark_button.label = Bookmark this page...
GBB_bookmark_button_edit.label = Edit this bookmark
GBB_bookmark_button.tooltip = Bookmark this page
GBB_bookmark_button_edit.tooltip = Edit this bookmark
GBB_bookmark_button_remove.label = Remove this bookmark
GBB_bookmark_remove_bookmark.confirm_box.before = Are you sure you want to delete this bookmark named
GBB_bookmark_remove_bookmark.confirm_box.after = ?
GBB_bookmark_remove_label.confirm_box.before = Delete the label
GBB_bookmark_remove_label.confirm_box.after = ?
GBB_bookmark_remove_label.confirm_box.after = ?
GBB_edit_bookmark_dialog.title = Edit Bookmark
PK
5 skin/PK
5
skin/classic/PK
5 % skin/classic/google-bookmarks-button/PK
}P4As 1 skin/classic/google-bookmarks-button/book_off.gifGIF89a ! , W8B7S601l`<ܤTq0la@J (2*Of3JA2EH2 ՉpL$ ;PK
F4$ 0 skin/classic/google-bookmarks-button/book_on.gifGIF89a _a$-.TPS/NM.-[^!lgtqsn0 AC~RRO\[! , 'Yh:DIbe.
DRE?hF"|*q00"QI8&aN Lؚ
!Pp*"P.ù.-(?
F$j'#
kmb
;##Um! ;PK
F4}!= = 1 skin/classic/google-bookmarks-button/contents.rdf
PK
F4# , skin/classic/google-bookmarks-button/ggb.pngPNG
IHDR szz gAMA |Q cHRM z% u0 ` : o sIDATxb?%wϞ4_7&M?@ 11 ~{?>1đ͌2_ۗD@,Zr_?ydby-\Yo]d0f
ϠȈ<