[Ext] userChrome.js

Announce and Discuss the Latest Theme and Extension Releases.
Locked
User avatar
JNewbry
Posts: 321
Joined: April 9th, 2005, 3:56 am
Location: Dallas,TX
Contact:

Post by JNewbry »

Any SeaMonkey users watching this thread? If so... Got any SeaMonkey only code to share?

I recently rebuilt ChromEdit Plus for SeaMonkey to INCLUDE a toolbar button... toggled through View > Show/Hide of course.
Support for userChrome.js 0.7 - userChrome.js tab, userChrome.xul tab. These tabs show only if those files are present.
Access to the chrome, profile and install folders. If interested, click the ChromEdit Plus in my sig... go to the bottom of the page.

Since SeaMonkey lacks an extension manager (built in) the userChrome.js extension seems well suited for it.
All that's needed now is a collection of .js and .xul targeted for SeaMonkey.
<a href="http://webdesigns.ms11.net/chromeditp.html" target="_blank">ChromEdit Plus</a> | <a href="http://webdesigns.ms11.net/winstripethemes.html" target="_blank">Firefox Themes</a>
Zoolcar9
Posts: 2225
Joined: November 9th, 2004, 6:45 pm
Location: Jakarta, Indonesia (UTC+7)
Contact:

Post by Zoolcar9 »


I only have one at http://www.extensionsmirror.nl/index.ph ... entry21446
deathburger could have more.

My Firefox information | Add-ons | GitHub

"With great power, comes great desire to show it off."
User avatar
JNewbry
Posts: 321
Joined: April 9th, 2005, 3:56 am
Location: Dallas,TX
Contact:

Post by JNewbry »

Zoolcar9... Thanks! That's a start.
My plans are to make up a zip file of SeaMonkey .js and .xul for everyone's use.
I'll post it when there's a decent collection.
<a href="http://webdesigns.ms11.net/chromeditp.html" target="_blank">ChromEdit Plus</a> | <a href="http://webdesigns.ms11.net/winstripethemes.html" target="_blank">Firefox Themes</a>
User avatar
JNewbry
Posts: 321
Joined: April 9th, 2005, 3:56 am
Location: Dallas,TX
Contact:

Post by JNewbry »

This is a userChrome.XUL file aimed at SeaMonkey users.

<a href="data:application/x-javascript;charset=utf-8;base64,PG92ZXJsYXkgaWQ9ImNsZWFyZGF0YSINCiAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL2tleW1hc3Rlci9nYXRla2VlcGVyL3RoZXJlLmlzLm9ubHkueHVsIj4NCg0KPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiPg0KPCFbQ0RBVEFbDQpmdW5jdGlvbiBjbGVhckNhY2hlKGFUeXBlKSB7DQogICAgdmFyIGNsYXNzSUQgPSBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9uZXR3b3JrL2NhY2hlLXNlcnZpY2U7MSJdOw0KICAgIHZhciBjYWNoZVNlcnZpY2UgPSBjbGFzc0lELmdldFNlcnZpY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSUNhY2hlU2VydmljZSk7DQogICAgY2FjaGVTZXJ2aWNlLmV2aWN0RW50cmllcyhhVHlwZSk7DQp9DQoNCmZ1bmN0aW9uIGNsZWFyTWVtQ2FjaGUoKSB7DQogICAgY2xlYXJDYWNoZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJQ2FjaGUuU1RPUkVfSU5fTUVNT1JZKTsNCn0NCg0KZnVuY3Rpb24gY2xlYXJEaXNrQ2FjaGUoKSB7DQogICAgY2xlYXJDYWNoZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJQ2FjaGUuU1RPUkVfT05fRElTSyk7DQp9DQoNCmZ1bmN0aW9uIGNsZWFyQWxsQ2FjaGUoKSB7DQogICAgY2xlYXJNZW1DYWNoZSgpOw0KICAgIGNsZWFyRGlza0NhY2hlKCk7DQp9DQoNCmZ1bmN0aW9uIGNsZWFySGlzdG9yeSgpIHsNCg0KICAgIHZhciBjbGFzczEgPSAiQG1vemlsbGEub3JnL2Jyb3dzZXIvZ2xvYmFsLWhpc3Rvcnk7MSI7DQogICAgdmFyIGNsYXNzMiA9ICJAbW96aWxsYS5vcmcvYnJvd3Nlci9nbG9iYWwtaGlzdG9yeTsyIjsNCiAgICB2YXIgaGlzdG9yeSA9IChjbGFzczIgaW4gQ29tcG9uZW50cy5jbGFzc2VzKSA%2FIGNsYXNzMiA6IGNsYXNzMTsNCiAgICBoaXN0b3J5ID0gQ29tcG9uZW50cy5jbGFzc2VzW2hpc3RvcnldLmdldFNlcnZpY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSUJyb3dzZXJIaXN0b3J5KTsNCiAgICBoaXN0b3J5LnJlbW92ZUFsbFBhZ2VzKCk7DQogICAgdmFyIG9zID0gQ29tcG9uZW50cy5jbGFzc2VzWyJAbW96aWxsYS5vcmcvb2JzZXJ2ZXItc2VydmljZTsxIl0NCgkuZ2V0U2VydmljZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJT2JzZXJ2ZXJTZXJ2aWNlKTsNCiAgICBvcy5ub3RpZnlPYnNlcnZlcnMobnVsbCwgImJyb3dzZXI6cHVyZ2Utc2Vzc2lvbi1oaXN0b3J5IiwgIiIpOw0KfQ0KDQpmdW5jdGlvbiBjbGVhckxvY2F0aW9uQmFyKCkgew0KICAgIHZhciBjbGFzc0lEID0gQ29tcG9uZW50cy5jbGFzc2VzWydAbW96aWxsYS5vcmcvYnJvd3Nlci91cmxiYXJoaXN0b3J5OzEnXTsNCiAgICBpZiAoY2xhc3NJRCkgew0KCXZhciB1cmxiYXJIaXN0b3J5ID0gY2xhc3NJRC5nZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lVcmxiYXJIaXN0b3J5KTsNCgl1cmxiYXJIaXN0b3J5LmNsZWFySGlzdG9yeSgpOw0KICAgIH0NCiAgICBlbHNlIHsNCgl2YXIgUkRGID0gQ29tcG9uZW50cy5jbGFzc2VzWyJAbW96aWxsYS5vcmcvcmRmL3JkZi1zZXJ2aWNlOzEiXQ0KCSAgICAuZ2V0U2VydmljZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJUkRGU2VydmljZSk7DQoJdmFyIGxvY2FsU3RvcmUgPSBSREYuR2V0RGF0YVNvdXJjZSgicmRmOmxvY2FsLXN0b3JlIik7DQoJdmFyIFJERkMgPSBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9yZGYvY29udGFpbmVyLXV0aWxzOzEiXQ0KCSAgICAuZ2V0U2VydmljZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJUkRGQ29udGFpbmVyVXRpbHMpOw0KCXZhciB1cmxCYXJIaXN0ID0gUkRGQy5NYWtlU2VxKGxvY2FsU3RvcmUsIFJERi5HZXRSZXNvdXJjZSgibmM6dXJsYmFyLWhpc3RvcnkiKSk7DQoJZm9yICh2YXIgaSA9IHVybEJhckhpc3QuR2V0Q291bnQoKTsgaSA%2BIDA7IC0taSkNCgkgICAgdXJsQmFySGlzdC5SZW1vdmVFbGVtZW50QXQoaSwgdHJ1ZSk7DQogICAgfQ0KICAgIG5hdmlnYXRvci5wcmVmZXJlbmNlKCdnZW5lcmFsLm9wZW5fbG9jYXRpb24ubGFzdF91cmwnLCAnJyk7DQp9DQoNCmZ1bmN0aW9uIGNsZWFyQ29va2llcygpIHsNCiAgICB2YXIgY29va2llbWFuID0gQ29tcG9uZW50cy5jbGFzc2VzWyJAbW96aWxsYS5vcmcvY29va2llbWFuYWdlcjsxIl0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJQ29va2llTWFuYWdlcik7DQogICAgY29va2llbWFuLnJlbW92ZUFsbCgpOw0KfQ0KDQpmdW5jdGlvbiBjbGVhckFsbERhdGEoKSB7DQogICAgY2xlYXJBbGxDYWNoZSgpOw0KICAgIGNsZWFySGlzdG9yeSgpOw0KICAgIGNsZWFyTG9jYXRpb25CYXIoKTsNCiAgICBjbGVhckNvb2tpZXMoKTsNCn0NCg0KXV0%2BDQo8L3NjcmlwdD4NCg0KICA8dG9vbGJhcnBhbGV0dGUgaWQ9Im1haW4tbWVudWJhciI%2BDQoNCjxtZW51IGlkPSJjbGVhcmRhdGEtbWVudSIgbGFiZWw9IkNsZWFyIERhdGEiPg0KPG1lbnVwb3B1cD4NCjxtZW51aXRlbSBsYWJlbD0iQ2xlYXIgQ2FjaGUiIG9uY29tbWFuZD0iY2xlYXJBbGxDYWNoZSgpOyIgLz4NCjxtZW51c2VwYXJhdG9yIC8%2BDQo8bWVudWl0ZW0gbGFiZWw9IkNsZWFyIEhpc3RvcnkiIG9uY29tbWFuZD0iY2xlYXJIaXN0b3J5KCk7IiAvPg0KPG1lbnVzZXBhcmF0b3IgLz4NCjxtZW51aXRlbSBsYWJlbD0iQ2xlYXIgTG9jYXRpb24gQmFyIiBvbmNvbW1hbmQ9ImNsZWFyTG9jYXRpb25CYXIoKTsiIC8%2BDQo8bWVudXNlcGFyYXRvciAvPg0KPG1lbnVpdGVtIGxhYmVsPSJDbGVhciBDb29raWVzIiBvbmNvbW1hbmQ9ImNsZWFyQ29va2llcygpOyIgLz4NCjxtZW51c2VwYXJhdG9yIC8%2BDQo8bWVudWl0ZW0gbGFiZWw9IkNsZWFyIEFsbCIgb25jb21tYW5kPSJjbGVhckFsbERhdGEoKTsiIC8%2BDQo8L21lbnVwb3B1cD4NCjwvbWVudT4NCg0KICA8L3Rvb2xiYXJwYWxldHRlPg0KDQo8L292ZXJsYXk%2B">Clear Data</a>

This kinda mimics the "Clear Private Data" feature of Firefox.
Adds a "Clear Data" entry to the menubar.
Clears the Cache, History, Location Bar and Cookies. And a Clear All.
Yes... it was shamefully ripped from the prefbar extension.

*Update 6/23/2006 - I made this into an extension for SeaMonkey.
If interested... <a href="http://webdesigns.ms11.net/chromeditp.html#2">SeaMonkey Extensions</a>
Last edited by JNewbry on June 23rd, 2006, 10:58 am, edited 1 time in total.
<a href="http://webdesigns.ms11.net/chromeditp.html" target="_blank">ChromEdit Plus</a> | <a href="http://webdesigns.ms11.net/winstripethemes.html" target="_blank">Firefox Themes</a>
User avatar
XerBlade
Posts: 865
Joined: October 4th, 2005, 10:45 pm
Location: Nashville, TN, US

Post by XerBlade »

<a href="data:application/x-javascript;charset=utf-8;base64,ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvb2ttYXJrcy1tZW51Iikuc2V0QXR0cmlidXRlKCJsYWJlbCIsICJGYXZvcml0ZXMiKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib29rbWFya3MtbWVudSIpLnNldEF0dHJpYnV0ZSgiYWNjZXNza2V5IiwgImEiKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWxvYWQtYnV0dG9uIikuc2V0QXR0cmlidXRlKCJsYWJlbCIsICJSZWZyZXNoIik7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWVudV9wcmVmZXJlbmNlcyIpLnNldEF0dHJpYnV0ZSgibGFiZWwiLCAiSW50ZXJuZXQgT3B0aW9ucy4uLiIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRleHQtY29weWxpbmsiKS5zZXRBdHRyaWJ1dGUoImxhYmVsIiwgIkNvcHkgU2hvcnRjdXQiKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZXh0LWNvcHlsaW5rIikuc2V0QXR0cmlidXRlKCJhY2Nlc3NrZXkiLCAidCIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRleHQtc2F2ZWxpbmsiKS5zZXRBdHRyaWJ1dGUoImxhYmVsIiwgIlNhdmUgVGFyZ2V0IEFzLi4uIik7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGV4dC1zYXZlbGluayIpLnNldEF0dHJpYnV0ZSgiYWNjZXNza2V5IiwgIkEiKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWV3U2lkZWJhck1lbnVNZW51Iikuc2V0QXR0cmlidXRlKCJsYWJlbCIsICJFeHBsb3JlciBCYXIiKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWV3U2lkZWJhck1lbnVNZW51Iikuc2V0QXR0cmlidXRlKCJhY2Nlc3NrZXkiLCAiRSIpOw%3D%3D">Make some labels like IE</a>

I made this as a concept script (please don't take what it's specifically doing seriously).
User Agent
Extensions
AMD64/2.41GHz RAM/1.0GB ATI/256MB-GDDR3/128-bit/8xAGP Cable6.0M/384kbps
SevenSeven
Posts: 33
Joined: February 8th, 2004, 1:05 pm

Post by SevenSeven »

zeniko,

Under a Guest account the JC shows "document.getElementById... has no properties" which disables my whole userChrome.js. It shows this error from another extension as well. Can it be fixed? I'm using 20060619 2.0a3.
old zeniko
Posts: 0
Joined: December 31st, 1969, 5:00 pm

Post by old zeniko »

SevenSeven wrote:Under a Guest account the JC shows "document.getElementById... has no properties" which disables my whole userChrome.js.

Why, oh why? :roll: You explicitly left out the one relevant piece of information: the id of the element which is responsible for the error message. The error you're observing actually tries to tell you that that element couldn't be found (in that case getElementById returns <code>null</code> which doesn't have any properties). But of course we can't help you, unless you let us know what element that might be...

As for your having the whole userChrome.js disabled: consider using the Subscript Loader snippet from the first post and put each snippet into it's own file. Like this, you'll at most disable the code in the file you're currently working on.
SevenSeven
Posts: 33
Joined: February 8th, 2004, 1:05 pm

Post by SevenSeven »

zeniko wrote:
SevenSeven wrote:Under a Guest account the JC shows "document.getElementById... has no properties" which disables my whole userChrome.js.

Why, oh why? :roll: You explicitly left out the one relevant piece of information: the id of the element which is responsible for the error message. The error you're observing actually tries to tell you that that element couldn't be found (in that case getElementById returns <code>null</code> which doesn't have any properties). But of course we can't help you, unless you let us know what element that might be...

As for your having the whole userChrome.js disabled: consider using the Subscript Loader snippet from the first post and put each snippet into it's own file. Like this, you'll at most disable the code in the file you're currently working on.

Figured it out. ID is "sessionmanager-toolbar", which is missing in the Guest account config.
Zoolcar9
Posts: 2225
Joined: November 9th, 2004, 6:45 pm
Location: Jakarta, Indonesia (UTC+7)
Contact:

Post by Zoolcar9 »

zeniko wrote:As for your having the whole userChrome.js disabled: consider using the Subscript Loader snippet from the first post and put each snippet into it's own file. Like this, you'll at most disable the code in the file you're currently working on.

and add conditions as possible in every script.

My Firefox information | Add-ons | GitHub

"With great power, comes great desire to show it off."
SevenSeven
Posts: 33
Joined: February 8th, 2004, 1:05 pm

Post by SevenSeven »

Sharing some of my own 2.0a3-tested-only snippets:

- Auto clear searchbar after submit
- Auto show context menu upon selecting

<a href="data:application/x-javascript;charset=utf-8;base64,Lyo9PT09PT09IENsZWFyIHRoZSBzZWFyY2hiYXIgYWZ0ZXIgc3VibWl0ID09PT09PT0qLw0KDQp2YXIgc2VhcmNoYmFyQXV0b2NsZWFyID0gew0KCXNlYXJjaGJhclBvcHVwc2hvd2luZzogZmFsc2UsDQoJaW5pdDogZnVuY3Rpb24oKSB7ICANCgkJdGhpcy5zZWFyY2hiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoYmFyIik7DQoJCXZhciBzZWFyY2hiYXJUZXh0Ym94ID0gZG9jdW1lbnQuZ2V0QW5vbnltb3VzRWxlbWVudEJ5QXR0cmlidXRlKHRoaXMuc2VhcmNoYmFyLCAiYW5vbmlkIiwgInNlYXJjaGJhci10ZXh0Ym94Iik7DQoJCXNlYXJjaGJhclRleHRib3guYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBmdW5jdGlvbihldmVudCkgeyBzZWFyY2hiYXJBdXRvY2xlYXIuY2xlYXIoZXZlbnQpOyB9LCBmYWxzZSk7DQoJCXZhciBnb0J1dHRvbiA9IGRvY3VtZW50LmdldEFub255bW91c0VsZW1lbnRCeUF0dHJpYnV0ZSh0aGlzLnNlYXJjaGJhciwgImFub25pZCIsICJzZWFyY2gtZ28tYnV0dG9uIik7DQoJCWdvQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oZXZlbnQpIHsgc2VhcmNoYmFyQXV0b2NsZWFyLmNsZWFyKGV2ZW50KTsgfSwgZmFsc2UpOw0KCQlnb0J1dHRvbi5jaGlsZE5vZGVzWzBdLmFkZEV2ZW50TGlzdGVuZXIoInBvcHVwc2hvd2luZyIsIGZ1bmN0aW9uKGV2ZW50KSB7IHNlYXJjaGJhckF1dG9jbGVhci5wcmV2ZW50KGV2ZW50KTsgfSwgZmFsc2UpOw0KCQlnb0J1dHRvbi5jaGlsZE5vZGVzWzBdLmFkZEV2ZW50TGlzdGVuZXIoInBvcHVwaGlkaW5nIiwgZnVuY3Rpb24oZXZlbnQpIHsgc2VhcmNoYmFyQXV0b2NsZWFyLmFsbG93KGV2ZW50KTsgfSwgZmFsc2UpOwkNCgl9LCANCgkNCgljbGVhcjogZnVuY3Rpb24oZXZlbnQpIHsNCgkJaWYgKChldmVudC5rZXlDb2RlID09IDEzKSB8fCAoKGV2ZW50LmJ1dHRvbiA9PSAwKSAmJiAodGhpcy5zZWFyY2hiYXJQb3B1cHNob3dpbmcgPT0gZmFsc2UpKSkgc2V0VGltZW91dCgic2VhcmNoYmFyQXV0b2NsZWFyLnNlYXJjaGJhci52YWx1ZT0nJzsiLDApOw0KCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCgl9LA0KDQoJcHJldmVudDogZnVuY3Rpb24oZXZlbnQpIHsNCgkJdGhpcy5zZWFyY2hiYXJQb3B1cHNob3dpbmcgPSB0cnVlOw0KCX0sDQoJDQoJYWxsb3c6IGZ1bmN0aW9uKGV2ZW50KSB7DQoJCXRoaXMuc2VhcmNoYmFyUG9wdXBzaG93aW5nID0gZmFsc2U7DQoJfQ0KfTsNCnNlYXJjaGJhckF1dG9jbGVhci5pbml0KCk7DQoNCg0KLyo9PT09PT09IEF1dG8gY29udGV4dCBtZW51IG9uIHNlbGVjdGlvbiA9PT09PT09Ki8NCg0KdmFyIGF1dG9Db250ZXh0bWVudSA9IHsNCglleGVjOiBmdW5jdGlvbihldmVudCkgew0KCQlpZiAoZXZlbnQuYnV0dG9uICE9IDApIHJldHVybjsNCgkJc2VsZWN0aW9uID0gZG9jdW1lbnQuY29tbWFuZERpc3BhdGNoZXIuZm9jdXNlZFdpbmRvdy5nZXRTZWxlY3Rpb24oKTsNCgkJaWYgKCFzZWxlY3Rpb24uaXNDb2xsYXBzZWQgJiYgKHNlbGVjdGlvbi50b1N0cmluZygpICE9IGF1dG9Db250ZXh0bWVudVByZXZTZWxlY3Rpb24pKSB7DQoJCQlhdXRvQ29udGV4dG1lbnVQcmV2U2VsZWN0aW9uID0gZG9jdW1lbnQuY29tbWFuZERpc3BhdGNoZXIuZm9jdXNlZFdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOw0KCQkJdmFyIG1vdXNlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTsNCgkJCWlmIChtb3VzZUV2ZW50KQl7DQoJCQkJbW91c2VFdmVudC5pbml0TW91c2VFdmVudCgnY29udGV4dG1lbnUnLCB0cnVlLCB0cnVlLCB3aW5kb3csIDEsIGV2ZW50LnNjcmVlblgsIGV2ZW50LnNjcmVlblksIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAyLCBudWxsKTsNCgkJCQlldmVudC50YXJnZXQuZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KTsNCgkJCX0NCgkJfQ0KCX0NCn07DQp2YXIgYXV0b0NvbnRleHRtZW51UHJldlNlbGVjdGlvbiA9IG51bGw7DQpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZnVuY3Rpb24oZXZlbnQpIHsgYXV0b0NvbnRleHRtZW51LmV4ZWMoZXZlbnQpOyB9LCBmYWxzZSk7DQo%3D">code</a>

<a href="data:application/x-javascript;charset=utf-8;base64,Lyo9PT09PT09IENsZWFyIHRoZSBzZWFyY2hiYXIgYWZ0ZXIgc3VibWl0ID09PT09PT0qLw0KDQp2YXIgc2VhcmNoYmFyQXV0b2NsZWFyID0gew0KCWluaXQ6IGZ1bmN0aW9uKCkgeyAgDQoJCXRoaXMuc2VhcmNoYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaGJhciIpOw0KCQl2YXIgc2VhcmNoYmFyVGV4dGJveCA9IGRvY3VtZW50LmdldEFub255bW91c0VsZW1lbnRCeUF0dHJpYnV0ZSh0aGlzLnNlYXJjaGJhciwgImFub25pZCIsICJzZWFyY2hiYXItdGV4dGJveCIpOw0KCQlzZWFyY2hiYXJUZXh0Ym94LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgZnVuY3Rpb24oZXZlbnQpIHsgc2VhcmNoYmFyQXV0b2NsZWFyLmNsZWFyKGV2ZW50KTsgfSwgZmFsc2UpOw0KCQl2YXIgc2VhcmNoR29CdXR0b24gPSBkb2N1bWVudC5nZXRBbm9ueW1vdXNFbGVtZW50QnlBdHRyaWJ1dGUodGhpcy5zZWFyY2hiYXIsICJhbm9uaWQiLCAic2VhcmNoLWdvLWJ1dHRvbiIpOw0KCQl2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0QW5vbnltb3VzRWxlbWVudEJ5QXR0cmlidXRlKHNlYXJjaEdvQnV0dG9uLCAiYW5vbmlkIiwgImJ1dHRvbiIpOw0KCQlidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbihldmVudCkgeyBzZWFyY2hiYXJBdXRvY2xlYXIuY2xlYXIoZXZlbnQpOyB9LCBmYWxzZSk7DQoJfSwgDQoJDQoJY2xlYXI6IGZ1bmN0aW9uKGV2ZW50KSB7DQoJCWlmICgoZXZlbnQua2V5Q29kZSA9PSAxMykgfHwgKGV2ZW50LmJ1dHRvbiA9PSAwKSkgc2V0VGltZW91dCgic2VhcmNoYmFyQXV0b2NsZWFyLnNlYXJjaGJhci52YWx1ZT0nJzsiLDApOw0KCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCgl9DQp9Ow0Kc2VhcmNoYmFyQXV0b2NsZWFyLmluaXQoKTs%3D">better auto clear searchbar code</a>

<a href="data:application/x-javascript;charset=utf-8;base64,Lyo9PT09PT09IENsZWFyIHRoZSBzZWFyY2hiYXIgYWZ0ZXIgc3VibWl0ID09PT09PT0qLw0KDQp2YXIgc2VhcmNoYmFyQXV0b2NsZWFyID0gew0KCWluaXQ6IGZ1bmN0aW9uKCkgew0KCQl0aGlzLnNlYXJjaGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2hiYXIiKTsNCgkJdmFyIHNlYXJjaGJhclRleHRib3ggPSBkb2N1bWVudC5nZXRBbm9ueW1vdXNFbGVtZW50QnlBdHRyaWJ1dGUodGhpcy5zZWFyY2hiYXIsICJhbm9uaWQiLCAic2VhcmNoYmFyLXRleHRib3giKTsNCgkJc2VhcmNoYmFyVGV4dGJveC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsIGZ1bmN0aW9uKGV2ZW50KSB7IHNlYXJjaGJhckF1dG9jbGVhci5jbGVhcihldmVudCk7IH0sIGZhbHNlKTsNCgkJdmFyIHNlYXJjaEdvQnV0dG9uID0gZG9jdW1lbnQuZ2V0QW5vbnltb3VzRWxlbWVudEJ5QXR0cmlidXRlKHRoaXMuc2VhcmNoYmFyLCAiYW5vbmlkIiwgInNlYXJjaC1nby1idXR0b24iKTsNCgkJdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEFub255bW91c0VsZW1lbnRCeUF0dHJpYnV0ZShzZWFyY2hHb0J1dHRvbiwgImFub25pZCIsICJidXR0b24iKTsNCgkJYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oZXZlbnQpIHsgc2VhcmNoYmFyQXV0b2NsZWFyLmNsZWFyKGV2ZW50KTsgfSwgZmFsc2UpOw0KCX0sDQoJDQoJY2xlYXI6IGZ1bmN0aW9uKGV2ZW50KSB7DQoJCWlmICgoZXZlbnQua2V5Q29kZSA9PSAxMykgfHwgKGV2ZW50LmJ1dHRvbiA9PSAwKSkgew0KCQkJc2V0VGltZW91dCgic2VhcmNoYmFyQXV0b2NsZWFyLnNlYXJjaGJhci52YWx1ZT0nJzsiLCAwKTsNCgkJCXNldFRpbWVvdXQoInNlYXJjaGJhckF1dG9jbGVhci5zZWFyY2hiYXIuX3RleHRib3guX2Rpc3BsYXlDdXJyZW50RW5naW5lKCk7IiwgMCk7DQoJCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCgkJfQ0KCX0NCn07DQpzZWFyY2hiYXJBdXRvY2xlYXIuaW5pdCgpOw%3D%3D">even better auto clear searchbar code - display current engine after submit</a>

<a href="data:application/x-javascript;charset=utf-8;base64,Lyo9PT09PT09IEF1dG8gY29udGV4dCBtZW51IG9uIHNlbGVjdGlvbiA9PT09PT09Ki8NCg0KdmFyIGF1dG9Db250ZXh0bWVudSA9IHsNCglleGVjOiBmdW5jdGlvbihldmVudCkgew0KCQlpZiAoZXZlbnQuYnV0dG9uICE9IDApIHJldHVybjsNCgkJdmFyIHNlbGVjdGlvbiA9IGRvY3VtZW50LmNvbW1hbmREaXNwYXRjaGVyLmZvY3VzZWRXaW5kb3cuZ2V0U2VsZWN0aW9uKCk7DQoJCWlmIChzZWxlY3Rpb24udG9TdHJpbmcoKSA9PSAiIikgcmV0dXJuOw0KCQlpZiAoZXZlbnQudHlwZSA9PSAibW91c2Vkb3duIikNCgkJCWlmICgoc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSAmJiAhc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29sbGFwc2VkKQ0KCQkJCWlmIChldmVudC50YXJnZXQudGFnTmFtZSAhPSAibWVudWl0ZW0iKQ0KCQkJCQlzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7DQoJCWlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7DQoJCQl2YXIgbW91c2VFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpOw0KCQkJbW91c2VFdmVudC5pbml0TW91c2VFdmVudCgiY29udGV4dG1lbnUiLCB0cnVlLCB0cnVlLCB3aW5kb3csIDEsIGV2ZW50LnNjcmVlblgsIGV2ZW50LnNjcmVlblksIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAyLCBudWxsKTsNCgkJCWV2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpOw0KCQl9DQoJfQ0KfTsNCmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7IGF1dG9Db250ZXh0bWVudS5leGVjKGV2ZW50KTsgfSwgZmFsc2UpOw0KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIGZ1bmN0aW9uKGV2ZW50KSB7IGF1dG9Db250ZXh0bWVudS5leGVjKGV2ZW50KTsgfSwgZmFsc2UpOw0K">better auto context menu - now works for repeated selection of the same objects</a>
Last edited by SevenSeven on July 1st, 2006, 10:59 pm, edited 1 time in total.
imagr8m8
Posts: 117
Joined: August 6th, 2004, 3:39 pm

Need Script to add "Open Contact" to context menu

Post by imagr8m8 »

Can anyone help me write a script that will add "Open Contact" to the context menu of T-Bird when in the header of an email....needed to edit contact info, call a contact in response to an email or look at contact notes. It seems so intuitive to have this function instead of having to copy the address, open the addressbook, past the address into the search form and then select from a list to open a contact record....or hunt for the contact in ContactSidebar. Just right click the address and open the contact record.

The author of AddressContext has suggested for the last few months that he would eventually add it to his extension, but he's unable to work on it for a few more months....its hard to wait since we're constantly updating contact info all day long from emails received. I have UserChrome.js installed with some sample scripts working...and this seems like the perfect way to add this function.

Specifically, I'm looking to add "Open Contact" in the context menu above "Add to Address Book" when pointing at an email address in the preview pane or the summary in the thread pane. This menu item will find that email address in the address book and open that contact record for editing. If there are multiple matches, then display the list of matches as does the Address Book Search function. I see how to add the menu item and can even open the address book from it...but I need help with the code to actually search for and open the specific contact record.

Manually, I currently do this:
copy the address to the clipboard
Open the address book
paste the address into the search field
display list of matches
select the one that matches & open the contact record

Please...anyone.....can you scriptify it?
Old Ausdilecce
Posts: 0
Joined: December 31st, 1969, 5:00 pm

Post by Old Ausdilecce »

The first issue you will have is with the address.. In order to be assured that you are getting the correct contact, you will need to grab the email address ONLY ( not the name part, if there is one )

Then, it would be better to just open the 'edit contact' dialog directly, instead of going thru the addressbook window first..

In order to open the 'edit contact' dialog and have it work properly, you will need two pieces of info
1) the addressbook card of the contact in question
2) the addressbook directory URI that contains that contact

My addressbookpix extension can be helpful here. The extension does a search of all addressbooks for a contact that contains a particular email address. Storing the contact's card (if found) will give you item 1 and if that card is found, the directory it was found in will be available too..

Here is a snippit of code that will help you on your way (modified slightly from my addressBookPix extension..
feed the function a plaintext address and, if that address exists in *any* addressbooks, the edit card dialog will appear for it

Code: Select all

//********************************************************************************************************************************************
function editContact(address) {  // address is the plaintext address you get from currentHeaderData['from'].headerValue
    if (address == "") return;
    // the next couple lines will strip the name part from the address
    var separator = address.indexOf("<if> -1)  {
        var realAddress = address.substr(separator+1);
        realAddress = realAddress.substring(0,realAddress.indexOf(">"));
        address = realAddress;
    }
    var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);

    // enumerate all of the address books on this system
    var parentDir = rdfService.GetResource("moz-abdirectory://").QueryInterface(Components.interfaces.nsIAbDirectory);
    var enumerator = parentDir.childNodes;
    if (enumerator) {
        while (enumerator.hasMoreElements()) {
            var addrbook = enumerator.getNext();  // an addressbook directory
            addrbook.QueryInterface(Components.interfaces.nsIAbDirectory);
            var searchUri=addrbook.directoryProperties.URI + "?(or(PrimaryEmail,c," + address + "))";  // search for the address in this book
            var directory = rdfService.GetResource(searchUri).QueryInterface(Components.interfaces.nsIAbDirectory);
            // directory will now be a subset of the addressbook containing only those cards that match the searchstring 'address'
            try {
                var ChildCards = directory.childCards;
                ChildCards.first();
                var CurrentItem = ChildCards.currentItem();
            } catch(e) {
                var ChildCards = directory.childNodes;
                if (ChildCards.hasMoreElements()) var CurrentItem = ChildCards.getNext();               
            }
            // if the directory has *any* items, they will be matches of the address
            try {
                var CurrentCard = CurrentItem.QueryInterface(Components.interfaces.nsIAbCard);
                // current card is now the addressbook card of a contact that has 'address'
                if (CurrentCard.primaryEmail.toLowerCase() == address.toLowerCase()) {
                    // open the 'edit contact dialog for this card
                    var CurrentBookURI = addrbook.directoryProperties.URI;
                    window.openDialog(
                        "chrome://messenger/content/addressbook/abEditCardDialog.xul",
                        "",
                        "chrome,resizable=no,modal,titlebar,centerscreen",
                        {abURI:CurrentBookURI, card:CurrentCard, okCallback:null});
                    return;
                }
            }  catch (e)  {
                // we would be here if the directory contained no items
            }
            // if no match found above
            // lets now search the 'second email' of all the contacts in this addressBook
            var searchUri=addrbook.directoryProperties.URI + "?(or(SecondEmail,c," + address + "))";
            var directory = rdfService.GetResource(searchUri).QueryInterface(Components.interfaces.nsIAbDirectory);
            try {
                var ChildCards = directory.childCards;
                ChildCards.first();
                var CurrentItem = ChildCards.currentItem();
            } catch(e) {
                var ChildCards = directory.childNodes;
                if (ChildCards.hasMoreElements()) var CurrentItem = ChildCards.getNext();               
            }
            try {
                var CurrentCard = CurrentItem.QueryInterface(Components.interfaces.nsIAbCard);
                if (CurrentCard.secondEmail.toLowerCase() == address.toLowerCase()) {
                    // open the 'edit contact dialog for this card
                    var CurrentBookURI = addrbook.directoryProperties.URI;
                    window.openDialog(
                        "chrome://messenger/content/addressbook/abEditCardDialog.xul",
                        "",
                        "chrome,resizable=no,modal,titlebar,centerscreen",
                        {abURI:CurrentBookURI, card:CurrentCard, okCallback:null});
                    return;
                }
            }  catch (e)  {
                // we would be here if the directory contained no items
            }
        }
    }
}


Good luck
Old Greg S
Posts: 0
Joined: December 31st, 1969, 5:00 pm

Post by Old Greg S »

When I use this code to add the find close button to the right within the ViewSource window, the code for sizing the customize toolbar window doesn't work. Any ideas?

Code: Select all

(function() {
  // WindowHook by zeniko
  var WindowHook = {
    observe: function(aSubject, aTopic, aData) {
      if(!aSubject._WindowHook) {
        aSubject._WindowHook = this;
        aSubject.addEventListener("load", this.onLoad_window, false);
      }
    },

    onLoad_window: function() {
      this.removeEventListener("load", this._WindowHook.onLoad_window, false);
      var funcs = this._WindowHook.mFuncs[this.document.location.href] || null;
      if(funcs) {
        funcs.forEach(function(aFunc) { aFunc(this); }, this);
      }
      delete this._WindowHook;
    },

    register: function(aURL, aFunc) {
      if(!this.mFuncs) {
        this.mFuncs = {};
        Components.classes["@mozilla.org/observer-service;1"]
          .getService(Components.interfaces.nsIObserverService)
          .addObserver(this, "domwindowopened", false);
      }
      if(!this.mFuncs[aURL]) {
        this.mFuncs[aURL] = [];
      }
      this.mFuncs[aURL].push(aFunc);
    }
  };

  //ViewSource
  WindowHook.register("chrome://global/content/viewSource.xul",
    function(aWindow) {
      // init findbar
      var findbar = aWindow.document.getElementById('FindToolbar');

      // move close button right
      findbar.appendChild(aWindow.document.createElement("toolbarspring"));
      findbar.appendChild(aWindow.document.getElementById("find-closebutton"));

    }
  );

})();
User avatar
KidReefer
Posts: 141
Joined: May 7th, 2006, 6:10 am
Location: Earth...mainly
Contact:

Post by KidReefer »

desertfox wrote:Presenting...
Mouse Gestures with userChrome.js
any suggestions for more gestures?

How about one to close current tab?
BTW...Great Work =D>
I love it so much I find myself trying to "gesture" outside of Firefox :lol:
Thanks again.
Zoolcar9
Posts: 2225
Joined: November 9th, 2004, 6:45 pm
Location: Jakarta, Indonesia (UTC+7)
Contact:

Post by Zoolcar9 »

Greg S wrote:When I use this code to add the find close button to the right within the ViewSource window, the code for sizing the customize toolbar window doesn't work. Any ideas?

All scripts that use WindowHook snippet must be in a same file.
  • <a href="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vc3RhcnQgV2luZG93SG9vayBzbmlwcGV0CiAgdmFyIFdpbmRvd0hvb2sgPSB7CiAgICBvYnNlcnZlOiBmdW5jdGlvbihhU3ViamVjdCwgYVRvcGljLCBhRGF0YSkgewogICAgICAvLy4uLi4uCiAgICB9LAogICAgb25Mb2FkX3dpbmRvdzogZnVuY3Rpb24oKSB7CiAgICAgIC8vLi4uLi4KICAgIH0sCiAgICByZWdpc3RlcjogZnVuY3Rpb24oYVVSTCwgYUZ1bmMpIHsKICAgICAgLy8uLi4uLgogICAgfQogIH07CiAgLy9lbmQgV2luZG93SG9vayBzbmlwcGV0CgogIC8vY3VzdG9taXplIHRvb2xiYXIgd2luZG93CiAgV2luZG93SG9vay5yZWdpc3RlcigiY2hyb21lOi8vZ2xvYmFsL2NvbnRlbnQvY3VzdG9taXplVG9vbGJhci54dWwiLAogICAgZnVuY3Rpb24oYVdpbmRvdykgewogICAgICAvLy4uLi4uCiAgICB9CiAgKTsKCiAgLy92aWV3IHNvdXJjZSB3aW5kb3cKICBXaW5kb3dIb29rLnJlZ2lzdGVyKCJjaHJvbWU6Ly9nbG9iYWwvY29udGVudC92aWV3U291cmNlLnh1bCIsCiAgICBmdW5jdGlvbihhV2luZG93KSB7CiAgICAgIC8vLi4uLi4KICAgIH0KICApOwoKICAvL290aGVyIHdpbmRvdwogIFdpbmRvd0hvb2sucmVnaXN0ZXIoImNocm9tZTovL2Zvby9jb250ZW50L2Zvby54dWwiLAogICAgZnVuY3Rpb24oYVdpbmRvdykgewogICAgICAvLy4uLi4uCiAgICB9CiAgKTsKCn0pKCk7IA%3D%3D">example</a>

My Firefox information | Add-ons | GitHub

"With great power, comes great desire to show it off."
Locked